Fix more error codes.
[openssl.git] / crypto / asn1 / a_utf8.c
index 6179bd09a33ac20d2e6ce20f9caa0ca0f588e00e..508e11e527c8c4b2b4bc84e872f453c58c179073 100644 (file)
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
-int i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a, unsigned char **pp)
-       {
-       return(i2d_ASN1_bytes((ASN1_STRING *)a,pp,
-               V_ASN1_UTF8STRING,V_ASN1_UNIVERSAL));
-       }
-
-ASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a, unsigned char **pp,
-            long length)
-       {
-       ASN1_UTF8STRING *ret=NULL;
-
-       ret=(ASN1_UTF8STRING *)d2i_ASN1_bytes((ASN1_STRING **)a,
-               pp,length,V_ASN1_UTF8STRING,V_ASN1_UNIVERSAL);
-       if (ret == NULL)
-               {
-               ASN1err(ASN1_F_D2I_ASN1_UTF8STRING,ERR_R_NESTED_ASN1_ERROR);
-               return(NULL);
-               }
-       return(ret);
-       }
-
 
 /* UTF8 utilities */
 
@@ -94,9 +73,9 @@ ASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a, unsigned char **pp,
  * -4 = character encoded incorrectly (not minimal length).
  */
 
-int UTF8_getc(unsigned char *str, int len, unsigned long *val)
+int UTF8_getc(const unsigned char *str, int len, unsigned long *val)
 {
-       unsigned char *p;
+       const unsigned char *p;
        unsigned long value;
        int ret;
        if(len <= 0) return 0;
@@ -127,7 +106,7 @@ int UTF8_getc(unsigned char *str, int len, unsigned long *val)
                if( ((p[1] & 0xc0) != 0x80)
                   || ((p[2] & 0xc0) != 0x80) 
                   || ((p[3] & 0xc0) != 0x80) ) return -3;
-               value = (*p++ & 0x7) << 18;
+               value = ((unsigned long)(*p++ & 0x7)) << 18;
                value |= (*p++ & 0x3f) << 12;
                value |= (*p++ & 0x3f) << 6;
                value |= *p++ & 0x3f;
@@ -139,9 +118,9 @@ int UTF8_getc(unsigned char *str, int len, unsigned long *val)
                   || ((p[2] & 0xc0) != 0x80) 
                   || ((p[3] & 0xc0) != 0x80) 
                   || ((p[4] & 0xc0) != 0x80) ) return -3;
-               value = (*p++ & 0x3) << 24;
-               value |= (*p++ & 0x3f) << 18;
-               value |= (*p++ & 0x3f) << 12;
+               value = ((unsigned long)(*p++ & 0x3)) << 24;
+               value |= ((unsigned long)(*p++ & 0x3f)) << 18;
+               value |= ((unsigned long)(*p++ & 0x3f)) << 12;
                value |= (*p++ & 0x3f) << 6;
                value |= *p++ & 0x3f;
                if(value < 0x200000) return -4;
@@ -153,10 +132,10 @@ int UTF8_getc(unsigned char *str, int len, unsigned long *val)
                   || ((p[3] & 0xc0) != 0x80) 
                   || ((p[4] & 0xc0) != 0x80) 
                   || ((p[5] & 0xc0) != 0x80) ) return -3;
-               value = (*p++ & 0x1) << 30;
-               value |= (*p++ & 0x3f) << 24;
-               value |= (*p++ & 0x3f) << 18;
-               value |= (*p++ & 0x3f) << 12;
+               value = ((unsigned long)(*p++ & 0x1)) << 30;
+               value |= ((unsigned long)(*p++ & 0x3f)) << 24;
+               value |= ((unsigned long)(*p++ & 0x3f)) << 18;
+               value |= ((unsigned long)(*p++ & 0x3f)) << 12;
                value |= (*p++ & 0x3f) << 6;
                value |= *p++ & 0x3f;
                if(value < 0x4000000) return -4;
@@ -178,55 +157,55 @@ int UTF8_putc(unsigned char *str, int len, unsigned long value)
        if(!str) len = 6;       /* Maximum we will need */
        else if(len <= 0) return -1;
        if(value < 0x80) {
-               if(str) *str = value;
+               if(str) *str = (unsigned char)value;
                return 1;
        }
        if(value < 0x800) {
                if(len < 2) return -1;
                if(str) {
-                       *str++ = ((value >> 6) & 0x1f) | 0xc0;
-                       *str = (value & 0x3f) | 0x80;
+                       *str++ = (unsigned char)(((value >> 6) & 0x1f) | 0xc0);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
                }
                return 2;
        }
        if(value < 0x10000) {
                if(len < 3) return -1;
                if(str) {
-                       *str++ = ((value >> 12) & 0xf) | 0xe0;
-                       *str++ = ((value >> 6) & 0x3f) | 0x80;
-                       *str = (value & 0x3f) | 0x80;
+                       *str++ = (unsigned char)(((value >> 12) & 0xf) | 0xe0);
+                       *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
                }
                return 3;
        }
        if(value < 0x200000) {
                if(len < 4) return -1;
                if(str) {
-                       *str++ = ((value >> 18) & 0x7) | 0xf0;
-                       *str++ = ((value >> 12) & 0x3f) | 0x80;
-                       *str++ = ((value >> 6) & 0x3f) | 0x80;
-                       *str = (value & 0x3f) | 0x80;
+                       *str++ = (unsigned char)(((value >> 18) & 0x7) | 0xf0);
+                       *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80);
+                       *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
                }
                return 4;
        }
        if(value < 0x4000000) {
                if(len < 5) return -1;
                if(str) {
-                       *str++ = ((value >> 24) & 0x3) | 0xf8;
-                       *str++ = ((value >> 18) & 0x3f) | 0x80;
-                       *str++ = ((value >> 12) & 0x3f) | 0x80;
-                       *str++ = ((value >> 6) & 0x3f) | 0x80;
-                       *str = (value & 0x3f) | 0x80;
+                       *str++ = (unsigned char)(((value >> 24) & 0x3) | 0xf8);
+                       *str++ = (unsigned char)(((value >> 18) & 0x3f) | 0x80);
+                       *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80);
+                       *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
                }
                return 5;
        }
        if(len < 6) return -1;
        if(str) {
-               *str++ = ((value >> 30) & 0x1) | 0xfc;
-               *str++ = ((value >> 24) & 0x3f) | 0x80;
-               *str++ = ((value >> 18) & 0x3f) | 0x80;
-               *str++ = ((value >> 12) & 0x3f) | 0x80;
-               *str++ = ((value >> 6) & 0x3f) | 0x80;
-               *str = (value & 0x3f) | 0x80;
+               *str++ = (unsigned char)(((value >> 30) & 0x1) | 0xfc);
+               *str++ = (unsigned char)(((value >> 24) & 0x3f) | 0x80);
+               *str++ = (unsigned char)(((value >> 18) & 0x3f) | 0x80);
+               *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80);
+               *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+               *str = (unsigned char)((value & 0x3f) | 0x80);
        }
        return 6;
 }