Let's make it easy to create error message and return the message to
applications also when not generated by a syscall (kernel).
Signed-off-by: Karel Zak <kzak@redhat.com>
#include "namespace.h"
#include "match.h"
+#include <stdarg.h>
#include <sys/wait.h>
/**
return strappend(&cxt->errmsg, msg);
}
+int mnt_context_sprintf_errmsg(struct libmnt_context *cxt, const char *msg, ...)
+{
+ int rc;
+ va_list ap;
+ char *p = NULL;
+
+ va_start(ap, msg);
+ rc = vasprintf(&p, msg, ap);
+ va_end(ap);
+
+ if (rc < 0 || !p)
+ return rc;
+
+ free(cxt->errmsg);
+ cxt->errmsg = p;
+
+ return 0;
+}
+
/**
* mnt_context_strerror
* @cxt: context
mnt_context_get_user_mflags(cxt, &uflags); /* userspace flags */
if (!mnt_context_syscall_called(cxt)) {
+ if (buf && cxt->errmsg) {
+ xstrncpy(buf, cxt->errmsg, bufsz);
+ return MNT_EX_USAGE;
+ }
+
/*
* libmount errors (extra library checks)
*/
extern int mnt_context_set_errmsg(struct libmnt_context *cxt, const char *msg);
extern int mnt_context_append_errmsg(struct libmnt_context *cxt, const char *msg);
+extern int mnt_context_sprintf_errmsg(struct libmnt_context *cxt, const char *msg, ...);
extern int mnt_context_propagation_only(struct libmnt_context *cxt)
__attribute__((nonnull));