[macruby-changes] [3702] MacRuby/branches/icu/pack.c

source_changes at macosforge.org source_changes at macosforge.org
Thu Mar 4 19:40:59 PST 2010


Revision: 3702
          http://trac.macosforge.org/projects/ruby/changeset/3702
Author:   lsansonetti at apple.com
Date:     2010-03-04 19:40:56 -0800 (Thu, 04 Mar 2010)
Log Message:
-----------
fix some problems in #pack

Modified Paths:
--------------
    MacRuby/branches/icu/pack.c

Modified: MacRuby/branches/icu/pack.c
===================================================================
--- MacRuby/branches/icu/pack.c	2010-03-05 02:21:32 UTC (rev 3701)
+++ MacRuby/branches/icu/pack.c	2010-03-05 03:40:56 UTC (rev 3702)
@@ -63,16 +63,16 @@
     unsigned char *s, *t;		\
     int i;				\
 					\
-    zp = xmalloc(sizeof(xtype));	\
+    zp = malloc(sizeof(xtype));	\
     *zp = z;				\
     s = (unsigned char*)zp;		\
-    t = xmalloc(sizeof(xtype));		\
+    t = malloc(sizeof(xtype));		\
     for (i=0; i<sizeof(xtype); i++) {	\
 	t[sizeof(xtype)-i-1] = s[i];	\
     }					\
     r = *(xtype *)t;			\
-    xfree(t);				\
-    xfree(zp);				\
+    free(t);				\
+    free(zp);				\
     return r;				\
 }
 
@@ -366,8 +366,8 @@
 #endif
 static const char toofew[] = "too few arguments";
 
-static void encodes(CFMutableDataRef,const char*,long,int,int);
-static void qpencode(CFMutableDataRef,VALUE,long);
+static void encodes(VALUE,const char*,long,int,int);
+static void qpencode(VALUE,VALUE,long);
 
 static unsigned long utf8_to_uv(const char*,long*);
 
@@ -454,8 +454,7 @@
     p = RSTRING_PTR(fmt);
     pend = p + RSTRING_LEN(fmt);
 
-    CFMutableDataRef data = CFDataCreateMutable(NULL, 0);
-    CFMakeCollectable(data);
+    VALUE data = bstr_new();
 
     items = RARRAY_LEN(ary);
     idx = 0;
@@ -531,19 +530,19 @@
 	      case 'A':         /* arbitrary binary string (ASCII space padded) */
 	      case 'Z':         /* null terminated string  */
 		if (plen >= len) {
-		    CFDataAppendBytes(data, (const UInt8 *)ptr, len);
+		    bstr_concat(data, (const UInt8 *)ptr, len);
 		    if (p[-1] == '*' && type == 'Z') {
-			CFDataAppendBytes(data, (const UInt8 *)nul10, 1);
+			bstr_concat(data, (const UInt8 *)nul10, 1);
 		    }
 		}
 		else {
-		    CFDataAppendBytes(data, (const UInt8 *)ptr, plen);
+		    bstr_concat(data, (const UInt8 *)ptr, plen);
 		    len -= plen;
 		    while (len >= 10) {
-			CFDataAppendBytes(data, (const UInt8 *)((type == 'A')?spc10:nul10), 10);
+			bstr_concat(data, (const UInt8 *)((type == 'A')?spc10:nul10), 10);
 			len -= 10;
 		    }
-		    CFDataAppendBytes(data, (const UInt8 *)((type == 'A')?spc10:nul10), len);
+		    bstr_concat(data, (const UInt8 *)((type == 'A')?spc10:nul10), len);
 		}
 		break;
 
@@ -563,7 +562,7 @@
 			    byte >>= 1;
 			else {
 			    char c = byte & 0xff;
-			    CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			    bstr_concat(data, (const UInt8 *)&c, 1);
 			    byte = 0;
 			}
 		    }
@@ -571,7 +570,7 @@
 			char c;
 			byte >>= 7 - (len & 7);
 			c = byte & 0xff;
-			CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			bstr_concat(data, (const UInt8 *)&c, 1);
 		    }
 		    len = j;
 		    goto grow;
@@ -593,7 +592,7 @@
 			    byte <<= 1;
 			else {
 			    char c = byte & 0xff;
-			    CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			    bstr_concat(data, (const UInt8 *)&c, 1);
 			    byte = 0;
 			}
 		    }
@@ -601,7 +600,7 @@
 			char c;
 			byte <<= 7 - (len & 7);
 			c = byte & 0xff;
