New version from Jim:
- Don't call Py_FatalError() when initialization fails. - Fix bogus use of return value from PyRun_String(). - Fix misc. compiler errors on some platforms.
This commit is contained in:
parent
17d53ecd8b
commit
c3be1a3ca1
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* cPickle.c,v 1.67 1999/05/12 16:09:45 jim Exp
|
||||
* cPickle.c,v 1.70 1999/06/15 14:09:35 jim Exp
|
||||
*
|
||||
* Copyright (c) 1996-1998, Digital Creations, Fredericksburg, VA, USA.
|
||||
* All rights reserved.
|
||||
|
@ -49,7 +49,7 @@
|
|||
static char cPickle_module_documentation[] =
|
||||
"C implementation and optimization of the Python pickle module\n"
|
||||
"\n"
|
||||
"cPickle.c,v 1.67 1999/05/12 16:09:45 jim Exp\n"
|
||||
"cPickle.c,v 1.70 1999/06/15 14:09:35 jim Exp\n"
|
||||
;
|
||||
|
||||
#include "Python.h"
|
||||
|
@ -599,7 +599,6 @@ readline_cStringIO(Unpicklerobject *self, char **s) {
|
|||
static int
|
||||
read_other(Unpicklerobject *self, char **s, int n) {
|
||||
PyObject *bytes, *str=0;
|
||||
int res = -1;
|
||||
|
||||
UNLESS (bytes = PyInt_FromLong(n)) return -1;
|
||||
|
||||
|
@ -2514,7 +2513,7 @@ finally:
|
|||
static int
|
||||
load_binfloat(Unpicklerobject *self) {
|
||||
PyObject *py_float = 0;
|
||||
int s, e, res = -1;
|
||||
int s, e;
|
||||
long fhi, flo;
|
||||
double x;
|
||||
char *p;
|
||||
|
@ -2630,7 +2629,6 @@ static int
|
|||
load_binstring(Unpicklerobject *self) {
|
||||
PyObject *py_string = 0;
|
||||
long l;
|
||||
int res = -1;
|
||||
char *s;
|
||||
|
||||
if ((*self->read_func)(self, &s, 4) < 0) return -1;
|
||||
|
@ -2652,7 +2650,6 @@ static int
|
|||
load_short_binstring(Unpicklerobject *self) {
|
||||
PyObject *py_string = 0;
|
||||
unsigned char l;
|
||||
int res = -1;
|
||||
char *s;
|
||||
|
||||
if ((*self->read_func)(self, &s, 1) < 0)
|
||||
|
@ -2840,7 +2837,7 @@ load_obj(Unpicklerobject *self) {
|
|||
|
||||
static int
|
||||
load_inst(Unpicklerobject *self) {
|
||||
PyObject *tup, *class, *obj, *module_name, *class_name;
|
||||
PyObject *tup, *class=0, *obj=0, *module_name, *class_name;
|
||||
int i, len;
|
||||
char *s;
|
||||
|
||||
|
@ -2852,7 +2849,7 @@ load_inst(Unpicklerobject *self) {
|
|||
|
||||
if ((len = (*self->readline_func)(self, &s)) >= 0) {
|
||||
if (len < 2) return bad_readline();
|
||||
if (class_name = PyString_FromStringAndSize(s, len - 1)) {
|
||||
if ((class_name = PyString_FromStringAndSize(s, len - 1))) {
|
||||
class = find_class(module_name, class_name, self->find_class);
|
||||
Py_DECREF(class_name);
|
||||
}
|
||||
|
@ -2861,7 +2858,7 @@ load_inst(Unpicklerobject *self) {
|
|||
|
||||
if (! class) return -1;
|
||||
|
||||
if (tup=Pdata_popTuple(self->stack, i)) {
|
||||
if ((tup=Pdata_popTuple(self->stack, i))) {
|
||||
obj = Instance_New(class, tup);
|
||||
Py_DECREF(tup);
|
||||
}
|
||||
|
@ -2886,7 +2883,7 @@ load_global(Unpicklerobject *self) {
|
|||
|
||||
if ((len = (*self->readline_func)(self, &s)) >= 0) {
|
||||
if (len < 2) return bad_readline();
|
||||
if (class_name = PyString_FromStringAndSize(s, len - 1)) {
|
||||
if ((class_name = PyString_FromStringAndSize(s, len - 1))) {
|
||||
class = find_class(module_name, class_name, self->find_class);
|
||||
Py_DECREF(class_name);
|
||||
}
|
||||
|
@ -2902,7 +2899,7 @@ load_global(Unpicklerobject *self) {
|
|||
static int
|
||||
load_persid(Unpicklerobject *self) {
|
||||
PyObject *pid = 0;
|
||||
int len, res = -1;
|
||||
int len;
|
||||
char *s;
|
||||
|
||||
if (self->pers_func) {
|
||||
|
@ -2941,7 +2938,6 @@ load_persid(Unpicklerobject *self) {
|
|||
static int
|
||||
load_binpersid(Unpicklerobject *self) {
|
||||
PyObject *pid = 0;
|
||||
int res = -1;
|
||||
|
||||
if (self->pers_func) {
|
||||
PDATA_POP(self->stack, pid);
|
||||
|
@ -3019,7 +3015,7 @@ load_dup(Unpicklerobject *self) {
|
|||
static int
|
||||
load_get(Unpicklerobject *self) {
|
||||
PyObject *py_str = 0, *value = 0;
|
||||
int len, res = -1;
|
||||
int len;
|
||||
char *s;
|
||||
|
||||
if ((len = (*self->readline_func)(self, &s)) < 0) return -1;
|
||||
|
@ -3043,7 +3039,6 @@ static int
|
|||
load_binget(Unpicklerobject *self) {
|
||||
PyObject *py_key = 0, *value = 0;
|
||||
unsigned char key;
|
||||
int res = -1;
|
||||
char *s;
|
||||
|
||||
if ((*self->read_func)(self, &s, 1) < 0) return -1;
|
||||
|
@ -3068,7 +3063,6 @@ load_long_binget(Unpicklerobject *self) {
|
|||
PyObject *py_key = 0, *value = 0;
|
||||
unsigned char c, *s;
|
||||
long key;
|
||||
int res = -1;
|
||||
|
||||
if ((*self->read_func)(self, &s, 4) < 0) return -1;
|
||||
|
||||
|
@ -3136,7 +3130,7 @@ load_long_binput(Unpicklerobject *self) {
|
|||
PyObject *py_key = 0, *value = 0;
|
||||
long key;
|
||||
unsigned char c, *s;
|
||||
int len, res = -1;
|
||||
int len;
|
||||
|
||||
if ((*self->read_func)(self, &s, 4) < 0) return -1;
|
||||
UNLESS (len=self->stack->length) return stackUnderflow();
|
||||
|
@ -3343,7 +3337,7 @@ load_reduce(Unpicklerobject *self) {
|
|||
|
||||
static PyObject *
|
||||
load(Unpicklerobject *self) {
|
||||
PyObject *stack = 0, *err = 0, *val = 0;
|
||||
PyObject *err = 0, *val = 0;
|
||||
char *s;
|
||||
|
||||
self->num_marks = 0;
|
||||
|
@ -3623,7 +3617,7 @@ noload_build(Unpicklerobject *self) {
|
|||
|
||||
static PyObject *
|
||||
noload(Unpicklerobject *self) {
|
||||
PyObject *stack = 0, *err = 0, *val = 0;
|
||||
PyObject *err = 0, *val = 0;
|
||||
char *s;
|
||||
|
||||
self->num_marks = 0;
|
||||
|
@ -4234,24 +4228,9 @@ static struct PyMethodDef cPickle_methods[] = {
|
|||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
#define CHECK_FOR_ERRORS(MESS) \
|
||||
if (PyErr_Occurred()) { \
|
||||
PyObject *__sys_exc_type, *__sys_exc_value, *__sys_exc_traceback; \
|
||||
PyErr_Fetch( &__sys_exc_type, &__sys_exc_value, &__sys_exc_traceback); \
|
||||
fprintf(stderr, # MESS ":\n\t"); \
|
||||
PyObject_Print(__sys_exc_type, stderr,0); \
|
||||
fprintf(stderr,", "); \
|
||||
PyObject_Print(__sys_exc_value, stderr,0); \
|
||||
fprintf(stderr,"\n"); \
|
||||
fflush(stderr); \
|
||||
Py_FatalError(# MESS); \
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
init_stuff(PyObject *module, PyObject *module_dict) {
|
||||
PyObject *string, *copy_reg, *t;
|
||||
PyObject *string, *copy_reg, *t, *r;
|
||||
|
||||
#define INIT_STR(S) UNLESS(S ## _str=PyString_FromString(#S)) return -1;
|
||||
|
||||
|
@ -4308,12 +4287,13 @@ init_stuff(PyObject *module, PyObject *module_dict) {
|
|||
return -1;
|
||||
|
||||
UNLESS (t=PyDict_New()) return -1;
|
||||
if (PyRun_String("def __init__(self, *args): self.args=args\n\n"
|
||||
"def __str__(self):\n"
|
||||
" return self.args and ('%s' % self.args[0]) or '???'\n",
|
||||
Py_file_input,
|
||||
module_dict, t)
|
||||
< 0) return -1;
|
||||
UNLESS (r=PyRun_String(
|
||||
"def __init__(self, *args): self.args=args\n\n"
|
||||
"def __str__(self):\n"
|
||||
" return self.args and ('%s' % self.args[0]) or '(what)'\n",
|
||||
Py_file_input,
|
||||
module_dict, t) ) return -1;
|
||||
Py_DECREF(r);
|
||||
|
||||
UNLESS (PickleError = PyErr_NewException("cPickle.PickleError", NULL, t))
|
||||
return -1;
|
||||
|
@ -4326,14 +4306,15 @@ init_stuff(PyObject *module, PyObject *module_dict) {
|
|||
return -1;
|
||||
|
||||
UNLESS (t=PyDict_New()) return -1;
|
||||
if (PyRun_String("def __init__(self, *args): self.args=args\n\n"
|
||||
"def __str__(self):\n"
|
||||
" a=self.args\n"
|
||||
" a=a and type(a[0]) or '(what)'\n"
|
||||
" return 'Cannot pickle %s objects' % a\n"
|
||||
, Py_file_input,
|
||||
module_dict, t)
|
||||
< 0) return -1;
|
||||
UNLESS (r=PyRun_String(
|
||||
"def __init__(self, *args): self.args=args\n\n"
|
||||
"def __str__(self):\n"
|
||||
" a=self.args\n"
|
||||
" a=a and type(a[0]) or '(what)'\n"
|
||||
" return 'Cannot pickle %s objects' % a\n"
|
||||
, Py_file_input,
|
||||
module_dict, t) ) return -1;
|
||||
Py_DECREF(r);
|
||||
|
||||
UNLESS (UnpickleableError = PyErr_NewException(
|
||||
"cPickle.UnpickleableError", PicklingError, t))
|
||||
|
@ -4379,7 +4360,7 @@ init_stuff(PyObject *module, PyObject *module_dict) {
|
|||
DL_EXPORT(void)
|
||||
initcPickle() {
|
||||
PyObject *m, *d, *v;
|
||||
char *rev="1.67";
|
||||
char *rev="1.70";
|
||||
PyObject *format_version;
|
||||
PyObject *compatible_formats;
|
||||
|
||||
|
@ -4406,5 +4387,4 @@ initcPickle() {
|
|||
Py_XDECREF(compatible_formats);
|
||||
|
||||
init_stuff(m, d);
|
||||
CHECK_FOR_ERRORS("can't initialize module cPickle");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue