Trivial conversion to strtonum().

 - todd

Index: bin/ed/ed.h
===================================================================
RCS file: /cvs/src/bin/ed/ed.h,v
retrieving revision 1.15
diff -u -r1.15 ed.h
--- bin/ed/ed.h 16 Jan 2015 06:39:32 -0000      1.15
+++ bin/ed/ed.h 18 Mar 2015 21:30:03 -0000
@@ -103,17 +103,6 @@
        if (sigflags & (1 << (SIGINT - 1))) handle_int(SIGINT); \
 }
 
-/* STRTOI: convert a string to int */
-#define STRTOI(i, p) { \
-       long l = strtol(p, &p, 10); \
-       if (l <= INT_MIN || l >= INT_MAX) { \
-               seterrmsg("number out of range"); \
-               i = 0; \
-               return ERR; \
-       } else \
-               i = (int)l; \
-}
-
 /* REALLOC: assure at least a minimum size for buffer b */
 #define REALLOC(b,n,i,err) \
 if ((i) > (n)) { \
@@ -202,7 +191,7 @@
 int read_stream(FILE *, int);
 int search_and_replace(pattern_t *, int, int);
 int set_active_node(line_t *);
-void seterrmsg(char *);
+void seterrmsg(const char *, ...);
 void signal_hup(int);
 void signal_int(int);
 char *strip_escapes(char *);
Index: bin/ed/main.c
===================================================================
RCS file: /cvs/src/bin/ed/main.c,v
retrieving revision 1.43
diff -u -r1.43 main.c
--- bin/ed/main.c       16 Jan 2015 06:39:32 -0000      1.43
+++ bin/ed/main.c       18 Mar 2015 21:32:17 -0000
@@ -45,9 +45,10 @@
 #include <sys/stat.h>
 #include <sys/wait.h>
 #include <ctype.h>
+#include <pwd.h>
 #include <setjmp.h>
+#include <stdarg.h>
 #include <unistd.h>
-#include <pwd.h>
 
 #include "ed.h"
 
@@ -92,9 +93,13 @@
 char *home;            /* home directory */
 
 void
-seterrmsg(char *s)
+seterrmsg(const char *fmt, ...)
 {
-       strlcpy(errmsg, s, sizeof(errmsg));
+       va_list ap;
+
+       va_start(ap, fmt);
+       vsnprintf(errmsg, sizeof(errmsg), fmt, ap);
+       va_end(ap);
 }
 
 /* ed: line editor */
@@ -304,6 +309,7 @@
 next_addr(void)
 {
        char *hd;
+       const char *errstr;
        int addr = current_addr;
        int n;
        int first = 1;
@@ -320,7 +326,11 @@
                        ibufp++;
                        SKIP_BLANKS();
                        if (isdigit((unsigned char)*ibufp)) {
-                               STRTOI(n, ibufp);
+                               n = strtonum(ibufp, INT_MIN, INT_MAX, &errstr);
+                               if (errstr != NULL) {
+                                       seterrmsg("number is %s", errstr);
+                                       return ERR;
+                               }
                                addr += (c == '-' || c == '^') ? -n : n;
                        } else if (!isspace(c))
                                addr += (c == '-' || c == '^') ? -1 : 1;
@@ -329,7 +339,11 @@
                case '3': case '4': case '5':
                case '6': case '7': case '8': case '9':
                        MUST_BE_FIRST();
-                       STRTOI(addr, ibufp);
+                       addr = strtonum(ibufp, INT_MIN, INT_MAX, &errstr);
+                       if (errstr != NULL) {
+                               seterrmsg("number is %s", errstr);
+                               return ERR;
+                       }
                        break;
                case '.':
                case '$':
@@ -470,6 +484,7 @@
        static int sgflag = 0;
        static int sgnum = 0;
 
+       const char *errstr;
        pattern_t *tpat;
        char *fnp;
        int gflag = 0;
@@ -718,7 +733,11 @@
                                break;
                        case '0': case '1': case '2': case '3': case '4':
                        case '5': case '6': case '7': case '8': case '9':
-                               STRTOI(sgnum, ibufp);
+                               sgnum = strtonum(ibufp, INT_MIN, INT_MAX, 
&errstr);
+                               if (errstr != NULL) {
+                                       seterrmsg("number is %s", errstr);
+                                       return ERR;
+                               }
                                sflags |= SGF;
                                sgflag &= ~GSG;         /* override GSG */
                                break;
@@ -856,8 +875,13 @@
                if (check_addr_range(first_addr, current_addr + !isglobal) < 0)
 #endif
                        return ERR;
-               else if ('0' < *ibufp && *ibufp <= '9')
-                       STRTOI(rows, ibufp);
+               else if ('0' < *ibufp && *ibufp <= '9') {
+                       rows = strtonum(ibufp, INT_MIN, INT_MAX, &errstr);
+                       if (errstr != NULL) {
+                               seterrmsg("number is %s", errstr);
+                               return ERR;
+                       }
+               }
                GET_COMMAND_SUFFIX();
                if (display_lines(second_addr, min(addr_last,
                    second_addr + rows), gflag) < 0)
Index: bin/ed/sub.c
===================================================================
RCS file: /cvs/src/bin/ed/sub.c,v
retrieving revision 1.11
diff -u -r1.11 sub.c
--- bin/ed/sub.c        27 Oct 2009 23:59:21 -0000      1.11
+++ bin/ed/sub.c        18 Mar 2015 21:32:36 -0000
@@ -40,6 +40,7 @@
 int
 extract_subst_tail(int *flagp, int *np)
 {
+       const char *errstr;
        char delimiter;
 
        *flagp = *np = 0;
@@ -55,7 +56,11 @@
        } else if (*ibufp == delimiter)
                ibufp++;
        if ('1' <= *ibufp && *ibufp <= '9') {
-               STRTOI(*np, ibufp);
+               *np = strtonum(ibufp, INT_MIN, INT_MAX, &errstr);
+               if (errstr != NULL) {
+                       seterrmsg("number is %s", errstr);
+                       return ERR;
+               }
                return 0;
        } else if (*ibufp == 'g') {
                ibufp++;

Reply via email to