-			CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			bstr_concat(data, (const UInt8 *)&c, 1);
 		    }
 		    len = j;
 		    goto grow;
@@ -626,13 +625,13 @@
 			    byte >>= 4;
 			else {
 			    char c = byte & 0xff;
-			    CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			    bstr_concat(data, (const UInt8 *)&c, 1);
 			    byte = 0;
 			}
 		    }
 		    if (len & 1) {
 			char c = byte & 0xff;
-			CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			bstr_concat(data, (const UInt8 *)&c, 1);
 		    }
 		    len = j;
 		    goto grow;
@@ -657,13 +656,13 @@
 			    byte <<= 4;
 			else {
 			    char c = byte & 0xff;
-			    CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			    bstr_concat(data, (const UInt8 *)&c, 1);
 			    byte = 0;
 			}
 		    }
 		    if (len & 1) {
 			char c = byte & 0xff;
-			CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+			bstr_concat(data, (const UInt8 *)&c, 1);
 		    }
 		    len = j;
 		    goto grow;
@@ -679,7 +678,7 @@
 
 		from = NEXTFROM;
 		c = num2i32(from);
-		CFDataAppendBytes(data, (const UInt8 *)&c, 1);
+		bstr_concat(data, (const UInt8 *)&c, 1);
 	    }
 	    break;
 
@@ -690,7 +689,7 @@
 
 		from = NEXTFROM;
 		s = num2i32(from);
-		CFDataAppendBytes(data, (const UInt8 *)OFF16(&s), NATINT_LEN(short,2));
+		bstr_concat(data, (const UInt8 *)OFF16(&s), NATINT_LEN(short,2));
 	    }
 	    break;
 
@@ -701,7 +700,7 @@
 
 		from = NEXTFROM;
 		i = num2i32(from);
-		CFDataAppendBytes(data, (const UInt8 *)OFF32(&i), NATINT_LEN(int,4));
+		bstr_concat(data, (const UInt8 *)OFF32(&i), NATINT_LEN(int,4));
 	    }
 	    break;
 
@@ -712,7 +711,7 @@
 
 		from = NEXTFROM;
 		l = num2i32(from);
-		CFDataAppendBytes(data, (const UInt8 *)OFF32(&l), NATINT_LEN(long,4));
+		bstr_concat(data, (const UInt8 *)OFF32(&l), NATINT_LEN(long,4));
 	    }
 	    break;
 
@@ -723,7 +722,7 @@
 
 		from = NEXTFROM;
 		rb_quad_pack(tmp, from);
-		CFDataAppendBytes(data, (const UInt8 *)&tmp, QUAD_SIZE);
+		bstr_concat(data, (const UInt8 *)&tmp, QUAD_SIZE);
 	    }
 	    break;
 
@@ -734,7 +733,7 @@
 		from = NEXTFROM;
 		s = num2i32(from);
 		s = NATINT_HTONS(s);
-		CFDataAppendBytes(data, (const UInt8 *)OFF16(&s), NATINT_LEN(short,2));
+		bstr_concat(data, (const UInt8 *)OFF16(&s), NATINT_LEN(short,2));
 	    }
 	    break;
 
@@ -745,7 +744,7 @@
 		from = NEXTFROM;
 		l = num2i32(from);
 		l = NATINT_HTONL(l);
-		CFDataAppendBytes(data, (const UInt8 *)OFF32(&l), NATINT_LEN(long,4));
+		bstr_concat(data, (const UInt8 *)OFF32(&l), NATINT_LEN(long,4));
 	    }
 	    break;
 
@@ -756,7 +755,7 @@
 		from = NEXTFROM;
 		s = num2i32(from);
 		s = NATINT_HTOVS(s);
-		CFDataAppendBytes(data, (const UInt8 *)OFF16(&s), NATINT_LEN(short,2));
+		bstr_concat(data, (const UInt8 *)OFF16(&s), NATINT_LEN(short,2));
 	    }
 	    break;
 
@@ -767,7 +766,7 @@
 		from = NEXTFROM;
 		l = num2i32(from);
 		l = NATINT_HTOVL(l);
-		CFDataAppendBytes(data, (const UInt8 *)OFF32(&l), NATINT_LEN(long,4));
+		bstr_concat(data, (const UInt8 *)OFF32(&l), NATINT_LEN(long,4));
 	    }
 	    break;
 
