]> git.cryptolib.org Git - arm-crypto-lib.git/blobdiff - test_src/string-extras.c
added base64 encoding
[arm-crypto-lib.git] / test_src / string-extras.c
index 0c01a048c8f4486002043f90503b4380769c7ba7..41e3aecb7a7d0cc6726cda06570150adb8c7a331 100644 (file)
@@ -28,6 +28,7 @@
 #include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
+#include <stdlib.h>
 
 uint32_t stridentcnt(const char* a, const char* b){
        uint16_t i=0;
@@ -76,63 +77,85 @@ void str_reverse(char* buffer){
                --j;
        }
 }
-
-char* ultoa(unsigned long a, char* buffer, uint8_t radix){
-       if(radix<2 || radix>36){
+char* ultoa (unsigned long value, char* buffer, uint8_t radix ){
+       if((radix>36) || (radix<2) || (buffer==NULL)){
                return NULL;
        }
-       char* ptr=buffer;
-       div_t result;
-       if(a==0){
-               ptr[0] = '0';
-               ptr[1] = '\0';
-               return buffer;
-       }
-       while(a){
-               result = div(a, radix);
-               *ptr = result.rem;
-               if(result.rem<10){
-                       *ptr += '0';
+       unsigned length=(unsigned)-1;
+       uint8_t x;
+       char c;
+       do{
+               x = value%radix;
+               value /= radix;
+               if(x<10){
+                       c = x+ '0';
                }else{
-                       *ptr += 'a'-10;
+                       c = x+ 'a';
                }
-               ++ptr;
-               a = result.quot;
+               buffer[++length] = c;
+       }while(value);
+       buffer[length+1]='\0';
+       unsigned idx=0;
+       while(idx+1<length){
+               c = buffer[idx];
+               buffer[idx++] = buffer[length];
+               buffer[length--] = c;
        }
-       *ptr = '\0';
-       str_reverse(buffer);
        return buffer;
 }
 
-char* ulltoa(unsigned long long a, char* buffer, uint8_t radix){
-       if(radix<2 || radix>36){
+char* ulltoa(unsigned long long value, char* buffer, uint8_t radix){
+       if((radix>36) || (radix<2) || (buffer==NULL)){
                return NULL;
        }
-       char* ptr=buffer;
-       uint8_t rem;
-       if(a==0){
-               ptr[0] = '0';
-               ptr[1] = '\0';
-               return buffer;
-       }
-       while(a){
-               rem = a % radix;
-               a = a / radix;
-               *ptr = rem;
-               if(rem<10){
-                       *ptr += '0';
+       unsigned length=(unsigned)-1;
+       uint8_t x;
+       char c;
+       do{
+               x = value%radix;
+               value /= radix;
+               if(x<10){
+                       c = x+ '0';
                }else{
-                       *ptr += 'a'-10;
+                       c = x+ 'a';
                }
-               ++ptr;
+               buffer[++length] = c;
+       }while(value);
+       buffer[length+1]='\0';
+       unsigned idx=0;
+       while(idx+1<length){
+               c = buffer[idx];
+               buffer[idx++] = buffer[length];
+               buffer[length--] = c;
        }
-       *ptr = '\0';
-       str_reverse(buffer);
        return buffer;
 }
 
-char* ustoa(unsigned short a, char* buffer, uint8_t radix){
-       return ultoa((unsigned long)a, buffer, radix);
+char* ustoa(unsigned short value, char* buffer, uint8_t radix){
+       if((radix>36) || (radix<2) || (buffer==NULL)){
+               return NULL;
+       }
+       unsigned length=(unsigned)-1;
+       uint8_t x;
+       char c;
+       do{
+               x = value%radix;
+               value /= radix;
+               if(x<10){
+                       c = x+ '0';
+               }else{
+                       c = x+ 'a';
+               }
+               buffer[++length] = c;
+       }while(value);
+       buffer[length+1]='\0';
+       unsigned idx=0;
+       while(idx+1<length){
+               c = buffer[idx];
+               buffer[idx++] = buffer[length];
+               buffer[length--] = c;
+       }
+       return buffer;
 }
 /*
 void strlwr(char* s){