summaryrefslogtreecommitdiffstats
path: root/src/guestfs.c
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2009-04-13 18:32:03 +0100
committerRichard Jones <rjones@redhat.com>2009-04-13 18:32:03 +0100
commitb3f11c5f62f725fa3f09452b38d52dba764f80d0 (patch)
tree6f1ebeb0d33d0e7cf027be217e75624f47097864 /src/guestfs.c
parentf968f6c36fda3bb66cd37cd56de250c29afa7698 (diff)
downloadlibguestfs-b3f11c5f62f725fa3f09452b38d52dba764f80d0.tar.gz
libguestfs-b3f11c5f62f725fa3f09452b38d52dba764f80d0.tar.xz
libguestfs-b3f11c5f62f725fa3f09452b38d52dba764f80d0.zip
Lots, mainly Python bindings.
Diffstat (limited to 'src/guestfs.c')
-rw-r--r--src/guestfs.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/guestfs.c b/src/guestfs.c
index cab264a4..e1046330 100644
--- a/src/guestfs.c
+++ b/src/guestfs.c
@@ -121,6 +121,8 @@ struct guestfs_h
const char *path;
+ char *last_error;
+
/* Callbacks. */
guestfs_abort_cb abort_cb;
guestfs_error_handler_cb error_cb;
@@ -264,6 +266,7 @@ guestfs_close (guestfs_h *g)
}
/* release mutex (XXX) */
+ free (g->last_error);
free (g);
}
@@ -274,6 +277,19 @@ close_handles (void)
while (handles) guestfs_close (handles);
}
+const char *
+guestfs_last_error (guestfs_h *g)
+{
+ return g->last_error;
+}
+
+static void
+set_last_error (guestfs_h *g, const char *msg)
+{
+ free (g->last_error);
+ g->last_error = strdup (msg);
+}
+
static void
default_error_cb (guestfs_h *g, void *data, const char *msg)
{
@@ -286,13 +302,12 @@ error (guestfs_h *g, const char *fs, ...)
va_list args;
char *msg;
- if (!g->error_cb) return;
-
va_start (args, fs);
vasprintf (&msg, fs, args);
va_end (args);
- g->error_cb (g, g->error_cb_data, msg);
+ if (g->error_cb) g->error_cb (g, g->error_cb_data, msg);
+ set_last_error (g, msg);
free (msg);
}
@@ -304,8 +319,6 @@ perrorf (guestfs_h *g, const char *fs, ...)
char *msg;
int err = errno;
- if (!g->error_cb) return;
-
va_start (args, fs);
vasprintf (&msg, fs, args);
va_end (args);
@@ -323,7 +336,8 @@ perrorf (guestfs_h *g, const char *fs, ...)
strcat (msg, ": ");
strcat (msg, buf);
- g->error_cb (g, g->error_cb_data, msg);
+ if (g->error_cb) g->error_cb (g, g->error_cb_data, msg);
+ set_last_error (g, msg);
free (msg);
}