chiark / gitweb /
sd-memfd: use assert_return
[elogind.git] / src / libsystemd-bus / sd-memfd.c
index 2712a26f66057eef31305df76db52148defb11f1..cd95978ac2fe457948fe237f56aac7749e5a5875 100644 (file)
@@ -34,13 +34,12 @@ struct sd_memfd {
         FILE *f;
 };
 
-int sd_memfd_new(sd_memfd **m) {
+_public_ int sd_memfd_new(sd_memfd **m) {
         _cleanup_close_ int kdbus = -1;
         sd_memfd *n;
         int fd;
 
-        if (!m)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
 
         kdbus = open("/dev/kdbus/control", O_RDWR|O_NOCTTY|O_CLOEXEC);
         if (kdbus < 0)
@@ -58,14 +57,12 @@ int sd_memfd_new(sd_memfd **m) {
         return 0;
 }
 
-int sd_memfd_make(int fd, sd_memfd **m) {
+_public_ int sd_memfd_make(int fd, sd_memfd **m) {
         sd_memfd *n;
         uint64_t sz;
 
-        if (!m)
-                return -EINVAL;
-        if (fd < 0)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
+        assert_return(fd >= 0, -EINVAL);
 
         /* Check if this is a valid memfd */
         if (ioctl(fd, KDBUS_CMD_MEMFD_SIZE_GET, &sz) < 0)
@@ -81,7 +78,7 @@ int sd_memfd_make(int fd, sd_memfd **m) {
         return 0;
 }
 
-void sd_memfd_free(sd_memfd *m) {
+_public_ void sd_memfd_free(sd_memfd *m) {
         if (!m)
                 return;
 
@@ -93,18 +90,15 @@ void sd_memfd_free(sd_memfd *m) {
         free(m);
 }
 
-int sd_memfd_get_fd(sd_memfd *m) {
-        if (!m)
-                return -EINVAL;
+_public_ int sd_memfd_get_fd(sd_memfd *m) {
+        assert_return(m, -EINVAL);
 
         return m->fd;
 }
 
-int sd_memfd_get_file(sd_memfd *m, FILE **f) {
-        if (!m)
-                return -EINVAL;
-        if (!f)
-                return -EINVAL;
+_public_ int sd_memfd_get_file(sd_memfd *m, FILE **f) {
+        assert_return(m, -EINVAL);
+        assert_return(f, -EINVAL);
 
         if (!m->f) {
                 m->f = fdopen(m->fd, "r+");
@@ -116,11 +110,10 @@ int sd_memfd_get_file(sd_memfd *m, FILE **f) {
         return 0;
 }
 
-int sd_memfd_dup_fd(sd_memfd *m) {
+_public_ int sd_memfd_dup_fd(sd_memfd *m) {
         int fd;
 
-        if (!m)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
 
         fd = fcntl(m->fd, F_DUPFD_CLOEXEC, 3);
         if (fd < 0)
@@ -129,16 +122,13 @@ int sd_memfd_dup_fd(sd_memfd *m) {
         return fd;
 }
 
-int sd_memfd_map(sd_memfd *m, uint64_t offset, size_t size, void **p) {
+_public_ int sd_memfd_map(sd_memfd *m, uint64_t offset, size_t size, void **p) {
         void *q;
         int sealed;
 
-        if (!m)
-                return -EINVAL;
-        if (size <= 0)
-                return -EINVAL;
-        if (!p)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
+        assert_return(size > 0, -EINVAL);
+        assert_return(p, -EINVAL);
 
         sealed = sd_memfd_get_sealed(m);
         if (sealed < 0)
@@ -152,11 +142,10 @@ int sd_memfd_map(sd_memfd *m, uint64_t offset, size_t size, void **p) {
         return 0;
 }
 
-int sd_memfd_set_sealed(sd_memfd *m, int b) {
+_public_ int sd_memfd_set_sealed(sd_memfd *m, int b) {
         int r;
 
-        if (!m)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
 
         r = ioctl(m->fd, KDBUS_CMD_MEMFD_SEAL_SET, b);
         if (r < 0)
@@ -165,11 +154,10 @@ int sd_memfd_set_sealed(sd_memfd *m, int b) {
         return 0;
 }
 
-int sd_memfd_get_sealed(sd_memfd *m) {
+_public_ int sd_memfd_get_sealed(sd_memfd *m) {
         int r, b;
 
-        if (!m)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
 
         r = ioctl(m->fd, KDBUS_CMD_MEMFD_SEAL_GET, &b);
         if (r < 0)
@@ -178,13 +166,11 @@ int sd_memfd_get_sealed(sd_memfd *m) {
         return !!b;
 }
 
-int sd_memfd_get_size(sd_memfd *m, uint64_t *sz) {
+_public_ int sd_memfd_get_size(sd_memfd *m, uint64_t *sz) {
         int r;
 
-        if (!m)
-                return -EINVAL;
-        if (!sz)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
+        assert_return(sz, -EINVAL);
 
         r = ioctl(m->fd, KDBUS_CMD_MEMFD_SIZE_GET, sz);
         if (r < 0)
@@ -193,11 +179,10 @@ int sd_memfd_get_size(sd_memfd *m, uint64_t *sz) {
         return r;
 }
 
-int sd_memfd_set_size(sd_memfd *m, uint64_t sz) {
+_public_ int sd_memfd_set_size(sd_memfd *m, uint64_t sz) {
         int r;
 
-        if (!m)
-                return -EINVAL;
+        assert_return(m, -EINVAL);
 
         r = ioctl(m->fd, KDBUS_CMD_MEMFD_SIZE_SET, &sz);
         if (r < 0)
@@ -205,3 +190,27 @@ int sd_memfd_set_size(sd_memfd *m, uint64_t sz) {
 
         return r;
 }
+
+_public_ int sd_memfd_new_and_map(sd_memfd **m, size_t sz, void **p) {
+        sd_memfd *n;
+        int r;
+
+        r = sd_memfd_new(&n);
+        if (r < 0)
+                return r;
+
+        r = sd_memfd_set_size(n, sz);
+        if (r < 0) {
+                sd_memfd_free(n);
+                return r;
+        }
+
+        r = sd_memfd_map(n, 0, sz, p);
+        if (r < 0) {
+                sd_memfd_free(n);
+                return r;
+        }
+
+        *m = n;
+        return 0;
+}