safe-strto.c: Add safe_strtol and generalize the library name
authorW. Trevor King <wking@tremily.us>
Wed, 23 Jan 2013 19:59:03 +0000 (14:59 -0500)
committerW. Trevor King <wking@tremily.us>
Mon, 11 Feb 2013 16:39:03 +0000 (11:39 -0500)
Also fix masking defines to match the library name's pattern.

safe-strto.c [moved from safe-strtod.c with 68% similarity]
safe-strto.h [moved from safe-strtod.h with 80% similarity]

similarity index 68%
rename from safe-strtod.c
rename to safe-strto.c
index 8396a0e94388070780baa21bb8b2b1ab3df405b0..6a63dbefa72731848c7795ea5d8a059ac4506d67 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Safe string-to-double conversion
+Safe string-to-* conversion
 
 Copyright (C) 2013  W. Trevor King
 
@@ -20,7 +20,27 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <stdlib.h>       /* for strtod(), exit(), EXIT_* */
 #include <stdio.h>        /* for stderr, *printf(), perror() */
 #include <errno.h>        /* for errno */
-#include "safe-strtod.h"  /* check safe_strtod() declaration */
+#include "safe-strto.h"  /* check safe_strto*() declarations */
+
+long int safe_strtol(const char *str, int base, const char *name)
+{
+       char *endptr;
+       long int x = strtol(str, &endptr, base);
+
+       if (errno) {
+               fprintf(stderr, "error converting %s to a long integer for %s:\n",
+                       str, name);
+               perror("strtol");
+               exit(EXIT_FAILURE);
+       }
+       if (endptr[0] != '\0') {
+               fprintf(stderr, "error converting %s to a long integer for %s:\n",
+                       str, name);
+               fprintf(stderr, "leftover characters: %s\n", endptr);
+               exit(EXIT_FAILURE);
+       }
+       return x;
+}
 
 double safe_strtod(const char *str, const char *name)
 {
similarity index 80%
rename from safe-strtod.h
rename to safe-strto.h
index e50a9c305ac39e8f8352eaffceeb3d9314bdb82e..e1638433837c98d6e601d6a86df47593d66c93c5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Safe string-to-double conversion
+Safe string-to-* conversion
 
 Copyright (C) 2013  W. Trevor King
 
@@ -17,9 +17,10 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifndef _STRTOD_SAFE_H_
-#define _STRTOD_SAFE_H_
+#ifndef _SAFE_STRTO_H_
+#define _SAFE_STRTO_H_
 
+long int safe_strtol(const char *str, int base, const char *name);
 double safe_strtod(const char *str, const char *name);
 
-#endif  /* _STRTOD_SAFE_H_ */
+#endif  /* _SAFE_STRTO_H_ */