@@ -778,7 +777,7 @@
 
 		from = NEXTFROM;
 		f = RFLOAT_VALUE(rb_Float(from));
-		CFDataAppendBytes(data, (const UInt8 *)&f, sizeof(float));
+		bstr_concat(data, (const UInt8 *)&f, sizeof(float));
 	    }
 	    break;
 
@@ -790,7 +789,7 @@
 		from = NEXTFROM;
 		f = RFLOAT_VALUE(rb_Float(from));
 		f = HTOVF(f,ftmp);
-		CFDataAppendBytes(data, (const UInt8 *)&f, sizeof(float));
+		bstr_concat(data, (const UInt8 *)&f, sizeof(float));
 	    }
 	    break;
 
@@ -802,7 +801,7 @@
 		from = NEXTFROM;
 		d = RFLOAT_VALUE(rb_Float(from));
 		d = HTOVD(d,dtmp);
-		CFDataAppendBytes(data, (const UInt8 *)&d, sizeof(double));
+		bstr_concat(data, (const UInt8 *)&d, sizeof(double));
 	    }
 	    break;
 
@@ -813,7 +812,7 @@
 
 		from = NEXTFROM;
 		d = RFLOAT_VALUE(rb_Float(from));
-		CFDataAppendBytes(data, (const UInt8 *)&d, sizeof(double));
+		bstr_concat(data, (const UInt8 *)&d, sizeof(double));
 	    }
 	    break;
 
@@ -825,7 +824,7 @@
 		from = NEXTFROM;
 		f = RFLOAT_VALUE(rb_Float(from));
 		f = HTONF(f,ftmp);
-		CFDataAppendBytes(data, (const UInt8 *)&f, sizeof(float));
+		bstr_concat(data, (const UInt8 *)&f, sizeof(float));
 	    }
 	    break;
 
@@ -837,30 +836,30 @@
 		from = NEXTFROM;
 		d = RFLOAT_VALUE(rb_Float(from));
 		d = HTOND(d,dtmp);
-		CFDataAppendBytes(data, (const UInt8 *)&d, sizeof(double));
+		bstr_concat(data, (const UInt8 *)&d, sizeof(double));
 	    }
 	    break;
 
 	  case 'x':		/* null byte */
 	  grow:
 	    while (len >= 10) {
-		CFDataAppendBytes(data, (const UInt8 *)nul10, 10);
+		bstr_concat(data, (const UInt8 *)nul10, 10);
 		len -= 10;
 	    }
-	    CFDataAppendBytes(data, (const UInt8 *)nul10, len);
+	    bstr_concat(data, (const UInt8 *)nul10, len);
 	    break;
 
 	  case 'X':		/* back up byte */
 	  shrink:
-	    plen = CFDataGetLength(data);
+	    plen = bstr_length(data);
 	    if (plen < len) {
 		rb_raise(rb_eArgError, "X outside of string");
 	    }
-	    CFDataSetLength(data, plen - len);
+	    bstr_set_length(data, plen - len);
 	    break;
 
 	  case '@':		/* null fill to absolute position */
-	    len -= CFDataGetLength(data);
+	    len -= bstr_length(data);
 	    if (len > 0) {
 		goto grow;
 	    }
@@ -887,7 +886,7 @@
 		    rb_raise(rb_eRangeError, "pack(U): value out of range");
 		}
 		le = rb_uv_to_utf8(buf, l);
-		CFDataAppendBytes(data, (const UInt8 *)buf, le);
+		bstr_concat(data, (const UInt8 *)buf, le);
 	    }
 	    break;
 
@@ -958,14 +957,14 @@
 		}
 		rb_ary_push(associates, from);
 		rb_obj_taint(from);
-		CFDataAppendBytes(data, (const UInt8 *)&t, sizeof(char*));
+		bstr_concat(data, (const UInt8 *)&t, sizeof(char*));
 	    }
 	    break;
 
 	  case 'w':		/* BER compressed integer  */
 	    while (len-- > 0) {
 		unsigned long ul;
-		CFMutableDataRef bufdata = CFDataCreateMutable(NULL, 0);
+		VALUE bufdata = bstr_new();
 		char c, *bufs, *bufe;
 
 		from = NEXTFROM;
@@ -974,7 +973,7 @@
 		    while (TYPE(from) == T_BIGNUM) {
 			from = rb_big_divmod(from, big128);
 			c = NUM2INT(RARRAY_AT(from, 1)) | 0x80; /* mod */
-			CFDataAppendBytes(bufdata, (const UInt8 *)&c, sizeof(char));
+			bstr_concat(bufdata, (const UInt8 *)&c, sizeof(char));
 			from = RARRAY_AT(from, 0); /* div */
 		    }
 		}
