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]>
Alex,

Please improve the log message.
Since it only changes Windows code,
the log message should reflect that.

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
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.