Added psycopg_strdup utility function.

This commit is contained in:
Daniele Varrazzo 2010-12-15 03:07:13 +00:00
parent a50a91fc7b
commit ae06fb03e7
3 changed files with 28 additions and 0 deletions

View File

@ -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> 2010-12-14 Daniele Varrazzo <daniele.varrazzo@gmail.com>
* psycopg/connection_type.c: No need to put connection fields to zero. * psycopg/connection_type.c: No need to put connection fields to zero.

View File

@ -120,6 +120,8 @@ HIDDEN void psyco_set_error(PyObject *exc, PyObject *curs, const char *msg,
HIDDEN char *psycopg_escape_string(PyObject *conn, HIDDEN char *psycopg_escape_string(PyObject *conn,
const char *from, Py_ssize_t len, char *to, Py_ssize_t *tolen); 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 */ /* Exceptions docstrings */
#define Error_doc \ #define Error_doc \
"Base class for error exceptions." "Base class for error exceptions."

View File

@ -70,3 +70,25 @@ psycopg_escape_string(PyObject *obj, const char *from, Py_ssize_t len,
return to; 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;
}