@@ -987,28 +986,26 @@
 
 		while (ul) {
 		    c = ((ul & 0x7f) | 0x80);
-		    CFDataAppendBytes(bufdata, (const UInt8 *)&c, sizeof(char));
+		    bstr_concat(bufdata, (const UInt8 *)&c, sizeof(char));
 		    ul >>=  7;
 		}
 
-		if (CFDataGetLength(bufdata) > 0) {
-		    UInt8 *buf_beg = CFDataGetMutableBytePtr(bufdata);
+		if (bstr_length(bufdata) > 0) {
+		    UInt8 *buf_beg = bstr_bytes(bufdata);
 		    bufs = (char *)buf_beg;
-		    bufe = bufs + CFDataGetLength(bufdata) - 1;
+		    bufe = bufs + bstr_length(bufdata) - 1;
 		    *bufs &= 0x7f; /* clear continue bit */
 		    while (bufs < bufe) { /* reverse */
 			c = *bufs;
 			*bufs++ = *bufe;
 			*bufe-- = c;
 		    }
-		    CFDataAppendBytes(data, buf_beg, CFDataGetLength(bufdata));
+		    bstr_concat(data, buf_beg, bstr_length(bufdata));
 		}
 		else {
 		    c = 0;
-		    CFDataAppendBytes(data, (const UInt8 *)&c, sizeof(char));
+		    bstr_concat(data, (const UInt8 *)&c, sizeof(char));
 		}
-
-		CFRelease(bufdata);
 	    }
 	    break;
 
@@ -1017,22 +1014,19 @@
 	}
     }
 
-    VALUE bres = bstr_new_with_data(CFDataGetBytePtr(data),
-	    CFDataGetLength(data));
-
     // Taint the ByteString accordingly.
     if (OBJ_TAINTED(fmt)) {
-	OBJ_TAINT(bres);
+	OBJ_TAINT(data);
     }
     else {
 	for (long i = 0; i < items; i++) {
 	    if (OBJ_TAINTED(RARRAY_AT(ary, i))) {
-		OBJ_TAINT(bres);
+		OBJ_TAINT(data);
 		break;
 	    }
 	}
     }
-    return bres;
+    return data;
 }
 
 static const char uu_table[] =
@@ -1041,9 +1035,9 @@
 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
 static void
-encodes(CFMutableDataRef data, const char *s, long len, int type, int tail_lf)
+encodes(VALUE data, const char *s, long len, int type, int tail_lf)
 {
-    char *buff = ALLOCA_N(char, len * 4 / 3 + 6);
+    char *buff = (char *)malloc(len * 4 / 3 + 6);
     long i = 0;
     const char *trans = type == 'u' ? uu_table : b64_table;
     int padding;
@@ -1065,7 +1059,7 @@
 	    len -= 3;
 	}
 	if (sizeof(buff) - i < 4) {
-	    CFDataAppendBytes(data, (const UInt8 *)buff, i);
+	    bstr_concat(data, (const UInt8 *)buff, i);
 	    i = 0;
 	}
     }
@@ -1084,12 +1078,13 @@
     if (tail_lf) {
 	buff[i++] = '\n';
     }
-    CFDataAppendBytes(data, (const UInt8 *)buff, i);
+    bstr_concat(data, (const UInt8 *)buff, i);
+    free(buff);
 }
 static const char hex_table[] = "0123456789ABCDEF";
 
 static void
-qpencode(CFMutableDataRef data, VALUE from, long len)
+qpencode(VALUE data, VALUE from, long len)
 {
     char buff[1024];
     long i = 0, n = 0, prev = EOF;
@@ -1127,7 +1122,7 @@
             prev = '\n';
         }
 	if (i > 1024 - 5) {
-	    CFDataAppendBytes(data, (const UInt8 *)buff, i);
+	    bstr_concat(data, (const UInt8 *)buff, i);
 	    i = 0;
 	}
 	s++;
@@ -1137,7 +1132,7 @@
 	buff[i++] = '\n';
     }
     if (i > 0) {
-	CFDataAppendBytes(data, (const UInt8 *)buff, i);
+	bstr_concat(data, (const UInt8 *)buff, i);
     }
 }
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100304/1bd95a89/attachment-0001.html>


More information about the macruby-changes mailing list