Re: Fix for 687151, gswin32 starts with 7s delay while searching bad ENCODING pathname
"Igor V. Melichev" <[email protected]>
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Message-ID | <[email protected]> |
The code change looks good. Due to the code freezing wait for Ray's or Raph's approval for commitment. However the posting doesn't clearly designate the log message, so it can cause some confusions. Igor. ----- Original Message ----- From: "Alex Cherepanov" <[email protected]> To: "gs-code-review" <[email protected]> Sent: Wednesday, December 03, 2003 3:47 PM Subject: [gs-code-review] Fix for 687151, gswin32 starts with 7s delay while searching bad ENCODING pathname > Convert filenameforall template string back to the path name discarding > literary status of \*? because it is not supported by the OS. > > This shoud fix the reported problem but a general solution need much > more efforts, including: > (1) Use of platform-independent path names in the template. I.e. > consider '/' as a path separator on any platform and map it > accordingly. > (2) Support of '?' and '*' wildcards on the platforms which don't > support them natively. > (3) Support of literary '\\', '?' and '*' on the platforms which don't > support them natively. > (4) Recursive enumeration of the directory. > > ---------------------------------------------------------------------------- ---- > Index: gs/src/gp_ntfs.c > =================================================================== > RCS file: /cvs/ghostscript/gs/src/gp_ntfs.c,v > retrieving revision 1.21 > diff -b -u -r1.21 gp_ntfs.c > --- gs/src/gp_ntfs.c 21 Oct 2003 11:54:04 -0000 1.21 > +++ gs/src/gp_ntfs.c 3 Dec 2003 12:23:35 -0000 > @@ -99,7 +99,7 @@ > file_enum_enum_ptrs, file_enum_reloc_ptrs, pattern); > > /* Initialize an enumeration. Note that * and ? in a directory */ > -/* don't work, and \ is taken literally unless a second \ follows. */ > +/* don't work. Literary *?\ are not supported by the OS. */ > file_enum * > gp_enumerate_files_init(const char *pat, uint patlen, gs_memory_t * mem) > { > @@ -107,7 +107,7 @@ > int pat_size = 2 * patlen + 1; > char *pattern; > int hsize = 0; > - int i; > + int i,j; > > if (pfen == 0) > return 0; > @@ -119,22 +119,23 @@ > "gp_enumerate_files(pattern)"); > if (pattern == 0) > return 0; > - memcpy(pattern, pat, patlen); > - /* find directory name = header */ > - for (i = 0; i < patlen; i++) { > - switch (pat[i]) { > - case '\\': > - if (i + 1 < patlen && pat[i + 1] == '\\') > + > + /* decode the template into path name, discarding literary status of *? */ > + for (i = 0, j=0; i < patlen; i++) { > + if(pat[i] == '\\' && i+1 < patlen && > + (pat[i+1] == '?' || pat[i+1] == '*' || pat[i+1] == '\\' )) > i++; > - /* falls through */ > - case ':': > - case '/': > - hsize = i + 1; > + pattern[j++]=pat[i]; > } > + > + for (i = 0; i < j; i++) { > + if(pattern[i] == '/' || pattern[i] == '\\' || pattern[i] == ':') > + hsize = i+1; > } > - pattern[patlen] = 0; > + > + pattern[j] = 0; > pfen->pattern = pattern; > - pfen->patlen = patlen; > + pfen->patlen = j; > pfen->pat_size = pat_size; > pfen->head_size = hsize; > pfen->memory = mem; > ---------------------------------------------------------------------------- ---- > _______________________________________________ > gs-code-review mailing list > [email protected] > http://www.ghostscript.com/mailman/listinfo/gs-code-review >