]> git.cryptolib.org Git - arm-crypto-lib.git/blobdiff - test_src/string-extras.c
'hardening' infrastucture against toolchain bugs
[arm-crypto-lib.git] / test_src / string-extras.c
index 0c01a048c8f4486002043f90503b4380769c7ba7..18cf67f6f5ced5fc8cbdc8d080ca1ff462bff334 100644 (file)
@@ -1,7 +1,7 @@
 /* string_extras.c */
 /*
     This file is part of the ARM-Crypto-Lib.
-    Copyright (C) 2006-2010  Daniel Otte (daniel.otte@rub.de)
+    Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -29,6 +29,8 @@
 #include <ctype.h>
 #include <string.h>
 
+#include "cli.h"
+
 uint32_t stridentcnt(const char* a, const char* b){
        uint16_t i=0;
        for(;;){
@@ -42,8 +44,13 @@ uint32_t stridentcnt(const char* a, const char* b){
 
 uint16_t firstword_length(const char* s){
        uint16_t ret=0;
-       while(isgraph((uint8_t)(*s++)))
+       if(!s){
+               return 0;
+       }
+       int c;
+       while(c=*s++, isgraph(c)){
                ret++;
+       }
        return ret; 
 }
 
@@ -89,7 +96,11 @@ char* ultoa(unsigned long a, char* buffer, uint8_t radix){
                return buffer;
        }
        while(a){
+               /* toolchain bug??
                result = div(a, radix);
+               */
+               result.quot = a/radix;
+               result.rem = a%radix;
                *ptr = result.rem;
                if(result.rem<10){
                        *ptr += '0';
@@ -104,12 +115,14 @@ char* ultoa(unsigned long a, char* buffer, uint8_t radix){
        return buffer;
 }
 
+
 char* ulltoa(unsigned long long a, char* buffer, uint8_t radix){
        if(radix<2 || radix>36){
                return NULL;
        }
        char* ptr=buffer;
        uint8_t rem;
+       unsigned long long quot;
        if(a==0){
                ptr[0] = '0';
                ptr[1] = '\0';
@@ -117,14 +130,14 @@ char* ulltoa(unsigned long long a, char* buffer, uint8_t radix){
        }
        while(a){
                rem = a % radix;
-               a = a / radix;
-               *ptr = rem;
+               quot = a / radix;
                if(rem<10){
-                       *ptr += '0';
+                       rem += '0';
                }else{
-                       *ptr += 'a'-10;
+                       rem += 'a'-10;
                }
-               ++ptr;
+               *ptr++ =rem;
+               a = quot;
        }
        *ptr = '\0';
        str_reverse(buffer);