Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[libc] Allow strtoul() to interpret negative numbers
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Apr 17, 2012
1 parent d11b82f commit 1d33649
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/arch/i386/core/runtime.c
Expand Up @@ -27,6 +27,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <assert.h>
#include <ipxe/init.h>
Expand Down
12 changes: 12 additions & 0 deletions src/core/misc.c
Expand Up @@ -35,8 +35,17 @@ int inet_aton ( const char *cp, struct in_addr *inp ) {

unsigned long strtoul ( const char *p, char **endp, int base ) {
unsigned long ret = 0;
int negative = 0;
unsigned int charval;

while ( isspace ( *p ) )
p++;

if ( *p == '-' ) {
negative = 1;
p++;
}

base = strtoul_base ( &p, base );

while ( 1 ) {
Expand All @@ -47,6 +56,9 @@ unsigned long strtoul ( const char *p, char **endp, int base ) {
p++;
}

if ( negative )
ret = -ret;

if ( endp )
*endp = ( char * ) p;

Expand Down
12 changes: 12 additions & 0 deletions src/core/strtoull.c
Expand Up @@ -29,8 +29,17 @@ FILE_LICENCE ( GPL2_OR_LATER );
*/
unsigned long long strtoull ( const char *p, char **endp, int base ) {
unsigned long long ret = 0;
int negative = 0;
unsigned int charval;

while ( isspace ( *p ) )
p++;

if ( *p == '-' ) {
negative = 1;
p++;
}

base = strtoul_base ( &p, base );

while ( 1 ) {
Expand All @@ -41,6 +50,9 @@ unsigned long long strtoull ( const char *p, char **endp, int base ) {
p++;
}

if ( negative )
ret = -ret;

if ( endp )
*endp = ( char * ) p;

Expand Down
4 changes: 0 additions & 4 deletions src/include/stdlib.h
Expand Up @@ -5,7 +5,6 @@ FILE_LICENCE ( GPL2_OR_LATER );

#include <stdint.h>
#include <assert.h>
#include <ctype.h>

/*****************************************************************************
*
Expand All @@ -18,9 +17,6 @@ static inline int strtoul_base ( const char **pp, int base )
{
const char *p = *pp;

while ( isspace ( *p ) )
p++;

if ( base == 0 ) {
base = 10;
if ( *p == '0' ) {
Expand Down

0 comments on commit 1d33649

Please sign in to comment.