Mail Archives: djgpp-workers/1999/03/18/10:51:32.1
--Message-Boundary-25740
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body
Here is a corrected version of the patch. Attached is the revised
documentation.
> Of course. I was just asking where in the patched code is the case of a
> missing source file handled (presumably by calling `link'). Can you point
> at that place?
>
The only change is that non-v2 exes are handled calling link() instead
of returning with an error.
In the patch, you'll see two cases of
if (v2_prog == 0)
handler code here
v2_prog == 0 means the file exists but isn't a v2 exe. v2_prog == -1
(doesn't exist) and v2_prog == 1 (is v2 exe) are let through in both
cases. The handler code was changed from return an error sentinal to
return the result of link().
Further down in symlink.c, there is a comment that mentions non-
existing files.
/* When we are here, either the file exists and is a v2 executable
or it does not exist and we hope, the the user knows what he
does. */
Since the only change I made was to the case of v2_prog == 0 and
when the source and dest were in the same directory, non-existing
files continue to work the same way as before the patch. Which is, to
generate a DJGPP-style symlink as if the file existed.
*** src/libc/posix/unistd/symlink.c.orig Tue Oct 28 14:22:54 1997
--- src/libc/posix/unistd/symlink.c Thu Mar 18 10:29:24 1999
***************
*** 73,84 ****
src_base = tail (src_abs);
dest_base = tail (dest_abs);
! /* DJGPP symlinks must be in the same directory. */
if (strnicmp (src_abs, dest_abs, src_base - src_abs))
! {
! errno = EXDEV;
! return -1;
! }
/* Any file is already a link to itself. */
if (stricmp (src_abs, dest_abs) == 0)
--- 73,82 ----
src_base = tail (src_abs);
dest_base = tail (dest_abs);
! /* DJGPP symlinks must be in the same directory.
! Retry by calling link() to make a copy. */
if (strnicmp (src_abs, dest_abs, src_base - src_abs))
! return link (source, dest);
/* Any file is already a link to itself. */
if (stricmp (src_abs, dest_abs) == 0)
***************
*** 88,99 ****
unstubbed COFF image) */
v2_prog = is_v2_prog(src_abs);
! /* It is an existing file but no v2 executable */
if (v2_prog == 0)
! {
! errno = EXDEV;
! return -1;
! }
/* Allow to say `ln -s src dest' when we really
mean `src.exe' and `dest.exe' */
--- 86,95 ----
unstubbed COFF image) */
v2_prog = is_v2_prog(src_abs);
! /* It is an existing file but no v2 executable.
! To make the best of things, call link(). */
if (v2_prog == 0)
! return link (source, dest);
/* Allow to say `ln -s src dest' when we really
mean `src.exe' and `dest.exe' */
***************
*** 106,121 ****
v2_prog = v2_prog == 1 ? v2_prog : is_v2_prog(src_abs);
}
! /* It is an existing file but no v2 executable */
if (v2_prog == 0)
! {
! errno = EXDEV;
! return -1;
! }
/* When we are here, either the file exists and is a v2 executable
! or it does not exist and we hope, the the user knows what he
! does. */
/* Under LFN, we need the short version of the program name, since
that
is what the stub stores (and what a program gets in its argv[0]). */
--- 102,115 ----
v2_prog = v2_prog == 1 ? v2_prog : is_v2_prog(src_abs);
}
! /* It is an existing file but no v2 executable.
! Retry by calling link() to make a regular copy. */
if (v2_prog == 0)
! return link (source, dest);
/* When we are here, either the file exists and is a v2 executable
! or it does not exist and we hope, that the user knows what he is
! doing. */
/* Under LFN, we need the short version of the program name, since
that
is what the stub stores (and what a program gets in its argv[0]). */
---
Mark Elbrecht, snowball3 AT usa DOT net
http://snowball.digitalspace.net/
--Message-Boundary-25740
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Text from file 'symlink2.dif'
*** src/libc/posix/unistd/symlink.txh.orig Sun Sep 27 11:22:28 1998
--- src/libc/posix/unistd/symlink.txh Wed Mar 17 13:17:16 1999
***************
*** 17,24 ****
depending on what's passed in @code{argv[0]}). The file referred to by
@var{exists} doesn't really have to exist when this function is called.
If @var{exists} points to an @emph{existing} file, the function checks
! that it is a DJGPP executable; if not, the call will fail with
! @code{EXDEV}.
Both @var{new} and @var{exists} can point to a name with or without the
@file{.exe} extension.
--- 17,24 ----
depending on what's passed in @code{argv[0]}). The file referred to by
@var{exists} doesn't really have to exist when this function is called.
If @var{exists} points to an @emph{existing} file, the function checks
! that it is a DJGPP executable; if not, attempt to make a copy of the
! file by calling @code{link}(@pxref{link}).
Both @var{new} and @var{exists} can point to a name with or without the
@file{.exe} extension.
--Message-Boundary-25740--
- Raw text -