aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-02-12 14:02:28 +0000
committerRon Yorston <rmy@pobox.com>2021-02-12 14:02:28 +0000
commite86a3ddd8b60eb0720874f5b9679446d12a1ac41 (patch)
treef35332dccaec68bfd182f705dcec0b2297d3a578
parent90f35327c2f31b7e4d938bf4d54e5526e53daee0 (diff)
downloadbusybox-w32-e86a3ddd8b60eb0720874f5b9679446d12a1ac41.tar.gz
busybox-w32-e86a3ddd8b60eb0720874f5b9679446d12a1ac41.tar.bz2
busybox-w32-e86a3ddd8b60eb0720874f5b9679446d12a1ac41.zip
win32: make readlink(2) implementation unconditional
There doesn't seem to be much advantage in having readlink(2) as a configuration option. Making it unconditional reduces divergence from upstream and allows the removal of a check for ENOSYS that's been in busybox-w32 since the start.
-rw-r--r--Config.in10
-rw-r--r--configs/mingw32_defconfig1
-rw-r--r--configs/mingw64_defconfig1
-rw-r--r--coreutils/ls.c2
-rw-r--r--coreutils/stat.c7
-rw-r--r--include/mingw.h4
-rw-r--r--libbb/xreadlink.c2
-rw-r--r--win32/mingw.c4
8 files changed, 1 insertions, 30 deletions
diff --git a/Config.in b/Config.in
index 356bc6d5a..da8a72a8e 100644
--- a/Config.in
+++ b/Config.in
@@ -492,16 +492,6 @@ config FEATURE_EXTRA_FILE_DATA
492 determine the ownership of files so that, for example, 'ls' can 492 determine the ownership of files so that, for example, 'ls' can
493 distinguish files belonging to the current user. 493 distinguish files belonging to the current user.
494 494
495config FEATURE_READLINK2
496 bool "Read the contents of symbolic links (1.1 kb)"
497 default y
498 depends on PLATFORM_MINGW32
499 help
500 Implement the readlink(2) system call to allow applets to read
501 the contents of symbolic links. With this feature ls and stat
502 can display the target of symbolic links and it makes sense to
503 enable the readlink applet.
504
505comment 'Build Options' 495comment 'Build Options'
506 496
507config STATIC 497config STATIC
diff --git a/configs/mingw32_defconfig b/configs/mingw32_defconfig
index f245141f3..4edf90df3 100644
--- a/configs/mingw32_defconfig
+++ b/configs/mingw32_defconfig
@@ -55,7 +55,6 @@ CONFIG_FEATURE_EURO=y
55CONFIG_SKIP_ANSI_EMULATION_DEFAULT=2 55CONFIG_SKIP_ANSI_EMULATION_DEFAULT=2
56CONFIG_FEATURE_IMPROVED_COLOUR_MAPPING=y 56CONFIG_FEATURE_IMPROVED_COLOUR_MAPPING=y
57CONFIG_FEATURE_EXTRA_FILE_DATA=y 57CONFIG_FEATURE_EXTRA_FILE_DATA=y
58CONFIG_FEATURE_READLINK2=y
59 58
60# 59#
61# Build Options 60# Build Options
diff --git a/configs/mingw64_defconfig b/configs/mingw64_defconfig
index 3ac1f7703..ff73f9a51 100644
--- a/configs/mingw64_defconfig
+++ b/configs/mingw64_defconfig
@@ -55,7 +55,6 @@ CONFIG_FEATURE_EURO=y
55CONFIG_SKIP_ANSI_EMULATION_DEFAULT=2 55CONFIG_SKIP_ANSI_EMULATION_DEFAULT=2
56CONFIG_FEATURE_IMPROVED_COLOUR_MAPPING=y 56CONFIG_FEATURE_IMPROVED_COLOUR_MAPPING=y
57CONFIG_FEATURE_EXTRA_FILE_DATA=y 57CONFIG_FEATURE_EXTRA_FILE_DATA=y
58CONFIG_FEATURE_READLINK2=y
59 58
60# 59#
61# Build Options 60# Build Options
diff --git a/coreutils/ls.c b/coreutils/ls.c
index e891a67ce..67f6c8c56 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -495,11 +495,9 @@ static NOINLINE unsigned display_single(const struct dnode *dn)
495 /* Do readlink early, so that if it fails, error message 495 /* Do readlink early, so that if it fails, error message
496 * does not appear *inside* the "ls -l" line */ 496 * does not appear *inside* the "ls -l" line */
497 lpath = NULL; 497 lpath = NULL;
498#if ENABLE_PLATFORM_POSIX || ENABLE_FEATURE_READLINK2
499 if (opt & OPT_l) 498 if (opt & OPT_l)
500 if (S_ISLNK(dn->dn_mode)) 499 if (S_ISLNK(dn->dn_mode))
501 lpath = xmalloc_readlink_or_warn(dn->fullname); 500 lpath = xmalloc_readlink_or_warn(dn->fullname);
502#endif
503 501
504 if (opt & OPT_i) /* show inode# */ 502 if (opt & OPT_i) /* show inode# */
505#if !ENABLE_FEATURE_EXTRA_FILE_DATA 503#if !ENABLE_FEATURE_EXTRA_FILE_DATA
diff --git a/coreutils/stat.c b/coreutils/stat.c
index 1e93dce80..96cbf6dc6 100644
--- a/coreutils/stat.c
+++ b/coreutils/stat.c
@@ -314,7 +314,6 @@ static void FAST_FUNC print_stat(char *pformat, const char m,
314 struct passwd *pw_ent; 314 struct passwd *pw_ent;
315 struct group *gw_ent; 315 struct group *gw_ent;
316 316
317#if ENABLE_PLATFORM_POSIX || ENABLE_FEATURE_READLINK2
318 if (m == 'n') { 317 if (m == 'n') {
319 printfs(pformat, filename); 318 printfs(pformat, filename);
320 } else if (m == 'N') { 319 } else if (m == 'N') {
@@ -328,10 +327,6 @@ static void FAST_FUNC print_stat(char *pformat, const char m,
328 } else { 327 } else {
329 printf(pformat, filename); 328 printf(pformat, filename);
330 } 329 }
331#else
332 if (m == 'n' || m == 'N') {
333 printfs(pformat, filename);
334#endif
335 } else if (m == 'd') { 330 } else if (m == 'd') {
336 strcat(pformat, "llu"); 331 strcat(pformat, "llu");
337 printf(pformat, (unsigned long long) statbuf->st_dev); 332 printf(pformat, (unsigned long long) statbuf->st_dev);
@@ -715,10 +710,8 @@ static bool do_stat(const char *filename, const char *format)
715 gw_ent = getgrgid(statbuf.st_gid); 710 gw_ent = getgrgid(statbuf.st_gid);
716 pw_ent = getpwuid(statbuf.st_uid); 711 pw_ent = getpwuid(statbuf.st_uid);
717 712
718#if ENABLE_PLATFORM_POSIX || ENABLE_FEATURE_READLINK2
719 if (S_ISLNK(statbuf.st_mode)) 713 if (S_ISLNK(statbuf.st_mode))
720 linkname = xmalloc_readlink_or_warn(filename); 714 linkname = xmalloc_readlink_or_warn(filename);
721#endif
722 if (linkname) { 715 if (linkname) {
723 printf(" File: '%s' -> '%s'\n", filename, linkname); 716 printf(" File: '%s' -> '%s'\n", filename, linkname);
724 free(linkname); 717 free(linkname);
diff --git a/include/mingw.h b/include/mingw.h
index 236c955d8..713205ef9 100644
--- a/include/mingw.h
+++ b/include/mingw.h
@@ -433,11 +433,7 @@ ssize_t mingw_open_read_close(const char *fn, void *buf, size_t size) FAST_FUNC;
433ssize_t mingw_read(int fd, void *buf, size_t count); 433ssize_t mingw_read(int fd, void *buf, size_t count);
434int mingw_close(int fd); 434int mingw_close(int fd);
435int pipe(int filedes[2]); 435int pipe(int filedes[2]);
436#if ENABLE_FEATURE_READLINK2
437ssize_t readlink(const char *pathname, char *buf, size_t bufsiz); 436ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
438#else
439NOIMPL(readlink,const char *path UNUSED_PARAM, char *buf UNUSED_PARAM, size_t bufsiz UNUSED_PARAM);
440#endif
441NOIMPL(setgid,gid_t gid UNUSED_PARAM); 437NOIMPL(setgid,gid_t gid UNUSED_PARAM);
442NOIMPL(setegid,gid_t gid UNUSED_PARAM); 438NOIMPL(setegid,gid_t gid UNUSED_PARAM);
443NOIMPL(setsid,void); 439NOIMPL(setsid,void);
diff --git a/libbb/xreadlink.c b/libbb/xreadlink.c
index ca53e12d3..a18dd0748 100644
--- a/libbb/xreadlink.c
+++ b/libbb/xreadlink.c
@@ -64,7 +64,7 @@ char* FAST_FUNC xmalloc_follow_symlinks(const char *path)
64 linkpath = xmalloc_readlink(buf); 64 linkpath = xmalloc_readlink(buf);
65 if (!linkpath) { 65 if (!linkpath) {
66 /* not a symlink, or doesn't exist */ 66 /* not a symlink, or doesn't exist */
67 if (errno == EINVAL || errno == ENOENT || (ENABLE_PLATFORM_MINGW32 && errno == ENOSYS)) 67 if (errno == EINVAL || errno == ENOENT)
68 return buf; 68 return buf;
69 goto free_buf_ret_null; 69 goto free_buf_ret_null;
70 } 70 }
diff --git a/win32/mingw.c b/win32/mingw.c
index 474d9cdc6..15529ed58 100644
--- a/win32/mingw.c
+++ b/win32/mingw.c
@@ -4,9 +4,7 @@
4#if ENABLE_FEATURE_EXTRA_FILE_DATA 4#if ENABLE_FEATURE_EXTRA_FILE_DATA
5#include <aclapi.h> 5#include <aclapi.h>
6#endif 6#endif
7#if ENABLE_FEATURE_READLINK2
8#include <ntdef.h> 7#include <ntdef.h>
9#endif
10 8
11#if defined(__MINGW64_VERSION_MAJOR) 9#if defined(__MINGW64_VERSION_MAJOR)
12#if ENABLE_GLOBBING 10#if ENABLE_GLOBBING
@@ -1146,7 +1144,6 @@ char *realpath(const char *path, char *resolved_path)
1146 return NULL; 1144 return NULL;
1147} 1145}
1148 1146
1149#if ENABLE_FEATURE_READLINK2
1150static wchar_t *normalize_ntpath(wchar_t *wbuf) 1147static wchar_t *normalize_ntpath(wchar_t *wbuf)
1151{ 1148{
1152 int i; 1149 int i;
@@ -1206,7 +1203,6 @@ ssize_t readlink(const char *pathname, char *buf, size_t bufsiz)
1206 errno = err_win_to_posix(); 1203 errno = err_win_to_posix();
1207 return -1; 1204 return -1;
1208} 1205}
1209#endif
1210 1206
1211const char *get_busybox_exec_path(void) 1207const char *get_busybox_exec_path(void)
1212{ 1208{