summaryrefslogtreecommitdiffstats
path: root/src/guestfs.c
diff options
context:
space:
mode:
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);
}