X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fguestfs.c;h=e10463309bf625fae4b91d3903a82cf96da3ee2a;hb=54a6c3212ce1f942979639d2f2bd726414fff7c2;hp=7f0f8214a89951b701f98c3673a19c10b118d42d;hpb=94050e0344685b6916e21581e618ad3e85795008;p=libguestfs.git diff --git a/src/guestfs.c b/src/guestfs.c index 7f0f821..e104633 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); } @@ -1271,6 +1285,12 @@ check_reply_header (guestfs_h *g, * generator.ml. */ void +guestfs_free_int_bool (struct guestfs_int_bool *x) +{ + free (x); +} + +void guestfs_free_lvm_pv_list (struct guestfs_lvm_pv_list *x) { xdr_free ((xdrproc_t) xdr_guestfs_lvm_int_pv_list, (char *) x);