file.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include "file.h"
  4. #include "elog.h"
  5. #if 1
  6. #define LOGE log_e
  7. #define LOGW log_w
  8. #define LOGD log_d
  9. #else
  10. #define LOGD printf
  11. #define LOGW printf
  12. #define LOGE printf
  13. #endif
  14. int file_length(char* path)
  15. {
  16. int r;
  17. struct stat st;
  18. r = stat(path, &st);
  19. if (r) {
  20. return -1;
  21. }
  22. return st.st_size;
  23. }
  24. int file_exist(char* path)
  25. {
  26. int r;
  27. struct stat st;
  28. r = stat(path, &st);
  29. if (r) {
  30. return 0;
  31. }
  32. return 1;
  33. }
  34. int file_save(char *path, void *buf, int len)
  35. {
  36. int r;
  37. FILE *fp;
  38. fp = fopen(path, "w");
  39. if(!fp) {
  40. LOGE("file_save, fopen %s failed\n", path);
  41. return -1;
  42. }
  43. r = fwrite(buf, 1, len, fp);
  44. if(r!=len) {
  45. LOGE("file_save %s failed, %d, %d\n", path, r, len);
  46. r = -1;
  47. }
  48. else {
  49. r = 0;
  50. }
  51. fclose(fp);
  52. return r;
  53. }
  54. int file_load(char* path, buf_t *fbuf)
  55. {
  56. int r,flen,blen;
  57. FILE* fp;
  58. flen = file_length(path);
  59. if(flen<=0) {
  60. LOGE("____ file_load, %s failed\n", path);
  61. return -1;
  62. }
  63. blen = flen+1;
  64. fbuf->buf = (char*)malloc(blen);
  65. if(!fbuf->buf) {
  66. LOGE("____ file_load, %s malloc %d failed\n", path, flen);
  67. return -1;
  68. }
  69. fbuf->dlen = flen;
  70. fbuf->blen = blen;
  71. fp = fopen(path, "r");
  72. if (!fp) {
  73. LOGE("file_load, fopen %s failed\n", path);;
  74. free(fbuf->buf);
  75. return -1;
  76. }
  77. r = fread(fbuf->buf, 1, flen, fp);
  78. if (r != flen) {
  79. LOGE("file_load %s failed, %d, %d\n", path, r, flen);
  80. fclose(fp); free(fbuf->buf);
  81. r = -1;
  82. }
  83. else {
  84. fbuf->buf[flen] = 0; r = 0;
  85. }
  86. fclose(fp);
  87. return r;
  88. }
  89. char* file_load2(char* path, int add0)
  90. {
  91. FILE* fp=NULL;
  92. int r,flen,blen;
  93. char *fbuf=NULL;
  94. flen = file_length(path);
  95. if(flen<=0) {
  96. LOGE("____ file_load2, %s failed\n", path);
  97. return NULL;
  98. }
  99. blen = flen+(add0?1:0);
  100. fbuf = (char*)malloc(blen);
  101. if(!fbuf) {
  102. LOGE("____ file_load2, %s malloc %d failed\n", path, flen);
  103. return NULL;
  104. }
  105. fp = fopen(path, "r");
  106. if (!fp) {
  107. LOGE("file_load2, fopen %s failed\n", path);;
  108. free(fbuf);
  109. return NULL;
  110. }
  111. r = fread(fbuf, 1, flen, fp);
  112. if (r != flen) {
  113. LOGE("file_load2 %s failed, %d, %d\n", path, r, flen);
  114. fclose(fp); free(fbuf);
  115. fbuf = NULL;
  116. }
  117. if(add0) fbuf[flen] = 0;
  118. fclose(fp);
  119. return fbuf;
  120. }
  121. int file_copy(char *dst, char *src)
  122. {
  123. int r;
  124. buf_t fbuf;
  125. remove(dst);
  126. r = file_load(src, &fbuf);
  127. if(r==0) {
  128. r = file_save(dst, fbuf.buf, fbuf.dlen);
  129. free(fbuf.buf);
  130. }
  131. return r;
  132. }
  133. int file_remove(char *path)
  134. {
  135. return remove(path);
  136. }
  137. int file_append(char *path, void *data, int datalen)
  138. {
  139. int r=-1;
  140. FILE* fp;
  141. fp = fopen(path, "a");
  142. if(!fp) {
  143. LOGE("file_append, fopen %s failed\n", path);
  144. return -1;
  145. }
  146. r = fwrite(data, 1, datalen, fp);
  147. if(r==datalen) {
  148. r = 0;
  149. }
  150. else {
  151. LOGE("file_append %s failed, %d, %d\n", path, r, datalen);
  152. r = -1;
  153. }
  154. fclose(fp);
  155. return r;
  156. }