Busybox perror knows about errstr
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 13 Sep 2013 02:07:16 +0000 (19:07 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 01:55:53 +0000 (17:55 -0800)
Busybox rolls their own perror.  I made an ugly patch that hacks in errstr.
Feel free to more elegantly add ", errstr" to their 'msg'.

If you're interested in using it, you'll get better error messages from the 9ns
code.  For example:

/ $ cat sdfsd
cat: can't open 'sdfsd': No such file or directory
/ $ cat /9/sdfsf
cat: can't open '/9/sdfsf': No such file or directory, file does not exist
/ $ cat '#p/1/args'
cat: read error: Unspecified, ken has left the building

You'll need to manually patch busybox for this.

tools/patches/busybox-perror-with-errstr.patch [new file with mode: 0644]

diff --git a/tools/patches/busybox-perror-with-errstr.patch b/tools/patches/busybox-perror-with-errstr.patch
new file mode 100644 (file)
index 0000000..fc0c401
--- /dev/null
@@ -0,0 +1,45 @@
+From 7ee6f1d1101452ab098121e0da7d560037a45fe9 Mon Sep 17 00:00:00 2001
+From: Barret Rhoden <brho@cs.berkeley.edu>
+Date: Thu, 12 Sep 2013 18:57:34 -0700
+Subject: [PATCH] Perror with errstr
+
+---
+ libbb/verror_msg.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/libbb/verror_msg.c b/libbb/verror_msg.c
+index bcf1ee8..e038fd6 100644
+--- a/libbb/verror_msg.c
++++ b/libbb/verror_msg.c
+@@ -12,7 +12,7 @@
+ #endif
+ smallint logmode = LOGMODE_STDIO;
+-const char *msg_eol = "\n";
++const char *msg_eol = "";     /* was \n */
+ void FAST_FUNC bb_verror_msg(const char *s, va_list p, const char* strerr)
+ {
+@@ -65,8 +65,17 @@ void FAST_FUNC bb_verror_msg(const char *s, va_list p, const char* strerr)
+       }
+       if (logmode & LOGMODE_STDIO) {
+-              fflush_all();
+-              full_write(STDERR_FILENO, msg, used);
++              const char *comma;
++              char *ros_errstr = errstr();
++              /* ros_errstr should never be 0, but just in case. */
++              if (ros_errstr == NULL || *ros_errstr == '\0')
++                      ros_errstr = comma = "";
++              else
++                      comma = ", ";
++              printf("%s%s%s\n", msg, comma, ros_errstr);
++              /* also changed msg_eol */
++//            fflush_all();
++//            full_write(STDERR_FILENO, msg, used);
+       }
+ #if ENABLE_FEATURE_SYSLOG
+       if (logmode & LOGMODE_SYSLOG) {
+-- 
+1.8.4
+