summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 1f17cc0)
raw | patch | inline | side by side (parent: 1f17cc0)
author | Sven Trenkel <collectd@semidefinite.de> | |
Fri, 18 Dec 2009 01:02:47 +0000 (02:02 +0100) | ||
committer | Florian Forster <octo@noris.net> | |
Tue, 5 Jan 2010 10:02:32 +0000 (11:02 +0100) |
src/cpython.h | patch | blob | history | |
src/pyconfig.c | patch | blob | history |
diff --git a/src/cpython.h b/src/cpython.h
index 880529705fab535d11b892a3f1a4967355af9ee9..001a3ae9829e0d0d7836222270f7427c8442bc65 100644 (file)
--- a/src/cpython.h
+++ b/src/cpython.h
#endif
#ifdef IS_PY3K
+
#define PyInt_FromLong PyLong_FromLong
-//#define PyString_FromString PyBytes_FromString
#define CPY_INIT_TYPE PyVarObject_HEAD_INIT(NULL, 0)
#define IS_BYTES_OR_UNICODE(o) (PyUnicode_Check(o) || PyBytes_Check(o))
+#define CPY_STRCAT PyUnicode_Concat
+
#else
+
#define CPY_INIT_TYPE PyObject_HEAD_INIT(NULL) 0,
#define IS_BYTES_OR_UNICODE(o) (PyUnicode_Check(o) || PyString_Check(o))
+#define CPY_STRCAT PyString_Concat
+
#endif
static inline const char *cpy_unicode_or_bytes_to_string(PyObject **o) {
diff --git a/src/pyconfig.c b/src/pyconfig.c
index 6f03da9b35fe05d44397378d35d612b4a51c7041..d794c9a8a1556c223149289b04943472e789bede 100644 (file)
--- a/src/pyconfig.c
+++ b/src/pyconfig.c
return 0;
}
-/*static PyObject *Config_repr(PyObject *s) {
+static PyObject *Config_repr(PyObject *s) {
Config *self = (Config *) s;
+ PyObject *name, *tmp, *ret = NULL;
+ static PyObject *node_prefix = NULL, *root_prefix = NULL, *ending = NULL;
- return PyString_FromFormat("<collectd.Config %snode %s>", self->parent == Py_None ? "root " : "", PyString_AsString(PyObject_Str(self->key)));
-}*/
+ /* This is ok because we have the GIL, so this is thread-save by default. */
+ if (node_prefix == NULL)
+ node_prefix = cpy_string_to_unicode_or_bytes("<collectd.Config node '");
+ if (root_prefix == NULL)
+ root_prefix = cpy_string_to_unicode_or_bytes("<collectd.Config root node '");
+ if (ending == NULL)
+ ending = cpy_string_to_unicode_or_bytes("'>");
+ if (node_prefix == NULL || root_prefix == NULL || ending == NULL)
+ return NULL;
+
+ name = PyObject_Str(self->key);
+ if (name == NULL)
+ return NULL;
+
+ if (self->parent == NULL || self->parent == Py_None)
+ tmp = CPY_STRCAT(root_prefix, name);
+ else
+ tmp = CPY_STRCAT(node_prefix, name);
+
+ Py_DECREF(name);
+ if (tmp != NULL)
+ ret = CPY_STRCAT(tmp, ending);
+ Py_DECREF(tmp);
+
+ return ret;
+}
static int Config_traverse(PyObject *self, visitproc visit, void *arg) {
Config *c = (Config *) self;
Py_VISIT(c->key);
Py_VISIT(c->values);
Py_VISIT(c->children);
- return 0;
-}
+ return 0;}
static int Config_clear(PyObject *self) {
Config *c = (Config *) self;
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
- 0/*Config_repr*/, /* tp_repr */
+ Config_repr, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */