summaryrefslogtreecommitdiff
path: root/percent_m.c
diff options
context:
space:
mode:
Diffstat (limited to 'percent_m.c')
-rw-r--r--percent_m.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/percent_m.c b/percent_m.c
new file mode 100644
index 0000000..bb11b22
--- /dev/null
+++ b/percent_m.c
@@ -0,0 +1,43 @@
+ /*
+ * Replace %m by system error message.
+ *
+ * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#) percent_m.c 1.1 94/12/28 17:42:37";
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+extern int errno;
+#ifndef SYS_ERRLIST_DEFINED
+extern char *sys_errlist[];
+extern int sys_nerr;
+#endif
+
+#include "mystdarg.h"
+
+char *percent_m(obuf, ibuf)
+char *obuf;
+char *ibuf;
+{
+ char *bp = obuf;
+ char *cp = ibuf;
+
+ while (*bp = *cp)
+ if (*cp == '%' && cp[1] == 'm') {
+ if (errno < sys_nerr && errno > 0) {
+ strcpy(bp, sys_errlist[errno]);
+ } else {
+ sprintf(bp, "Unknown error %d", errno);
+ }
+ bp += strlen(bp);
+ cp += 2;
+ } else {
+ bp++, cp++;
+ }
+ return (obuf);
+}