]> granicus.if.org Git - python/commitdiff
fix test_float regression and 64-bit size mismatch issue
authorBob Ippolito <bob@redivi.com>
Thu, 25 May 2006 21:09:45 +0000 (21:09 +0000)
committerBob Ippolito <bob@redivi.com>
Thu, 25 May 2006 21:09:45 +0000 (21:09 +0000)
Modules/_struct.c

index 06676fa5074cc297a4332f232cc81780dfb254a2..fb3e497af27f8010cf202934b9a798925338aba5 100644 (file)
@@ -1486,14 +1486,28 @@ init_struct(void)
                        other = lilendian_table;
                else
                        other = bigendian_table;
+               /* Scan through the native table, find a matching
+                  entry in the endian table and swap in the
+                  native implementations whenever possible
+                  (64-bit platforms may not have "standard" sizes) */
                while (native->format != '\0' && other->format != '\0') {
                        ptr = other;
                        while (ptr->format != '\0') {
                                if (ptr->format == native->format) {
-                                       ptr->pack = native->pack;
-                                       ptr->unpack = native->unpack;
+                                       /* Match faster when formats are
+                                          listed in the same order */
                                        if (ptr == other)
                                                other++;
+                                       /* Only use the trick if the 
+                                          size matches */
+                                       if (ptr->size != native->size)
+                                               break;
+                                       /* Skip float and double, could be
+                                          "unknown" float format */
+                                       if (ptr->format == 'd' || ptr->format == 'f')
+                                               break;
+                                       ptr->pack = native->pack;
+                                       ptr->unpack = native->unpack;
                                        break;
                                }
                                ptr++;