delorie.com/archives/browse.cgi | search |
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-workers-bounces using -f |
X-Recipient: | djgpp-workers AT delorie DOT com |
X-Authenticated: | #27081556 |
X-Provags-ID: | V01U2FsdGVkX1+AHaR0NY6AUWqKuvCHLKxCeIpQA0U465Gw3VaJD7 |
FnqEXojpZtTmME | |
Message-ID: | <000e01c91827$34a54f90$2202a8c0@computername> |
From: | "Juan Manuel Guerrero" <juan DOT guerrero AT gmx DOT de> |
To: | <djgpp-workers AT delorie DOT com> |
Subject: | realpath/_fixpath and _use_lfn generated errno |
Date: | Tue, 16 Sep 2008 20:08:21 +0200 |
MIME-Version: | 1.0 |
X-Priority: | 3 |
X-MSMail-Priority: | Normal |
X-Mailer: | Microsoft Outlook Express 6.00.2800.1106 |
X-MimeOLE: | Produced By Microsoft MimeOLE V6.00.2800.1106 |
X-Y-GMX-Trusted: | 0 |
X-FuHaFi: | 0.55 |
Reply-To: | djgpp-workers AT delorie DOT com |
While I was trying to fix the port of Which I have noticed that realpath and _fixpath set errno to ENOSYS if the OS used does not provide the LFN API. This happens because both functions use __canonicalize_path that calls _use_lfn to check if the OS provides a LFN API. If the OS does not, then _use_lfn returns zero and sets errno to ENOSYS (happens in _get_volume_info). But __canonicalize_path does not evalute errno at all and only uses the return value of _use_lfn to decide if function 0x7147 or 0x47 will be used to get the current directory. If the canonicalization of the path can be successfully performed, realpath and _fixpath do not set errno and the value of errno continues to be the one given by _use_lfn, that is errno = ENOSYS and that value is returned to the calling function. I assume that this is not intentional, so I suggest the patch below. Regards, Juan M. Guerrero 2008-09-16 Juan Manuell Guerrero <juan DOT guerrero AT gmx DOT de> * src/libc/posix/sys/stat/fixpath.c: Discard ENOSYS from the _use_lfn call. diff -aprNU3 djgpp.orig/src/libc/posix/sys/stat/fixpath.c djgpp/src/libc/posix/sys/stat/fixpath.c --- djgpp.orig/src/libc/posix/sys/stat/fixpath.c 2002-09-25 23:45:20 +0000 +++ djgpp/src/libc/posix/sys/stat/fixpath.c 2008-09-16 19:11:24 +0000 @@ -140,8 +140,11 @@ __canonicalize_path(const char *in, char char *name_start; int mbsize; char *op_limit; + int previous_errno; + previous_errno = errno; use_lfn = _use_lfn(in); + errno = previous_errno; /* Do not signal that LFN API is not available (ENOSYS). */ if (path_max > FILENAME_MAX) path_max = FILENAME_MAX;
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |