--- estcmd.c.org Sun Feb 10 16:59:58 2008 +++ estcmd.c Sun Feb 10 19:29:49 2008 @@ -2368,6 +2368,28 @@ return 0; } +#if 1 +CBLIST *mbwa_cbdirlist(const char *name) +{ + char temp_dirname[PATH_MAX + 1]; + if (name) { + int len = 0; + unsigned char* _mbsrchr(const unsigned char* string, unsigned int c); + + len = strlen(name); + if (len > 0 && (_mbsrchr(name, ESTPATHCHR) != (unsigned char*) (name + len - 1))) { + temp_dirname[PATH_MAX] = '\0'; + temp_dirname[PATH_MAX - 1] = '\0'; + len = len <= (PATH_MAX - 1) ? len : (PATH_MAX - 1); + strncpy(temp_dirname, name, len); + temp_dirname[len] = ESTPATHCHR; + temp_dirname[len + 1] = '\0'; + name = temp_dirname; + } + } + return cbdirlist(name); +} +#endif /* perform the gather command */ static int procgather(const char *dbname, const char *filename){ @@ -2394,14 +2416,24 @@ cblistunshift(list, path, -1); free(path); while((line = cblistshift(list, &len)) != NULL){ - if(stat(line, &sbuf) != -1 && S_ISDIR(sbuf.st_mode) && (clist = cbdirlist(line)) != NULL){ + if(stat(line, &sbuf) != -1 && S_ISDIR(sbuf.st_mode) && (clist = mbwa_cbdirlist(line)) != NULL){ cblistsort(clist); for(i = cblistnum(clist) - 1; i >= 0; i--){ tmp = cblistval(clist, i, NULL); if(!strcmp(tmp, ESTCDIRSTR) || !strcmp(tmp, ESTPDIRSTR)) continue; if(ESTPATHCHR == '\\' && dosbadname(tmp)) continue; +#if 0 path = (len > 0 && line[len-1] == ESTPATHCHR) ? cbsprintf("%s%s", line, tmp) : cbsprintf("%s%c%s", line, ESTPATHCHR, tmp); +#else + unsigned char* _mbsrchr(const unsigned char* string, unsigned int c); + if (len > 0 && (_mbsrchr(line, ESTPATHCHR) == (unsigned char*)(line + len - 1))) { + path = cbsprintf("%s%s", line, tmp); + } + else { + path = cbsprintf("%s%c%s", line, ESTPATHCHR, tmp); + } +#endif cblistunshift(list, path, -1); free(path); } @@ -2929,7 +2961,7 @@ list = cblistopen(); cblistunshift(list, dirname, -1); while((line = cblistshift(list, &len)) != NULL){ - if(stat(line, &sbuf) != -1 && S_ISDIR(sbuf.st_mode) && (clist = cbdirlist(line)) != NULL){ + if(stat(line, &sbuf) != -1 && S_ISDIR(sbuf.st_mode) && (clist = mbwa_cbdirlist(line)) != NULL){ if(tmode != ST_FILE){ switch(pmode){ default: @@ -2950,8 +2982,18 @@ tmp = cblistval(clist, i, NULL); if(!strcmp(tmp, ESTCDIRSTR) || !strcmp(tmp, ESTPDIRSTR)) continue; if(ESTPATHCHR == '\\' && dosbadname(tmp)) continue; +#if 0 path = (len > 0 && line[len-1] == ESTPATHCHR) ? cbsprintf("%s%s", line, tmp) : cbsprintf("%s%c%s", line, ESTPATHCHR, tmp); +#else + unsigned char* _mbsrchr(const unsigned char* string, unsigned int c); + if (len > 0 && (_mbsrchr(line, ESTPATHCHR) == (unsigned char*)(line + len - 1))) { + path = cbsprintf("%s%s", line, tmp); + } + else { + path = cbsprintf("%s%c%s", line, ESTPATHCHR, tmp); + } +#endif cblistunshift(list, path, -1); free(path); }