busybox --install -s: prevent puzzling "/bin/busybox: Invalid argument" message
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 5 Sep 2007 11:30:34 +0000 (11:30 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 5 Sep 2007 11:30:34 +0000 (11:30 -0000)
libbb: comment out realpath, add readlink which doesn't warn

applets/applets.c
include/libbb.h
libbb/xreadlink.c

index c2040b9a3d29e3220b9e08c40e1e4c218a117b5c..ec268ca2d569ed9a0a280d19ee7a8c10fee1518f 100644 (file)
@@ -546,7 +546,7 @@ static int busybox_main(char **argv)
  help:
                output_width = 80;
                if (ENABLE_FEATURE_AUTOWIDTH) {
-                       /* Obtain the terminal width */
+                       /* Obtain the terminal width */
                        get_terminal_width_height(0, &output_width, NULL);
                }
                /* leading tab and room to wrap */
@@ -580,12 +580,11 @@ static int busybox_main(char **argv)
 
        if (ENABLE_FEATURE_INSTALLER && strcmp(argv[1], "--install") == 0) {
                const char *busybox;
-               busybox = xmalloc_readlink_or_warn(bb_busybox_exec_path);
+               busybox = xmalloc_readlink(bb_busybox_exec_path);
                if (!busybox)
                        busybox = bb_busybox_exec_path;
                /* -s makes symlinks */
-               install_links(busybox,
-                                argv[2] && strcmp(argv[2], "-s") == 0);
+               install_links(busybox, argv[2] && strcmp(argv[2], "-s") == 0);
                return 0;
        }
 
index cf00b52505c01b019cf2d8041c965030b3d2e446..f1658945cc15e75ead4419b0af58377b9a045e8c 100644 (file)
@@ -249,9 +249,10 @@ void xmove_fd(int, int);
 DIR *xopendir(const char *path);
 DIR *warn_opendir(const char *path);
 
-char *xrealloc_getcwd_or_warn(char *cwd);
+/* UNUSED: char *xmalloc_realpath(const char *path); */
+char *xmalloc_readlink(const char *path);
 char *xmalloc_readlink_or_warn(const char *path);
-char *xmalloc_realpath(const char *path);
+char *xrealloc_getcwd_or_warn(char *cwd);
 
 
 //TODO: signal(sid, f) is the same? then why?
@@ -317,8 +318,8 @@ enum {
 };
 /* Create stream socket, and allocate suitable lsa.
  * (lsa of correct size and lsa->sa.sa_family (AF_INET/AF_INET6))
- * af == AF_UNSPEC will result in trying to create IPv6, and
- * if kernel doesn't support it, IPv4.
+ * af == AF_UNSPEC will result in trying to create IPv6 socket,
+ * and if kernel doesn't support it, IPv4.
  */
 int xsocket_type(len_and_sockaddr **lsap, USE_FEATURE_IPV6(int af,) int sock_type);
 int xsocket_stream(len_and_sockaddr **lsap);
index 18a8b9467bdde152f7a9f55da324aeb42dfaace0..4d87b944d6d8489351c6462aa7236847d0408451 100644 (file)
@@ -10,8 +10,7 @@
  * NOTE: This function returns a malloced char* that you will have to free
  * yourself. You have been warned.
  */
-
-char *xmalloc_readlink_or_warn(const char *path)
+char *xmalloc_readlink(const char *path)
 {
        enum { GROWBY = 80 }; /* how large we will grow strings by */
 
@@ -20,20 +19,30 @@ char *xmalloc_readlink_or_warn(const char *path)
 
        do {
                buf = xrealloc(buf, bufsize += GROWBY);
-               readsize = readlink(path, buf, bufsize); /* 1st try */
+               readsize = readlink(path, buf, bufsize);
                if (readsize == -1) {
-                       bb_perror_msg("%s", path);
                        free(buf);
                        return NULL;
                }
-       }
-       while (bufsize < readsize + 1);
+       } while (bufsize < readsize + 1);
 
        buf[readsize] = '\0';
 
        return buf;
 }
 
+char *xmalloc_readlink_or_warn(const char *path)
+{
+       char *buf = xmalloc_readlink(path);
+       if (!buf) {
+               /* EINVAL => "file: Invalid argument" => puzzled user */
+               bb_error_msg("%s: cannot read link (not a symlink?)", path);
+       }
+       return buf;
+}
+
+/* UNUSED */
+#if 0
 char *xmalloc_realpath(const char *path)
 {
 #if defined(__GLIBC__) && !defined(__UCLIBC__)
@@ -46,3 +55,4 @@ char *xmalloc_realpath(const char *path)
        return xstrdup(realpath(path, buf));
 #endif
 }
+#endif