]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
* nismodule.c: database keys and values can contain null bytes. be more
authorGuido van Rossum <guido@python.org>
Wed, 3 Nov 1993 15:01:26 +0000 (15:01 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 3 Nov 1993 15:01:26 +0000 (15:01 +0000)
  careful about these.
* arraymodule.c: added 8 byte swap; added 'i' format character; added
  reverse() method; rename read/write to fromfile/tofile.
* config.c: Set version to 0.9.9++.
* rotormodule.c (r_rand): declare k1..k5 as unsigned longs so the shifts
  will have a well-defined effect independent of word size.
* bltinmodule.c: renamed bagof() to filter().

Modules/arraymodule.c
Modules/config.c.in
Modules/nismodule.c
Modules/rotormodule.c
Python/bltinmodule.c

index 00f2477f026585cc6227f393a621fa619b272cb8..3f7e1632b7cfd6d8fe6a0fc02e8ac58e30cb8370 100644 (file)
@@ -143,6 +143,28 @@ h_setitem(ap, i, v)
        return 0;
 }
 
+static object *
+i_getitem(ap, i)
+       arrayobject *ap;
+       int i;
+{
+       return newintobject((long) ((int *)ap->ob_item)[i]);
+}
+
+static int
+i_setitem(ap, i, v)
+       arrayobject *ap;
+       int i;
+       object *v;
+{
+       int x;
+       if (!getargs(v, "i;array item must be integer", &x))
+               return -1;
+       if (i >= 0)
+                    ((int *)ap->ob_item)[i] = x;
+       return 0;
+}
+
 static object *
 l_getitem(ap, i)
        arrayobject *ap;
@@ -214,11 +236,13 @@ static struct arraydescr descriptors[] = {
        {'c', sizeof(char), c_getitem, c_setitem},
        {'b', sizeof(char), b_getitem, b_setitem},
        {'h', sizeof(short), h_getitem, h_setitem},
+       {'i', sizeof(int), i_getitem, i_setitem},
        {'l', sizeof(long), l_getitem, l_setitem},
        {'f', sizeof(float), f_getitem, f_setitem},
        {'d', sizeof(double), d_getitem, d_setitem},
        {'\0', 0, 0, 0} /* Sentinel */
 };
+/* If we ever allow items larger than double, we must change reverse()! */
        
 
 object *
@@ -239,7 +263,7 @@ newarrayobject(size, descr)
        if (nbytes / descr->itemsize != size) {
                return err_nomem();
        }
-       op = (arrayobject *) malloc(sizeof(arrayobject));
+       op = NEW(arrayobject, 1);
        if (op == NULL) {
                return err_nomem();
        }
@@ -247,9 +271,9 @@ newarrayobject(size, descr)
                op->ob_item = NULL;
        }
        else {
-               op->ob_item = malloc(nbytes);
+               op->ob_item = NEW(char, nbytes);
                if (op->ob_item == NULL) {
-                       free((ANY *)op);
+                       DEL(op);
                        return err_nomem();
                }
        }
@@ -355,8 +379,8 @@ array_dealloc(op)
 {
        int i;
        if (op->ob_item != NULL)
-               free((ANY *)op->ob_item);
-       free((ANY *)op);
+               DEL(op->ob_item);
+       DEL(op);
 }
 
 static int
@@ -644,6 +668,22 @@ array_byteswap(self, args)
                        p[3] = p0;
                }
                break;
+       case 8:
+               for (p = self->ob_item, i = self->ob_size; --i >= 0; p += 8) {
+                       char p0 = p[0];
+                       char p1 = p[1];
+                       char p2 = p[2];
+                       char p3 = p[3];
+                       p[0] = p[7];
+                       p[1] = p[6];
+                       p[2] = p[5];
+                       p[3] = p[4];
+                       p[4] = p3;
+                       p[5] = p2;
+                       p[6] = p1;
+                       p[7] = p0;
+               }
+               break;
        default:
                err_setstr(RuntimeError,
                           "don't know how to byteswap this array type");
@@ -653,33 +693,37 @@ array_byteswap(self, args)
        return None;
 }
 
