X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=cpmfs.c;fp=cpmfs.c;h=032a6f184b3d00b55fb34e6a52cd41a0a1e656de;hb=224b4e6d27a3af235500d9d8028ddbd3a60af7ed;hp=cabe8ee9f885ba07477e28ef0d321fc338dc5949;hpb=9d1b9d0a2b6515be3cec895654af126aaddd21b3;p=debian%2Fcpmtools diff --git a/cpmfs.c b/cpmfs.c index cabe8ee..032a6f1 100644 --- a/cpmfs.c +++ b/cpmfs.c @@ -1,12 +1,5 @@ /* #includes */ /*{{{C}}}*//*{{{*/ -#undef _POSIX_SOURCE -#define _POSIX_SOURCE 1 -#undef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 2 - -#ifdef DMALLOC -#include "dmalloc.h" -#endif +#include "config.h" #include #include @@ -16,9 +9,13 @@ #include #include #include -#include "config.h" + #include "cpmdir.h" #include "cpmfs.h" + +#ifdef USE_DMALLOC +#include +#endif /*}}}*/ /* #defines */ /*{{{*/ #undef CPMFS_DEBUG @@ -510,23 +507,23 @@ static int recmatch(const char *a, const char *pattern) while (*pattern) { - switch (*pattern) - { - case '*': - { - if (*a=='.' && first) return 1; - ++pattern; - while (*a) if (recmatch(a,pattern)) return 1; else ++a; - break; - } - case '?': + switch (*pattern) { - if (*a) { ++a; ++pattern; } else return 0; - break; + case '*': + { + if (*a=='.' && first) return 1; + ++pattern; + while (*a) if (recmatch(a,pattern)) return 1; else ++a; + break; + } + case '?': + { + if (*a) { ++a; ++pattern; } else return 0; + break; + } + default: if (*a==*pattern) { ++a; ++pattern; } else return 0; } - default: if (*a==*pattern) { ++a; ++pattern; } else return 0; - } - first=0; + first=0; } return (*pattern=='\0' && *a=='\0'); } @@ -558,21 +555,27 @@ void cpmglob(int optin, int argc, char * const argv[], struct cpmInode *root, in *gargc=0; cpmOpendir(root,&dir); entries=0; - dirent=realloc(dirent,sizeof(struct cpmDirent)*(dirsize=32)); - while (cpmReaddir(&dir,dirent+entries)) + dirsize=8; + dirent=malloc(sizeof(struct cpmDirent)*dirsize); + while (cpmReaddir(&dir,&dirent[entries])) { ++entries; if (entries==dirsize) dirent=realloc(dirent,sizeof(struct cpmDirent)*(dirsize*=2)); } + for (i=optin; i