Advertisement
PierrotLL

FindFiles.c

Nov 12th, 2013
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.30 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include "FindFiles.h"
  3.  
  4. /**********************/
  5. /** String functions **/
  6. /**********************/
  7.  
  8. int lenght(FONTCHARACTER* str) {
  9.     int i;
  10.     for(i=0 ; str[i] ; i++);
  11.     return i;
  12. }
  13.  
  14. FONTCHARACTER* str2FONTCHARACTER(char* source, FONTCHARACTER* dest) {
  15.     int i;
  16.     for(i=0 ; source[i] ; i++)
  17.         dest[i] = source[i];
  18.     dest[i] = 0;
  19.     return dest;
  20. }
  21.  
  22. char* FONTCHARACTER2str(FONTCHARACTER* source, char* dest) {
  23.     int i;
  24.     for(i=0 ; source[i] ; i++)
  25.         dest[i] = source[i];
  26.     dest[i] = 0;
  27.     return dest;
  28. }
  29.  
  30. char* filename(char* completePath) {
  31.     int i;
  32.     char* p;
  33.     p = completePath;
  34.     for(i=0 ; completePath[i] ; i++) {
  35.         if(completePath[i] == '\\')
  36.             p = &completePath[i+1];
  37.     }
  38.     return p;
  39. }
  40.  
  41. /*********************/
  42. /** Array functions **/
  43. /*********************/
  44.  
  45. int fileListLenght(File* list) {
  46.     int i;
  47.     for(i=0 ; list[i].path ; i++);
  48.     return i;
  49. }
  50.  
  51. File* joinFilelists(File* list1, File* list2, int deleteSources) {
  52.     int i, j;
  53.     File* list = malloc((fileListLenght(list1) + fileListLenght(list2) + 1) * sizeof(File));
  54.     if(list) {
  55.         for(i=0 ; list1[i].path ; i++)
  56.             list[i] = list1[i];
  57.         for(j=0 ; list2[j].path ; j++)
  58.             list[i+j] = list2[j];
  59.     }
  60.     if(deleteSources) {
  61.         freeFilelist(list1);
  62.         freeFilelist(list2);
  63.     }
  64.     return list;
  65. }
  66.  
  67. /**********************/
  68. /** Search functions **/
  69. /**********************/
  70.  
  71. int countFiles(char* mask) {
  72.     int count = 0, handle;
  73.     FONTCHARACTER* _mask, foundfile[30];
  74.     FILE_INFO fileinfo;
  75.     _mask = malloc((strlen(mask) + 1) * sizeof(FONTCHARACTER));
  76.     if(_mask) {
  77.         str2FONTCHARACTER(mask, _mask);
  78.         if(Bfile_FindFirst(_mask, &handle, foundfile, &fileinfo) == 0) {
  79.             do count++;
  80.             while(Bfile_FindNext(handle, foundfile, &fileinfo) == 0);
  81.             Bfile_FindClose(handle);
  82.         }
  83.         free(_mask);
  84.     }
  85.     return count;
  86. }
  87.  
  88. File* findFiles(char* mask) {
  89.     int handle, i=0, pathlength;
  90.     File* list = 0;
  91.     FONTCHARACTER* _mask, foundfile[30];
  92.     FILE_INFO fileinfo;
  93.     list = malloc((countFiles(mask) + 1) * sizeof(char*));
  94.     if(list) {
  95.         _mask = malloc((strlen(mask) + 1) * sizeof(FONTCHARACTER));
  96.         if(_mask) {
  97.             str2FONTCHARACTER(mask, _mask);
  98.             filename(mask)[0] = 0;
  99.             pathlength = strlen(mask);
  100.             if(Bfile_FindFirst(_mask, &handle, foundfile, &fileinfo) == 0) {
  101.                 do {
  102.                     list[i].path = malloc(pathlength + lenght(foundfile) + 1);
  103.                     if(list[i].path) {
  104.                         strcpy(list[i].path, mask);
  105.                         list[i].name = filename(list[i].path);
  106.                         FONTCHARACTER2str(foundfile, list[i].name);
  107.                         list[i].size = fileinfo.fsize;
  108.                     } else {
  109.                         list[i].name = 0;
  110.                         list[i].size = 0;
  111.                     }
  112.                     i++;
  113.                 } while(Bfile_FindNext(handle, foundfile, &fileinfo) == 0);
  114.                 Bfile_FindClose(handle);
  115.             }
  116.             free(_mask);
  117.         }
  118.         list[i].path = 0;
  119.         list[i].name = 0;
  120.         list[i].size = 0;
  121.     }
  122.     return list;
  123. }
  124.  
  125. void freeFilelist(File* list) {
  126.     int i;
  127.     if(list) {
  128.         for(i = 0 ; list[i].path ; i++)
  129.             free(list[i].path);
  130.         free(list);
  131.     }
  132. }
  133.  
  134. /********************/
  135. /** File functions **/
  136. /********************/
  137.  
  138. int openFile(char* path, char* mode) {
  139.     int _mode = 0;
  140.     FONTCHARACTER filename[30];
  141.     if(strcmp(mode, "r")==0) _mode = _OPENMODE_READ;
  142.     if(strcmp(mode, "w")==0) _mode = _OPENMODE_WRITE;
  143.     if(strcmp(mode, "r+")==0) _mode = _OPENMODE_READWRITE;
  144.     return Bfile_OpenFile(str2FONTCHARACTER(path, filename), _mode);
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement