]> granicus.if.org Git - php/commitdiff
Make unpack("H") work like in Perl
authorStanislav Malyshev <stas@php.net>
Sun, 10 Sep 2000 13:47:51 +0000 (13:47 +0000)
committerStanislav Malyshev <stas@php.net>
Sun, 10 Sep 2000 13:47:51 +0000 (13:47 +0000)
ext/standard/pack.c

index 7afe52a6af6244ec5a953baa9917cc40567a2e40..70b293f745bfdbdf2718af30baa27e51c571fccb 100644 (file)
@@ -551,12 +551,18 @@ PHP_FUNCTION(unpack)
                                break;
                        }
 
-                       case 'a': case 'A': case 'h': case 'H': {
+                       case 'a': case 'A': {
                                size = arg;
                                arg = 1;
                                break;
                        }
 
+                       case 'h': case 'H': {
+                               size = arg/2;
+                               arg = 1;
+                               break;
+                       }
+
                        /* Use 1 byte of input */
                        case 'c': case 'C': case 'x': {
                                size = 1;
@@ -638,11 +644,10 @@ PHP_FUNCTION(unpack)
                                                int ipos, opos;
 
                                                /* If size was given take minimum of len and size */
-                                               if ((size >= 0) && (len > size)) {
-                                                       len = size;
-                                               }
-
-                                               size = (len + 1) / 2;
+                                               if ((size >= 0) && (len > size*2)) {
+                                                       len = size*2;
+                                               } 
+                                                       
                                                buf = emalloc(len + 1);
 
                                                for (ipos = opos = 0; opos < len; opos++) {