summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
4b4e0d0)
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;
}
/* ordinary daemon functions use these to indicate errors */
extern void reply_with_error (const char *fs, ...)
__attribute__((format (printf,1,2)));
/* 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.
/* daemon functions that receive files (FileIn) should call
* receive_file for each FileIn parameter.
/* daemon functions that receive files (FileIn) can call this
* to cancel incoming transfers (eg. if there is a local error),
/* 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);
*/
extern void cancel_receive (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;
{
char buf1[GUESTFS_ERROR_LEN];
char buf2[GUESTFS_ERROR_LEN];
va_list args;
va_start (args, fs);
vsnprintf (buf1, sizeof buf1, fs, args);
va_start (args, fs);
vsnprintf (buf1, sizeof buf1, fs, args);