You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by bj...@locus.apache.org on 2000/08/06 17:07:43 UTC

cvs commit: apache-2.0/src/os/os2 util_os2.c

bjh         00/08/06 08:07:42

  Modified:    src/os/os2 util_os2.c
  Log:
  Some enhancements for OS/2 ap_canonical_filename:
  - Log proper error message instead of error code on failure
  - In case of error caused by an invalid file name, don't return an empty
    string as that tends to confuse things rather than make them better.
  - Avoid using the very expensive ap_os_systemcase_canonical_filename()
    unless it's truely necessary.
  
  Revision  Changes    Path
  1.13      +21 -6     apache-2.0/src/os/os2/util_os2.c
  
  Index: util_os2.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/os/os2/util_os2.c,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- util_os2.c	2000/08/02 05:27:27	1.12
  +++ util_os2.c	2000/08/06 15:07:41	1.13
  @@ -86,12 +86,10 @@
       rc = DosQueryPathInfo(buf, FIL_QUERYFULLNAME, buf2, HUGE_STRING_LEN);
   
       if (rc) {
  -        if ( rc != ERROR_INVALID_NAME ) {
  -            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL, "OS/2 error %d for file %s", rc, szFile);
  -            return apr_pstrdup(pPool, "");
  -        } else {
  -            return apr_pstrdup(pPool, szFile);
  +        if (rc != ERROR_INVALID_NAME) {
  +            ap_log_error(APLOG_MARK, APLOG_ERR, APR_OS2_STATUS(rc), NULL, "for file [%s]", szFile);
           }
  +        apr_cpystrn(buf2, buf, sizeof(buf2));
       }
   
   /* Switch backslashes to forward */
  @@ -151,7 +149,24 @@
   
   char *ap_os_canonical_filename(apr_pool_t *pPool, const char *szFile)
   {
  -    char *szCanonicalFile = ap_os_systemcase_canonical_filename(pPool, szFile);
  +    char *szCanonicalFile;
  +    const unsigned char *pos = szFile;
  +
  +    /* Find any 8 bit characters */
  +    while (*pos && *pos < 128) {
  +        pos++;
  +    }
  +
  +    /* Only use the very expensive ap_os_systemcase_canonical_filename() if
  +     * the file name contains non-english characters as they are the only type
  +     * that can't be made canonical with a simple strlwr() 
  +     */
  +    if (*pos < 128) {
  +        szCanonicalFile = ap_os_case_canonical_filename(pPool, szFile);
  +    } else {
  +        szCanonicalFile = ap_os_systemcase_canonical_filename(pPool, szFile);
  +    }
  +
       strlwr(szCanonicalFile);
       return szCanonicalFile;
   }