1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-02-24 17:57:48 +03:00

lvm2app: Reset buffer after retrieving error message

The error buffer will stack error messages which is fine.  However,
once you retrieve the error messages it doesn't make sense to keep
appending for each additional error message when running in the
context of a library call.

This patch clears and resets the buffer after the user retrieves
the error message.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
This commit is contained in:
Tony Asleson 2013-09-26 12:19:18 -05:00
parent 0c7a7d4d84
commit fe5b538c14
4 changed files with 20 additions and 2 deletions

View File

@ -170,6 +170,13 @@ const char *stored_errmsg(void)
return _lvm_errmsg ? : "";
}
const char *stored_errmsg_with_clear(void)
{
const char *rc = strdup(stored_errmsg());
reset_lvm_errno(1);
return rc;
}
static struct dm_hash_table *_duplicated = NULL;
void reset_log_duplicated(void) {

View File

@ -55,6 +55,7 @@ int error_message_produced(void);
void reset_lvm_errno(int store_errmsg);
int stored_errno(void);
const char *stored_errmsg(void);
const char *stored_errmsg_with_clear(void);
/* Suppress messages to stdout/stderr (1) or everywhere (2) */
/* Returns previous setting */

View File

@ -115,7 +115,14 @@ int lvm_errno(lvm_t libh)
const char *lvm_errmsg(lvm_t libh)
{
return stored_errmsg();
const char *rc = NULL;
struct cmd_context *cmd = (struct cmd_context *)libh;
const char *msg = stored_errmsg_with_clear();
if (msg) {
rc = dm_pool_strdup(cmd->mem, msg);
free((void *)msg);
}
return rc;
}
const char *lvm_vgname_from_pvid(lvm_t libh, const char *pvid)

View File

@ -141,6 +141,7 @@ static lvobject *_create_py_lv(vgobject *parent, lv_t lv)
static PyObject *_liblvm_get_last_error(void)
{
PyObject *info;
const char *msg = NULL;
LVM_VALID(NULL);
@ -148,7 +149,9 @@ static PyObject *_liblvm_get_last_error(void)
return NULL;
PyTuple_SetItem(info, 0, PyInt_FromLong((long) lvm_errno(_libh)));
PyTuple_SetItem(info, 1, PyString_FromString(lvm_errmsg(_libh)));
msg = lvm_errmsg(_libh);
PyTuple_SetItem(info, 1, ((msg) ? PyString_FromString(msg) :
PyString_FromString("Memory error while retrieving error message")));
return info;
}