diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 2 | ||||
| -rw-r--r-- | src/msdos.c | 38 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 240fd8fb9a7..1dff4e4a61b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,5 +1,7 @@ | |||
| 1 | 2011-04-06 Eli Zaretskii <eliz@gnu.org> | 1 | 2011-04-06 Eli Zaretskii <eliz@gnu.org> |
| 2 | 2 | ||
| 3 | * msdos.c (careadlinkat, careadlinkatcwd): MS-DOS replacements. | ||
| 4 | |||
| 3 | * w32.c (careadlinkat, careadlinkatcwd): New always-fail stubs. | 5 | * w32.c (careadlinkat, careadlinkatcwd): New always-fail stubs. |
| 4 | 6 | ||
| 5 | 2011-04-06 Paul Eggert <eggert@cs.ucla.edu> | 7 | 2011-04-06 Paul Eggert <eggert@cs.ucla.edu> |
diff --git a/src/msdos.c b/src/msdos.c index b0bf5c4fdd9..e02e64b9ece 100644 --- a/src/msdos.c +++ b/src/msdos.c | |||
| @@ -81,6 +81,9 @@ extern int spawnve (int, const char *, char *const [], char *const []); | |||
| 81 | #include <signal.h> | 81 | #include <signal.h> |
| 82 | #include "syssignal.h" | 82 | #include "syssignal.h" |
| 83 | 83 | ||
| 84 | #include "careadlinkat.h" | ||
| 85 | #include "allocator.h" | ||
| 86 | |||
| 84 | #ifndef SYSTEM_MALLOC | 87 | #ifndef SYSTEM_MALLOC |
| 85 | 88 | ||
| 86 | #ifdef GNU_MALLOC | 89 | #ifdef GNU_MALLOC |
| @@ -3933,6 +3936,41 @@ readlink (const char *name, char *dummy1, size_t dummy2) | |||
| 3933 | } | 3936 | } |
| 3934 | #endif | 3937 | #endif |
| 3935 | 3938 | ||
| 3939 | char * | ||
| 3940 | careadlinkat (int fd, char const *filename, | ||
| 3941 | char *buffer, size_t buffer_size, | ||
| 3942 | struct allocator const *alloc, | ||
| 3943 | ssize_t (*preadlinkat) (int, char const *, char *, size_t)) | ||
| 3944 | { | ||
| 3945 | if (!buffer) | ||
| 3946 | { | ||
| 3947 | /* We don't support the fancy auto-allocation feature. */ | ||
| 3948 | if (!buffer_size) | ||
| 3949 | errno = ENOSYS; | ||
| 3950 | else | ||
| 3951 | errno = EINVAL; | ||
| 3952 | buffer = NULL; | ||
| 3953 | } | ||
| 3954 | else | ||
| 3955 | { | ||
| 3956 | ssize_t len = preadlinkat (fd, filename, buffer, buffer_size); | ||
| 3957 | |||
| 3958 | if (len < 0 || len == buffer_size) | ||
| 3959 | buffer = NULL; | ||
| 3960 | else | ||
| 3961 | buffer[len + 1] = '\0'; | ||
| 3962 | } | ||
| 3963 | return buffer; | ||
| 3964 | } | ||
| 3965 | |||
| 3966 | ssize_t | ||
| 3967 | careadlinkatcwd (int fd, char const *filename, char *buffer, | ||
| 3968 | size_t buffer_size) | ||
| 3969 | { | ||
| 3970 | (void) fd; | ||
| 3971 | return readlink (filename, buffer, buffer_size); | ||
| 3972 | } | ||
| 3973 | |||
| 3936 | 3974 | ||
| 3937 | #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 2 | 3975 | #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 2 |
| 3938 | 3976 | ||