mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
daemon error handling: Define a new function reply_with_perror_errno.
This allows you to save the errno from a previous call and
pass it to reply_with_perror.
For example, original code:
r = some_system_call ();
err = errno;
do_cleanup ();
errno = err;
if (r == -1) {
reply_with_perror ("failed");
return -1;
}
can in future be changed to:
r = some_system_call ();
err = errno;
do_cleanup ();
if (r == -1) {
reply_with_perror_errno (err, "failed");
return -1;
}
This commit is contained in:
@@ -119,8 +119,9 @@ extern void main_loop (int sock) __attribute__((noreturn));
|
||||
/* ordinary daemon functions use these to indicate errors */
|
||||
extern void reply_with_error (const char *fs, ...)
|
||||
__attribute__((format (printf,1,2)));
|
||||
extern void reply_with_perror (const char *fs, ...)
|
||||
__attribute__((format (printf,1,2)));
|
||||
extern void reply_with_perror_errno (int err, const char *fs, ...)
|
||||
__attribute__((format (printf,2,3)));
|
||||
#define reply_with_perror(...) reply_with_perror_errno(errno, __VA_ARGS__)
|
||||
|
||||
/* daemon functions that receive files (FileIn) should call
|
||||
* receive_file for each FileIn parameter.
|
||||
@@ -130,7 +131,7 @@ extern int receive_file (receive_cb cb, void *opaque);
|
||||
|
||||
/* daemon functions that receive files (FileIn) can call this
|
||||
* to cancel incoming transfers (eg. if there is a local error),
|
||||
* but they MUST then call reply_with_error or reply_with_perror.
|
||||
* but they MUST then call reply_with_*.
|
||||
*/
|
||||
extern void cancel_receive (void);
|
||||
|
||||
|
||||
@@ -195,12 +195,11 @@ reply_with_error (const char *fs, ...)
|
||||
}
|
||||
|
||||
void
|
||||
reply_with_perror (const char *fs, ...)
|
||||
reply_with_perror_errno (int err, const char *fs, ...)
|
||||
{
|
||||
char buf1[GUESTFS_ERROR_LEN];
|
||||
char buf2[GUESTFS_ERROR_LEN];
|
||||
va_list args;
|
||||
int err = errno;
|
||||
|
||||
va_start (args, fs);
|
||||
vsnprintf (buf1, sizeof buf1, fs, args);
|
||||
|
||||
Reference in New Issue
Block a user