int mnt_context_append_mesg(struct libmnt_context *cxt, const char *msg)
{
+ if (msg) {
+ DBG(CXT, ul_debug("mesg: '%s'", msg));
+ }
return strv_extend(&cxt->mesgs, msg);
}
return rc;
}
+int mnt_context_read_mesgs(struct libmnt_context *cxt, int fd)
+{
+ uint8_t buf[BUFSIZ];
+ ssize_t sz;
+ size_t count = 0;
+ int errsv = errno;
+
+ if (fd < 0)
+ return 0;
+
+ while ((sz = read(fd, buf, sizeof(buf) - 1)) != -1) {
+
+ if (sz <= 0)
+ continue;
+ if (buf[sz - 1] == '\n')
+ buf[--sz] = '\0';
+ else
+ buf[sz] = '\0';
+
+ if (!*buf)
+ continue;
+
+ mnt_context_append_mesg(cxt, (char *) buf);
+ count++;;
+ }
+
+ errno = errsv;
+ return count;
+}
+
/**
* mnt_context_get_nmesgs:
* @cxt: mount context
api->fd_tree = api->fd_fs = -1;
}
-static void save_fd_messages(struct libmnt_context *cxt, int fd)
-{
- uint8_t buf[BUFSIZ];
- int rc;
-
- while ((rc = read(fd, buf, sizeof(buf) - 1)) != -1) {
-
- if (rc == 0)
- continue;
- if (buf[rc - 1] == '\n')
- buf[--rc] = '\0';
- else
- buf[rc] = '\0';
-
- DBG(CXT, ul_debug("message from kernel: \"%*s\"", rc, buf));
- mnt_context_append_mesg(cxt, (char *) buf);
- }
-}
-
static void hookset_set_syscall_status(struct libmnt_context *cxt,
const char *name, int x)
{
api = get_sysapi(cxt);
if (api && api->fd_fs >= 0)
- save_fd_messages(cxt, api->fd_fs);
+ mnt_context_read_mesgs(cxt, api->fd_fs);
}
/*
extern void mnt_context_reset_mesgs(struct libmnt_context *cxt);
extern int mnt_context_append_mesg(struct libmnt_context *cxt, const char *msg);
extern int mnt_context_sprintf_mesg(struct libmnt_context *cxt, const char *msg, ...);
+extern int mnt_context_read_mesgs(struct libmnt_context *cxt, int fd);
extern int mnt_context_propagation_only(struct libmnt_context *cxt)
__attribute__((nonnull));