8bit strings Fixup

Samuel Thibault samuel.thibault at ens-lyon.org
Mon Oct 30 15:40:51 PST 2006


Hi,

Here is a fixup for 8bit strings cleanness: casting into _unsigned_ char
is needed for values greater than 127, because else the cast into long
expands the sign bit, resulting to strange output.

Samuel
-------------- next part --------------
Index: libyasm/intnum.c
===================================================================
--- libyasm/intnum.c	(r?vision 1645)
+++ libyasm/intnum.c	(copie de travail)
@@ -196,19 +196,19 @@
 
     switch (len) {
 	case 4:
-	    intn->val.ul |= (unsigned long)str[3];
+	    intn->val.ul |= (unsigned long)(unsigned char)str[3];
 	    intn->val.ul <<= 8;
 	    /*@fallthrough@*/
 	case 3:
-	    intn->val.ul |= (unsigned long)str[2];
+	    intn->val.ul |= (unsigned long)(unsigned char)str[2];
 	    intn->val.ul <<= 8;
 	    /*@fallthrough@*/
 	case 2:
-	    intn->val.ul |= (unsigned long)str[1];
+	    intn->val.ul |= (unsigned long)(unsigned char)str[1];
 	    intn->val.ul <<= 8;
 	    /*@fallthrough@*/
 	case 1:
-	    intn->val.ul |= (unsigned long)str[0];
+	    intn->val.ul |= (unsigned long)(unsigned char)str[0];
 	case 0:
 	    break;
 	default:
@@ -216,7 +216,7 @@
 	    while (len) {
 		BitVector_Move_Left(conv_bv, 8);
 		BitVector_Chunk_Store(conv_bv, 8, 0,
-				      (unsigned long)str[--len]);
+				      (unsigned long)(unsigned char)str[--len]);
 	    }
 	    intn->val.bv = BitVector_Clone(conv_bv);
     }


More information about the yasm-devel mailing list