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;
}