aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-11-27 14:43:21 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-11-27 14:43:21 +0000
commitd686a045c8134d3a42fa5cc6b2e09118e08d603f (patch)
tree38f509fc9556f68f758c77b06b480cc33b2725eb /libbb
parent8a0a83d503a7971895254efa9e79cf15ba1850d4 (diff)
downloadbusybox-d686a045c8134d3a42fa5cc6b2e09118e08d603f.tar.gz
safe_strtoXX interface proved to be a bit unconvenient.
Remove it, introduce saner bb_strtoXX. Saved ~350 bytes.
Diffstat (limited to 'libbb')
-rw-r--r--libbb/Kbuild2
-rw-r--r--libbb/procps.c3
-rw-r--r--libbb/safe_strtol.c147
-rw-r--r--libbb/xatonum.c32
-rw-r--r--libbb/xatonum_template.c10
5 files changed, 13 insertions, 181 deletions
diff --git a/libbb/Kbuild b/libbb/Kbuild
index 550723cea..c15615302 100644
--- a/libbb/Kbuild
+++ b/libbb/Kbuild
@@ -10,6 +10,7 @@ lib-y += ask_confirmation.o
lib-y += bb_askpass.o
lib-y += bb_do_delay.o
lib-y += bb_pwd.o
+lib-y += bb_strtonum.o
lib-y += change_identity.o
lib-y += chomp.o
lib-y += compare_string_array.o
@@ -67,7 +68,6 @@ lib-y += remove_file.o
lib-y += restricted_shell.o
lib-y += run_shell.o
lib-y += safe_strncpy.o
-lib-y += safe_strtol.o
lib-y += safe_write.o
lib-y += setup_environment.o
lib-y += sha1.o
diff --git a/libbb/procps.c b/libbb/procps.c
index ee4f5e53f..017710ff4 100644
--- a/libbb/procps.c
+++ b/libbb/procps.c
@@ -119,7 +119,8 @@ procps_status_t* procps_scan(procps_status_t* sp, int flags)
free_procps_scan(sp);
return NULL;
}
- if (safe_strtou(entry->d_name, &pid))
+ pid = bb_strtou(entry->d_name, NULL, 10);
+ if (errno)
continue;
/* After this point we have to break, not continue
diff --git a/libbb/safe_strtol.c b/libbb/safe_strtol.c
deleted file mode 100644
index d3bb29cdd..000000000
--- a/libbb/safe_strtol.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * Utility routines.
- *
- * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
- *
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
- */
-
-#include <assert.h>
-#include "libbb.h"
-
-int safe_strtod(const char *arg, double* value)
-{
- char *endptr;
- int errno_save = errno;
-
- assert(arg!=NULL);
- errno = 0;
- *value = strtod(arg, &endptr);
- if (errno != 0 || *endptr != '\0' || endptr == arg) {
- return 1;
- }
- errno = errno_save;
- return 0;
-}
-
-int safe_strtoull(const char *arg, unsigned long long* value)
-{
- char *endptr;
- int errno_save = errno;
-
- assert(arg!=NULL);
- if (!isdigit(arg[0])) /* strtouXX takes minus signs w/o error! :( */
- return 1;
- errno = 0;
- *value = strtoull(arg, &endptr, 0);
- if (errno != 0 || *endptr != '\0' || endptr == arg) {
- return 1;
- }
- errno = errno_save;
- return 0;
-}
-
-int safe_strtoll(const char *arg, long long* value)
-{
- char *endptr;
- int errno_save = errno;
-
- assert(arg!=NULL);
- errno = 0;
- *value = strtoll(arg, &endptr, 0);
- if (errno != 0 || *endptr != '\0' || endptr == arg) {
- return 1;
- }
- errno = errno_save;
- return 0;
-}
-
-int safe_strtoul(const char *arg, unsigned long* value)
-{
- char *endptr;
- int errno_save = errno;
-
- assert(arg!=NULL);
- if (!isdigit(arg[0])) /* strtouXX takes minus signs w/o error! :( */
- return 1;
- errno = 0;
- *value = strtoul(arg, &endptr, 0);
- if (errno != 0 || *endptr != '\0' || endptr == arg) {
- return 1;
- }
- errno = errno_save;
- return 0;
-}
-
-int safe_strtol(const char *arg, long* value)
-{
- char *endptr;
- int errno_save = errno;
-
- assert(arg!=NULL);
- errno = 0;
- *value = strtol(arg, &endptr, 0);
- if (errno != 0 || *endptr != '\0' || endptr == arg) {
- return 1;
- }
- errno = errno_save;
- return 0;
-}
-
-/* TODO: This is what uclibc is doing. Try to do the same? */
-
-#if 0
-#if defined __HAVE_ELF__
-
-# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-# define _strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
-
-#else /* !defined __HAVE_ELF__ */
-
-# define strong_alias(name, aliasname) _strong_alias (name, aliasname)
-# define _strong_alias(name, aliasname) \
- __asm__(".global " __C_SYMBOL_PREFIX__ #aliasname "\n" \
- ".set " __C_SYMBOL_PREFIX__ #aliasname "," __C_SYMBOL_PREFIX__ #name);
-
-#endif
-#endif
-
-int safe_strtoi(const char *arg, int* value)
-{
- int error;
- long lvalue;
- if (sizeof(long) == sizeof(int))
- return safe_strtol(arg, (long*)value);
- lvalue = *value;
- error = safe_strtol(arg, &lvalue);
- if (lvalue < INT_MIN || lvalue > INT_MAX)
- return 1;
- *value = (int) lvalue;
- return error;
-}
-
-int safe_strtou(const char *arg, unsigned* value)
-{
- int error;
- unsigned long lvalue;
- if (sizeof(unsigned long) == sizeof(unsigned))
- return safe_strtoul(arg, (unsigned long*)value);
- lvalue = *value;
- error = safe_strtoul(arg, &lvalue);
- if (lvalue > UINT_MAX)
- return 1;
- *value = (unsigned) lvalue;
- return error;
-}
-
-int BUG_safe_strtou32_unimplemented(void);
-int safe_strtou32(const char *arg, uint32_t* value)
-{
- if (sizeof(uint32_t) == sizeof(unsigned))
- return safe_strtou(arg, (unsigned*)value);
- if (sizeof(uint32_t) == sizeof(unsigned long))
- return safe_strtoul(arg, (unsigned long*)value);
- return BUG_safe_strtou32_unimplemented();
-}
diff --git a/libbb/xatonum.c b/libbb/xatonum.c
index 0d487dd9b..35607c317 100644
--- a/libbb/xatonum.c
+++ b/libbb/xatonum.c
@@ -19,15 +19,6 @@
#define XSTR_TYPE_MIN LLONG_MIN
#define XSTR_STRTOU strtoull
#include "xatonum_template.c"
-#undef type
-#undef xstrtou
-#undef xstrto
-#undef xatou
-#undef xato
-#undef XSTR_UTYPE_MAX
-#undef XSTR_TYPE_MAX
-#undef XSTR_TYPE_MIN
-#undef XSTR_STRTOU
#if ULONG_MAX != ULLONG_MAX
#define type long
@@ -40,15 +31,6 @@
#define XSTR_TYPE_MIN LONG_MIN
#define XSTR_STRTOU strtoul
#include "xatonum_template.c"
-#undef type
-#undef xstrtou
-#undef xstrto
-#undef xatou
-#undef xato
-#undef XSTR_UTYPE_MAX
-#undef XSTR_TYPE_MAX
-#undef XSTR_TYPE_MIN
-#undef XSTR_STRTOU
#endif
#if UINT_MAX != ULONG_MAX
@@ -72,15 +54,6 @@ extern inline unsigned bb_strtoui(const char *str, char **end, int b)
/* libc has no strtoui, so we need to create/use our own */
#define XSTR_STRTOU bb_strtoui
#include "xatonum_template.c"
-#undef type
-#undef xstrtou
-#undef xstrto
-#undef xatou
-#undef xato
-#undef XSTR_UTYPE_MAX
-#undef XSTR_TYPE_MAX
-#undef XSTR_TYPE_MIN
-#undef XSTR_STRTOU
#endif
/* A few special cases */
@@ -90,11 +63,6 @@ int xatoi_u(const char *numstr)
return xatou_range(numstr, 0, INT_MAX);
}
-uint32_t xatou32(const char *numstr)
-{
- return xatoul_range(numstr, 0, 0xffffffff);
-}
-
uint16_t xatou16(const char *numstr)
{
return xatou_range(numstr, 0, 0xffff);
diff --git a/libbb/xatonum_template.c b/libbb/xatonum_template.c
index 245586a5a..53ba544eb 100644
--- a/libbb/xatonum_template.c
+++ b/libbb/xatonum_template.c
@@ -173,3 +173,13 @@ type xato()(const char *numstr)
{
return xstrto(_range_sfx)(numstr, 10, XSTR_TYPE_MIN, XSTR_TYPE_MAX, NULL);
}
+
+#undef type
+#undef xstrtou
+#undef xstrto
+#undef xatou
+#undef xato
+#undef XSTR_UTYPE_MAX
+#undef XSTR_TYPE_MAX
+#undef XSTR_TYPE_MIN
+#undef XSTR_STRTOU