X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fmemfd.c;h=b55817795162637a80061cca63628f30c003f463;hb=47f0f4eb1d79ec37dfbe6a382817c0384b106373;hp=e335c0c18bf759788d6521b28d1eebf6473b00e5;hpb=8f2807bab569b27eae5459854a48cdd4dead4d2c;p=elogind.git diff --git a/src/shared/memfd.c b/src/shared/memfd.c index e335c0c18..b55817795 100644 --- a/src/shared/memfd.c +++ b/src/shared/memfd.c @@ -25,24 +25,21 @@ #include #include +#ifdef HAVE_LINUX_MEMFD_H +# include +#endif + #include "util.h" #include "bus-label.h" -#include "missing.h" #include "memfd.h" #include "utf8.h" +#include "missing.h" int memfd_new(const char *name) { - _cleanup_free_ char *g = NULL; int fd; - if (name) { - g = utf8_escape_invalid(name); - if (!g) - return -ENOMEM; - - name = g; - } else { + if (!name) { char pr[17] = {}; /* If no name is specified we generate one. We include @@ -68,7 +65,7 @@ int memfd_new(const char *name) { } } - fd = memfd_create(name, MFD_ALLOW_SEALING); + fd = memfd_create(name, MFD_ALLOW_SEALING | MFD_CLOEXEC); if (fd < 0) return -errno; @@ -136,7 +133,7 @@ int memfd_get_size(int fd, uint64_t *sz) { return -errno; *sz = stat.st_size; - return r; + return 0; } int memfd_set_size(int fd, uint64_t sz) { @@ -148,7 +145,7 @@ int memfd_set_size(int fd, uint64_t sz) { if (r < 0) return -errno; - return r; + return 0; } int memfd_new_and_map(const char *name, size_t sz, void **p) { @@ -175,50 +172,3 @@ int memfd_new_and_map(const char *name, size_t sz, void **p) { return r; } - -int memfd_get_name(int fd, char **name) { - char path[sizeof("/proc/self/fd/") + DECIMAL_STR_MAX(int)], buf[FILENAME_MAX+1], *e; - const char *delim, *end; - _cleanup_free_ char *n = NULL; - ssize_t k; - - assert(fd >= 0); - assert(name); - - sprintf(path, "/proc/self/fd/%i", fd); - - k = readlink(path, buf, sizeof(buf)); - if (k < 0) - return -errno; - - if ((size_t) k >= sizeof(buf)) - return -E2BIG; - - buf[k] = 0; - - delim = strstr(buf, ":["); - if (!delim) - return -EIO; - - delim = strchr(delim + 2, ':'); - if (!delim) - return -EIO; - - delim++; - - end = strchr(delim, ']'); - if (!end) - return -EIO; - - n = strndup(delim, end - delim); - if (!n) - return -ENOMEM; - - e = utf8_escape_invalid(n); - if (!e) - return -ENOMEM; - - *name = e; - - return 0; -}