diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | psycopg/psycopg.h | 2 | ||||
-rw-r--r-- | psycopg/utils.c | 22 |
3 files changed, 28 insertions, 0 deletions
@@ -1,3 +1,7 @@ +2010-12-15 Daniele Varrazzo <daniele.varrazzo@gmail.com> + + * psycopg/utils.c: Added psycopg_strdup function. + 2010-12-14 Daniele Varrazzo <daniele.varrazzo@gmail.com> * psycopg/connection_type.c: No need to put connection fields to zero. diff --git a/psycopg/psycopg.h b/psycopg/psycopg.h index d023e47..00cb98a 100644 --- a/psycopg/psycopg.h +++ b/psycopg/psycopg.h @@ -120,6 +120,8 @@ HIDDEN void psyco_set_error(PyObject *exc, PyObject *curs, const char *msg, HIDDEN char *psycopg_escape_string(PyObject *conn, const char *from, Py_ssize_t len, char *to, Py_ssize_t *tolen); +HIDDEN char *psycopg_strdup(const char *from, Py_ssize_t len); + /* Exceptions docstrings */ #define Error_doc \ "Base class for error exceptions." diff --git a/psycopg/utils.c b/psycopg/utils.c index 22464e6..f2a0ab0 100644 --- a/psycopg/utils.c +++ b/psycopg/utils.c @@ -70,3 +70,25 @@ psycopg_escape_string(PyObject *obj, const char *from, Py_ssize_t len, return to; } + +/* Duplicate a string. + * + * Allocate a new buffer on the Python heap containing the new string. + * 'len' is optional: if 0 the length is calculated. + * + * Return NULL and set an exception in case of error. + */ +char * +psycopg_strdup(const char *from, Py_ssize_t len) +{ + char *rv; + + if (!len) { len = strlen(from); } + if (!(rv = PyMem_Malloc(len + 1))) { + PyErr_NoMemory(); + return NULL; + } + strcpy(rv, from); + return rv; +} + |