-#if 0
 static object *
 array_reverse(self, args)
        arrayobject *self;
        object *args;
 {
-       register object **p, **q;
-       register object *tmp;
-       
+       register int itemsize = self->ob_descr->itemsize;
+       register char *p, *q;
+       char tmp[sizeof(double)]; /* Assume that's the max item size */
+
        if (args != NULL) {
                err_badarg();
                return NULL;
        }
 
        if (self->ob_size > 1) {
-               for (p = self->ob_item, q = self->ob_item + self->ob_size - 1;
-                                               p < q; p++, q--) {
-                       tmp = *p;
-                       *p = *q;
-                       *q = tmp;
+               for (p = self->ob_item,
+                    q = self->ob_item + (self->ob_size - 1)*itemsize;
+                    p < q;
+                    p += itemsize, q -= itemsize) {
+                       memmove(tmp, p, itemsize);
+                       memmove(p, q, itemsize);
+                       memmove(q, tmp, itemsize);
                }
        }
        
        INCREF(None);
        return None;
 }
-#endif
+
+/* The following routines were adapted from listobject.c but not converted.
+   To make them work you will have to work! */
 
 #if 0
 static object *
@@ -750,7 +794,7 @@ array_remove(self, args)
 #endif
 
 static object *
-array_read(self, args)
+array_fromfile(self, args)
        arrayobject *self;
        object *args;
 {
@@ -790,7 +834,7 @@ array_read(self, args)
 }
 
 static object *
-array_write(self, args)
+array_tofile(self, args)
        arrayobject *self;
        object *args;
 {
@@ -921,17 +965,19 @@ static struct methodlist array_methods[] = {
        {"append",      array_append},
        {"byteswap",    array_byteswap},
 /*     {"count",       array_count},*/
+       {"fromfile",    array_fromfile},
+       {"fromlist",    array_fromlist},
+       {"fromstring",  array_fromstring},
 /*     {"index",       array_index},*/
        {"insert",      array_insert},
-/*     {"sort",        array_sort},*/
+       {"read",        array_fromfile},
 /*     {"remove",      array_remove},*/
-/*     {"reverse",     array_reverse},*/
-       {"read",        array_read},
-       {"write",       array_write},
-       {"fromlist",    array_fromlist},
+       {"reverse",     array_reverse},
+/*     {"sort",        array_sort},*/
+       {"tofile",      array_tofile},
        {"tolist",      array_tolist},
-       {"fromstring",  array_fromstring},
        {"tostring",    array_tostring},
+       {"write",       array_tofile},
        {NULL,          NULL}           /* sentinel */
 };
 
index fc803628033b520d2eb67e0202be17a2f0fa8666..c9f56ac2ed21bdccf94c66f9b4dbf6d2f1a6a62a 100644 (file)
@@ -62,12 +62,12 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "patchlevel.h"
 
-#define VERSION "0.9.%d (%s)"
+#define VERSION "0.9.%d++ (%s)"
 
 #ifdef __DATE__
 #define DATE __DATE__
 #else
-#define DATE ">= 29 Jul 1993"
+#define DATE ">= 3 Nov 1993"
 #endif
 
 char version[80];
index 92341273c58413586553ab4eb3e2f10cfd6aaa6e..5db26f4fec51d49408fa181ae3b3124619cd1378 100644 (file)
@@ -67,9 +67,23 @@ nis_foreach (instatus, inkey, inkeylen, inval, invallen, indata)
        object *indata;
 {
        if (instatus == YP_TRUE) {
-               inkey[inkeylen]=0;
-               inval[invallen]=0;
-               dictinsert (indata, inkey, newstringobject (inval));
+               object *key = newsizedstringobject(inkey, inkeylen);
+               object *val = newsizedstringobject(inval, invallen);
+               int err;
+               if (key == NULL || val == NULL) {
+                       /* XXX error -- don't know how to handle */
+                       err_clear();
+                       XDECREF(key);
+                       XDECREF(val);
+                       return 1;
+               }
+               err = mappinginsert(indata, key, val);
+               DECREF(key);
+               DECREF(val);
+               if (err != 0) {
+                       err_clear();
+                       return 1;
+               }
                return 0;
        }
        return 1;
@@ -82,18 +96,18 @@ nis_match (self, args)
 {
        char *match;
        char *domain;
-       int len;
+       int keylen, len;
        char *key, *map;
        int err;
        object *res;
 
-       if (!getargs(args, "(ss)", &key, &map))
+       if (!getargs(args, "(s#s)", &key, &keylen, &map))
                return NULL;
        if ((err = yp_get_default_domain(&domain)) != 0)
                return nis_error(err);
        BGN_SAVE
        map = nis_mapname (map);
-       err = yp_match (domain, map, key, strlen (key), &match, &len);
+       err = yp_match (domain, map, key, keylen, &match, &len);
        END_SAVE
        if (err != 0)
                return nis_error(err);
index f01c5fe3f86b5b10f5732f4536c5e921b180562e..d397e2cd25f81a5fbfbd531f2d265aed4f40b76a 100644 (file)
@@ -154,7 +154,12 @@ static void set_key(r, key)
 rotorobject *r;
 char *key;
 {
+#ifdef BUGGY_CODE_BW_COMPAT
+       /* See comments below */
        int k1=995, k2=576, k3=767, k4=671, k5=463;
+#else
+       unsigned long k1=995, k2=576, k3=767, k4=671, k5=463;
+#endif
        int i;
        int len=strlen(key);
        for (i=0;i<len;i++) {
index 51830693714b15ce172da46c7dc1f1b37ca3cefb..9210bd146c3214bfad64d0f95bfcc50b262e1bf5 100644 (file)
@@ -67,7 +67,7 @@ builtin_apply(self, args)
 }
 
 static object *
-builtin_bagof(self, args)
+builtin_filter(self, args)
        object *self;
        object *args;
 {
@@ -101,7 +101,7 @@ builtin_bagof(self, args)
 
        if ((sqf = seq->ob_type->tp_as_sequence) == NULL) {
                err_setstr(TypeError,
-                          "argument 2 to bagof() must be a sequence type");
+                          "argument 2 to filter() must be a sequence type");
                goto Fail_2;
        }
 
@@ -1121,7 +1121,6 @@ builtin_type(self, v)
 static struct methodlist builtin_methods[] = {
        {"abs",         builtin_abs},
        {"apply",       builtin_apply},
-       {"bagof",       builtin_bagof},
        {"chr",         builtin_chr},
        {"cmp",         builtin_cmp},
        {"coerce",      builtin_coerce},
@@ -1130,6 +1129,7 @@ static struct methodlist builtin_methods[] = {
        {"divmod",      builtin_divmod},
        {"eval",        builtin_eval},
        {"execfile",    builtin_execfile},
+       {"filter",      builtin_filter},
        {"float",       builtin_float},
        {"getattr",     builtin_getattr},
        {"hasattr",     builtin_hasattr},
@@ -1271,7 +1271,7 @@ coerce(pv, pw)
 }
 
 
-/* Helper for bagof(): filter a tuple through a function */
+/* Helper for filter(): filter a tuple through a function */
 
 static object *
 filtertuple(func, tuple)
@@ -1324,7 +1324,7 @@ Fail_1:
 }
 
 
-/* Helper for bagof(): filter a string through a function */
+/* Helper for filter(): filter a string through a function */
 
 static object *
 filterstring(func, strobj)