utils.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include <stddef.h>
  2. #include <stdio.h>
  3. /**************************************************
  4. This file contains general purpose helper functions
  5. **************************************************/
  6. /*
  7. input:
  8. str - pointer to string
  9. split - byte-separator
  10. bufsize - size of buf
  11. output:
  12. buf - pointer to buf, where part of the string will be stored
  13. offset - pointer to var, where input offset will be saved
  14. return:
  15. neg on error
  16. 0 if that part is last
  17. 1 if that part not last
  18. */
  19. int parserCore( const char* str, char split, char* buf, size_t bufsize, size_t* offset ){
  20. register size_t i;
  21. register size_t p;
  22. //init some vars
  23. p = *offset;
  24. for( i = 0; i < bufsize; i++ ){
  25. //read byte from input
  26. buf[i] = str[p];
  27. p++;
  28. //if end of string
  29. if( !buf[i] ){
  30. *offset = p;
  31. return 0;
  32. }
  33. //if this byte equal split
  34. if( buf[i] == split ){
  35. buf[i] = 0x00;
  36. *offset = p;
  37. return 1;
  38. }
  39. }
  40. return -1;
  41. }
  42. static const char* const readableSizeStrings[] = {
  43. "%.0f B", "%.2f KiB", "%.2f MiB", "%.2f GiB",
  44. "%.2f TiB", "%.2f PiB", "%.2f EiB", NULL };
  45. void readableSize( char* buf, off_t bytes ){
  46. int i;
  47. double size = bytes;
  48. for( i = 0; size > 1023 && readableSizeStrings[i+1]; i++ ) size /= 1024;
  49. sprintf( buf, readableSizeStrings[i], size );
  50. }
  51. /*
  52. str - pointer to input string
  53. buf - pointer to output encoded uri
  54. bufsize - length of buf
  55. */
  56. int uriEncode( const char* str, char* buf, int bufsize ){
  57. int i;
  58. int res;
  59. int offset;
  60. offset = 0;
  61. for( i = 0; offset < bufsize; i++ ){
  62. if( !str[i] ){
  63. buf[offset] = 0x00;
  64. return offset;
  65. }
  66. if( offset + 4 > bufsize ) return -2;
  67. res = sprintf( buf + offset, "%%%02hhX", str[i] );
  68. if( res != 3 ){
  69. perror( "uri encode sprintf" );
  70. return -2;
  71. }
  72. offset += 3;
  73. }
  74. return -2;
  75. }