From: "Mark E." To: djgpp-workers AT delorie DOT com Date: Sat, 7 Jul 2001 14:13:51 -0400 MIME-Version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Subject: Re: dosexec.c changes Message-ID: <3B47191F.26126.BB7A01@localhost> In-reply-to: <3791-Sat07Jul2001201003+0300-eliz@is.elta.co.il> References: <3B46FC1B DOT 14992 DOT 4A1DB3 AT localhost> (snowball3 AT bigfoot DOT com) X-mailer: Pegasus Mail for Win32 (v3.12c) Reply-To: djgpp-workers AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp-workers AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk > I think you should call it in the fragment below with second argument > `rd', not `rp'. > > if (_use_lfn(path) || !rd) > > { > > i = find_extension(rpath, rp); I think it's correct as-is. For one, it's what the current version in dosexec.c does: if (_use_lfn(rpath) || !rd) { for (i=0; interpreters[i].extension; i++) { if ((interpreters[i].flags & INTERP_FLAG_SKIP_SEARCH) == 0) { strcpy(rp, interpreters[i].extension); if (access(rpath, F_OK) == 0 && !(is_dir = (access(rpath, D_OK) == 0))) { found = 1; break; But that by itself isn't a good reason. My understanding of what's happening here: The code inside the if block is searching for an extension to append to the filename. The two ways to get inside this block are if lfn is supported or if the path in rpath doesn't already contain an extension. lfn support is an automatic pass because lfn paths may have more than one dot. 'rp' points to the end of the path, so this is where an extension must be appended. 'rd' points to the extension in rpath (if any). So using it instead of 'rp' means that the extension in rpath would be replaced by one ahead of it in the search order if that a file with that extension exists. Plus it's also what the current version in dosexec.c does: if (_use_lfn(rpath) || !rd) { for (i=0; interpreters[i].extension; i++) { if ((interpreters[i].flags & INTERP_FLAG_SKIP_SEARCH) == 0) { strcpy(rp, interpreters[i].extension); if (access(rpath, F_OK) == 0 && !(is_dir = (access(rpath, D_OK) == 0))) { found = 1; break; } } } }