#include "php_pdo_pgsql_int.h"
#include "zend_exceptions.h"
-static char * _pdo_pgsql_trim_message(const char *message)
+static char * _pdo_pgsql_trim_message(const char *message, int persistent)
{
register int i = strlen(message)-1;
+ char *tmp;
if (i>1 && (message[i-1] == '\r' || message[i-1] == '\n') && message[i] == '.') {
--i;
--i;
}
++i;
- return estrndup(message, i);
+ tmp = pemalloc(i + 1, persistent);
+ memcpy(tmp, message, i);
+ tmp[i] = '\0';
+
+ return tmp;
}
int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char *file, int line TSRMLS_DC) /* {{{ */
einfo->line = line;
if (einfo->errmsg) {
- efree(einfo->errmsg);
+ pefree(einfo->errmsg, dbh->is_persistent);
einfo->errmsg = NULL;
}
}
if (errmsg) {
- einfo->errmsg = _pdo_pgsql_trim_message(errmsg);
+ einfo->errmsg = _pdo_pgsql_trim_message(errmsg, dbh->is_persistent);
}
if (!dbh->methods) {
H->server = NULL;
}
if (H->einfo.errmsg) {
- efree(H->einfo.errmsg);
+ pefree(H->einfo.errmsg, dbh->is_persistent);
H->einfo.errmsg = NULL;
}
pefree(H, dbh->is_persistent);