Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
ZODB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kirill Smelkov
ZODB
Commits
adf4a294
Commit
adf4a294
authored
Feb 20, 2004
by
Jeremy Hylton
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reformat recent code for consistency with rest of file.
parent
ac99a73f
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
181 additions
and
230 deletions
+181
-230
trunk/src/persistent/cPersistence.c
trunk/src/persistent/cPersistence.c
+181
-230
No files found.
trunk/src/persistent/cPersistence.c
View file @
adf4a294
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
static
char
cPersistence_doc_string
[]
=
static
char
cPersistence_doc_string
[]
=
"Defines Persistent mixin class for persistent objects.
\n
"
"Defines Persistent mixin class for persistent objects.
\n
"
"
\n
"
"
\n
"
"$Id: cPersistence.c,v 1.7
7 2004/02/19 18:13:35
jeremy Exp $
\n
"
;
"$Id: cPersistence.c,v 1.7
8 2004/02/20 17:20:16
jeremy Exp $
\n
"
;
#include "cPersistence.h"
#include "cPersistence.h"
#include "structmember.h"
#include "structmember.h"
...
@@ -31,6 +31,9 @@ static PyObject *py_keys, *py_setstate, *py___dict__, *py_timeTime;
...
@@ -31,6 +31,9 @@ static PyObject *py_keys, *py_setstate, *py___dict__, *py_timeTime;
static
PyObject
*
py__p_changed
,
*
py__p_deactivate
;
static
PyObject
*
py__p_changed
,
*
py__p_deactivate
;
static
PyObject
*
py___getattr__
,
*
py___setattr__
,
*
py___delattr__
;
static
PyObject
*
py___getattr__
,
*
py___setattr__
,
*
py___delattr__
;
static
PyObject
*
py___getstate__
;
static
PyObject
*
py___getstate__
;
static
PyObject
*
py___slotnames__
,
*
copy_reg_slotnames
,
*
__newobj__
;
static
PyObject
*
py___getnewargs__
,
*
py___getstate__
;
static
int
static
int
init_strings
(
void
)
init_strings
(
void
)
...
@@ -48,6 +51,9 @@ init_strings(void)
...
@@ -48,6 +51,9 @@ init_strings(void)
INIT_STRING
(
__setattr__
);
INIT_STRING
(
__setattr__
);
INIT_STRING
(
__delattr__
);
INIT_STRING
(
__delattr__
);
INIT_STRING
(
__getstate__
);
INIT_STRING
(
__getstate__
);
INIT_STRING
(
__slotnames__
);
INIT_STRING
(
__getnewargs__
);
INIT_STRING
(
__getstate__
);
#undef INIT_STRING
#undef INIT_STRING
return
0
;
return
0
;
}
}
...
@@ -232,65 +238,24 @@ Per__p_invalidate(cPersistentObject *self)
...
@@ -232,65 +238,24 @@ Per__p_invalidate(cPersistentObject *self)
}
}
/* It's a dang shame we can't inherit __get/setstate__ from object :( */
static
PyObject
*
str__slotnames__
,
*
copy_reg_slotnames
,
*
__newobj__
;
static
PyObject
*
str__getnewargs__
,
*
str__getstate__
;
static
int
pickle_setup
(
void
)
{
PyObject
*
copy_reg
;
int
r
=
-
1
;
#define DEFINE_STRING(S) \
if(! (str ## S = PyString_FromString(# S))) return -1
DEFINE_STRING
(
__slotnames__
);
DEFINE_STRING
(
__getnewargs__
);
DEFINE_STRING
(
__getstate__
);
#undef DEFINE_STRING
copy_reg
=
PyImport_ImportModule
(
"copy_reg"
);
if
(
copy_reg
==
NULL
)
return
-
1
;
copy_reg_slotnames
=
PyObject_GetAttrString
(
copy_reg
,
"_slotnames"
);
if
(
copy_reg_slotnames
==
NULL
)
goto
end
;
__newobj__
=
PyObject_GetAttrString
(
copy_reg
,
"__newobj__"
);
if
(
__newobj__
==
NULL
)
goto
end
;
r
=
0
;
end:
Py_DECREF
(
copy_reg
);
return
r
;
}
static
PyObject
*
static
PyObject
*
pickle_slotnames
(
PyTypeObject
*
cls
)
pickle_slotnames
(
PyTypeObject
*
cls
)
{
{
PyObject
*
slotnames
;
PyObject
*
slotnames
;
slotnames
=
PyDict_GetItem
(
cls
->
tp_dict
,
str__slotnames__
);
slotnames
=
PyDict_GetItem
(
cls
->
tp_dict
,
py___slotnames__
);
if
(
slotnames
!=
NULL
)
if
(
slotnames
)
{
{
Py_INCREF
(
slotnames
);
Py_INCREF
(
slotnames
);
return
slotnames
;
return
slotnames
;
}
}
slotnames
=
PyObject_CallFunctionObjArgs
(
copy_reg_slotnames
,
(
PyObject
*
)
cls
,
slotnames
=
PyObject_CallFunctionObjArgs
(
copy_reg_slotnames
,
NULL
);
(
PyObject
*
)
cls
,
NULL
);
if
(
slotnames
!=
NULL
&&
if
(
slotnames
&&
!
(
slotnames
==
Py_None
||
PyList_Check
(
slotnames
)))
{
slotnames
!=
Py_None
&&
!
PyList_Check
(
slotnames
))
{
PyErr_SetString
(
PyExc_TypeError
,
PyErr_SetString
(
PyExc_TypeError
,
"copy_reg._slotnames didn't return a list or None"
);
"copy_reg._slotnames didn't return a list or None"
);
Py_DECREF
(
slotnames
);
Py_DECREF
(
slotnames
);
slotnames
=
NULL
;
return
NULL
;
}
}
return
slotnames
;
return
slotnames
;
...
@@ -304,16 +269,14 @@ pickle_copy_dict(PyObject *state)
...
@@ -304,16 +269,14 @@ pickle_copy_dict(PyObject *state)
int
pos
=
0
;
int
pos
=
0
;
copy
=
PyDict_New
();
copy
=
PyDict_New
();
if
(
copy
==
NULL
)
if
(
!
copy
)
return
NULL
;
return
NULL
;
if
(
state
==
NULL
)
if
(
!
state
)
return
copy
;
return
copy
;
while
(
PyDict_Next
(
state
,
&
pos
,
&
key
,
&
value
))
while
(
PyDict_Next
(
state
,
&
pos
,
&
key
,
&
value
))
{
{
if
(
key
&&
PyString_Check
(
key
))
{
if
(
key
&&
PyString_Check
(
key
))
{
ckey
=
PyString_AS_STRING
(
key
);
ckey
=
PyString_AS_STRING
(
key
);
if
(
*
ckey
==
'_'
&&
if
(
*
ckey
==
'_'
&&
(
ckey
[
1
]
==
'v'
||
ckey
[
1
]
==
'p'
)
&&
(
ckey
[
1
]
==
'v'
||
ckey
[
1
]
==
'p'
)
&&
...
@@ -357,34 +320,30 @@ pickle___getstate__(PyObject *self)
...
@@ -357,34 +320,30 @@ pickle___getstate__(PyObject *self)
int
n
=
0
;
int
n
=
0
;
slotnames
=
pickle_slotnames
(
self
->
ob_type
);
slotnames
=
pickle_slotnames
(
self
->
ob_type
);
if
(
slotnames
==
NULL
)
if
(
!
slotnames
)
return
NULL
;
return
NULL
;
dictp
=
_PyObject_GetDictPtr
(
self
);
dictp
=
_PyObject_GetDictPtr
(
self
);
if
(
dictp
)
if
(
dictp
)
state
=
pickle_copy_dict
(
*
dictp
);
state
=
pickle_copy_dict
(
*
dictp
);
else
else
{
{
state
=
Py_None
;
state
=
Py_None
;
Py_INCREF
(
state
);
Py_INCREF
(
state
);
}
}
if
(
slotnames
!=
Py_None
)
if
(
slotnames
!=
Py_None
)
{
{
int
i
;
int
i
;
slots
=
PyDict_New
();
slots
=
PyDict_New
();
if
(
slots
==
NULL
)
if
(
!
slots
)
goto
end
;
goto
end
;
for
(
i
=
0
;
i
<
PyList_GET_SIZE
(
slotnames
);
i
++
)
for
(
i
=
0
;
i
<
PyList_GET_SIZE
(
slotnames
);
i
++
)
{
{
PyObject
*
name
,
*
value
;
PyObject
*
name
,
*
value
;
char
*
cname
;
char
*
cname
;
name
=
PyList_GET_ITEM
(
slotnames
,
i
);
name
=
PyList_GET_ITEM
(
slotnames
,
i
);
if
(
PyString_Check
(
name
))
if
(
PyString_Check
(
name
))
{
{
cname
=
PyString_AS_STRING
(
name
);
cname
=
PyString_AS_STRING
(
name
);
if
(
*
cname
==
'_'
&&
if
(
*
cname
==
'_'
&&
(
cname
[
1
]
==
'v'
||
cname
[
1
]
==
'p'
)
&&
(
cname
[
1
]
==
'v'
||
cname
[
1
]
==
'p'
)
&&
...
@@ -397,8 +356,7 @@ pickle___getstate__(PyObject *self)
...
@@ -397,8 +356,7 @@ pickle___getstate__(PyObject *self)
value
=
PyObject_GetAttr
(
self
,
name
);
value
=
PyObject_GetAttr
(
self
,
name
);
if
(
value
==
NULL
)
if
(
value
==
NULL
)
PyErr_Clear
();
PyErr_Clear
();
else
else
{
{
int
err
=
PyDict_SetItem
(
slots
,
name
,
value
);
int
err
=
PyDict_SetItem
(
slots
,
name
,
value
);
Py_DECREF
(
value
);
Py_DECREF
(
value
);
if
(
err
<
0
)
if
(
err
<
0
)
...
@@ -424,14 +382,12 @@ pickle_setattrs_from_dict(PyObject *self, PyObject *dict)
...
@@ -424,14 +382,12 @@ pickle_setattrs_from_dict(PyObject *self, PyObject *dict)
PyObject
*
key
,
*
value
;
PyObject
*
key
,
*
value
;
int
pos
=
0
;
int
pos
=
0
;
if
(
!
PyDict_Check
(
dict
))
if
(
!
PyDict_Check
(
dict
))
{
{
PyErr_SetString
(
PyExc_TypeError
,
"Expected dictionary"
);
PyErr_SetString
(
PyExc_TypeError
,
"Expected dictionary"
);
return
-
1
;
return
-
1
;
}
}
while
(
PyDict_Next
(
dict
,
&
pos
,
&
key
,
&
value
))
while
(
PyDict_Next
(
dict
,
&
pos
,
&
key
,
&
value
))
{
{
if
(
PyObject_SetAttr
(
self
,
key
,
value
)
<
0
)
if
(
PyObject_SetAttr
(
self
,
key
,
value
)
<
0
)
return
-
1
;
return
-
1
;
}
}
...
@@ -439,32 +395,21 @@ pickle_setattrs_from_dict(PyObject *self, PyObject *dict)
...
@@ -439,32 +395,21 @@ pickle_setattrs_from_dict(PyObject *self, PyObject *dict)
}
}
static
char
pickle___setstate__doc
[]
=
static
char
pickle___setstate__doc
[]
=
"Set the object serialization state
\n
"
"Set the object serialization state
\n\n
"
"
\n
"
"The state should be in one of 3 forms:
\n\n
"
"The state should be in one of 3 forms:
\n
"
"- None
\n\n
"
"
\n
"
" Ignored
\n\n
"
"- None
\n
"
"- A dictionary
\n\n
"
"
\n
"
" Ignored
\n
"
"
\n
"
"- A dictionary
\n
"
"
\n
"
" In this case, the object's instance dictionary will be cleared and
\n
"
" In this case, the object's instance dictionary will be cleared and
\n
"
" updated with the new state.
\n
"
" updated with the new state.
\n\n
"
"
\n
"
"- A two-tuple with a string as the first element.
\n\n
"
"- A two-tuple with a string as the first element.
\n
"
"
\n
"
" In this case, the method named by the string in the first element will be
\n
"
" In this case, the method named by the string in the first element will be
\n
"
" called with the second element.
\n
"
" called with the second element.
\n\n
"
"
\n
"
" This form supports migration of data formats.
\n\n
"
" This form supports migration of data formats.
\n
"
"
\n
"
"- A two-tuple with None or a Dictionary as the first element and
\n
"
"- A two-tuple with None or a Dictionary as the first element and
\n
"
" with a dictionary as the second element.
\n
"
" with a dictionary as the second element.
\n\n
"
"
\n
"
" If the first element is not None, then the object's instance dictionary
\n
"
" If the first element is not None, then the object's instance dictionary
\n
"
" will be cleared and updated with the value.
\n
"
" will be cleared and updated with the value.
\n\n
"
"
\n
"
" The items in the second element will be assigned as attributes.
\n
"
" The items in the second element will be assigned as attributes.
\n
"
;
;
...
@@ -473,29 +418,24 @@ pickle___setstate__(PyObject *self, PyObject *state)
...
@@ -473,29 +418,24 @@ pickle___setstate__(PyObject *self, PyObject *state)
{
{
PyObject
*
slots
=
NULL
;
PyObject
*
slots
=
NULL
;
if
(
PyTuple_Check
(
state
))
if
(
PyTuple_Check
(
state
))
{
{
if
(
!
PyArg_ParseTuple
(
state
,
"OO:__setstate__"
,
&
state
,
&
slots
))
if
(
!
PyArg_ParseTuple
(
state
,
"OO"
,
&
state
,
&
slots
))
return
NULL
;
return
NULL
;
}
}
if
(
state
!=
Py_None
)
if
(
state
!=
Py_None
)
{
{
PyObject
**
dict
;
PyObject
**
dict
;
dict
=
_PyObject_GetDictPtr
(
self
);
dict
=
_PyObject_GetDictPtr
(
self
);
if
(
dict
)
if
(
dict
)
{
{
if
(
!*
dict
)
{
if
(
*
dict
==
NULL
)
{
*
dict
=
PyDict_New
();
*
dict
=
PyDict_New
();
if
(
*
dict
==
NULL
)
if
(
!*
dict
)
return
NULL
;
return
NULL
;
}
}
}
}
if
(
*
dict
!=
NULL
)
if
(
*
dict
)
{
{
PyDict_Clear
(
*
dict
);
PyDict_Clear
(
*
dict
);
if
(
PyDict_Update
(
*
dict
,
state
)
<
0
)
if
(
PyDict_Update
(
*
dict
,
state
)
<
0
)
return
NULL
;
return
NULL
;
...
@@ -504,7 +444,7 @@ pickle___setstate__(PyObject *self, PyObject *state)
...
@@ -504,7 +444,7 @@ pickle___setstate__(PyObject *self, PyObject *state)
return
NULL
;
return
NULL
;
}
}
if
(
slots
!=
NULL
&&
pickle_setattrs_from_dict
(
self
,
slots
)
<
0
)
if
(
slots
&&
pickle_setattrs_from_dict
(
self
,
slots
)
<
0
)
return
NULL
;
return
NULL
;
Py_INCREF
(
Py_None
);
Py_INCREF
(
Py_None
);
...
@@ -521,11 +461,11 @@ pickle___reduce__(PyObject *self)
...
@@ -521,11 +461,11 @@ pickle___reduce__(PyObject *self)
PyObject
*
args
=
NULL
,
*
bargs
=
NULL
,
*
state
=
NULL
,
*
getnewargs
=
NULL
;
PyObject
*
args
=
NULL
,
*
bargs
=
NULL
,
*
state
=
NULL
,
*
getnewargs
=
NULL
;
int
l
,
i
;
int
l
,
i
;
getnewargs
=
PyObject_GetAttr
(
self
,
str
__getnewargs__
);
getnewargs
=
PyObject_GetAttr
(
self
,
py_
__getnewargs__
);
if
(
getnewargs
!=
NULL
)
{
if
(
getnewargs
)
{
bargs
=
PyObject_CallFunctionObjArgs
(
getnewargs
,
NULL
);
bargs
=
PyObject_CallFunctionObjArgs
(
getnewargs
,
NULL
);
Py_DECREF
(
getnewargs
);
Py_DECREF
(
getnewargs
);
if
(
bargs
==
NULL
)
if
(
!
bargs
)
return
NULL
;
return
NULL
;
l
=
PyTuple_Size
(
bargs
);
l
=
PyTuple_Size
(
bargs
);
if
(
l
<
0
)
if
(
l
<
0
)
...
@@ -542,14 +482,13 @@ pickle___reduce__(PyObject *self)
...
@@ -542,14 +482,13 @@ pickle___reduce__(PyObject *self)
Py_INCREF
(
self
->
ob_type
);
Py_INCREF
(
self
->
ob_type
);
PyTuple_SET_ITEM
(
args
,
0
,
(
PyObject
*
)(
self
->
ob_type
));
PyTuple_SET_ITEM
(
args
,
0
,
(
PyObject
*
)(
self
->
ob_type
));
for
(
i
=
0
;
i
<
l
;
i
++
)
for
(
i
=
0
;
i
<
l
;
i
++
)
{
{
Py_INCREF
(
PyTuple_GET_ITEM
(
bargs
,
i
));
Py_INCREF
(
PyTuple_GET_ITEM
(
bargs
,
i
));
PyTuple_SET_ITEM
(
args
,
i
+
1
,
PyTuple_GET_ITEM
(
bargs
,
i
));
PyTuple_SET_ITEM
(
args
,
i
+
1
,
PyTuple_GET_ITEM
(
bargs
,
i
));
}
}
state
=
PyObject_CallMethodObjArgs
(
self
,
str
__getstate__
,
NULL
);
state
=
PyObject_CallMethodObjArgs
(
self
,
py_
__getstate__
,
NULL
);
if
(
state
==
NULL
)
if
(
!
state
)
goto
end
;
goto
end
;
state
=
Py_BuildValue
(
"(OON)"
,
__newobj__
,
args
,
state
);
state
=
Py_BuildValue
(
"(OON)"
,
__newobj__
,
args
,
state
);
...
@@ -562,8 +501,6 @@ pickle___reduce__(PyObject *self)
...
@@ -562,8 +501,6 @@ pickle___reduce__(PyObject *self)
}
}
/* Return the object's state, a dict or None.
/* Return the object's state, a dict or None.
If the object has no dict, it's state is None.
If the object has no dict, it's state is None.
...
@@ -1176,9 +1113,7 @@ void
...
@@ -1176,9 +1113,7 @@ void
initcPersistence
(
void
)
initcPersistence
(
void
)
{
{
PyObject
*
m
,
*
s
;
PyObject
*
m
,
*
s
;
PyObject
*
copy_reg
;
if
(
pickle_setup
()
<
0
)
return
;
if
(
init_strings
()
<
0
)
if
(
init_strings
()
<
0
)
return
;
return
;
...
@@ -1216,7 +1151,23 @@ initcPersistence(void)
...
@@ -1216,7 +1151,23 @@ initcPersistence(void)
if
(
!
py_simple_new
)
if
(
!
py_simple_new
)
return
;
return
;
if
(
TimeStamp
==
NULL
)
{
copy_reg
=
PyImport_ImportModule
(
"copy_reg"
);
if
(
!
copy_reg
)
return
;
copy_reg_slotnames
=
PyObject_GetAttrString
(
copy_reg
,
"_slotnames"
);
if
(
!
copy_reg_slotnames
)
{
Py_DECREF
(
copy_reg
);
return
;
}
__newobj__
=
PyObject_GetAttrString
(
copy_reg
,
"__newobj__"
);
if
(
!
__newobj__
)
{
Py_DECREF
(
copy_reg
);
return
;
}
if
(
!
TimeStamp
)
{
m
=
PyImport_ImportModule
(
"persistent.TimeStamp"
);
m
=
PyImport_ImportModule
(
"persistent.TimeStamp"
);
if
(
!
m
)
if
(
!
m
)
return
;
return
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment