summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils.c29
-rw-r--r--utils.h1
2 files changed, 21 insertions, 9 deletions
diff --git a/utils.c b/utils.c
index b459c63..a4b0e03 100644
--- a/utils.c
+++ b/utils.c
@@ -414,23 +414,16 @@ copy_file (const char *src_path,
return res;
}
-
/* Sets errno on error (== NULL) */
char *
-load_file_at (int dirfd,
- const char *path)
+load_file_data (int fd)
{
- int fd;
cleanup_free char *data = NULL;
ssize_t data_read;
ssize_t data_len;
ssize_t res;
int errsv;
- fd = openat (dirfd, path, O_CLOEXEC | O_RDONLY);
- if (fd == -1)
- return NULL;
-
data_read = 0;
data_len = 4080;
data = xmalloc (data_len);
@@ -461,11 +454,29 @@ load_file_at (int dirfd,
data[data_read] = 0;
+ return steal_pointer (&data);
+}
+
+/* Sets errno on error (== NULL) */
+char *
+load_file_at (int dirfd,
+ const char *path)
+{
+ int fd;
+ char *data;
+ int errsv;
+
+ fd = openat (dirfd, path, O_CLOEXEC | O_RDONLY);
+ if (fd == -1)
+ return NULL;
+
+ data = load_file_data (fd);
+
errsv = errno;
close (fd);
errno = errsv;
- return steal_pointer (&data);
+ return data;
}
/* Sets errno on error (< 0) */
diff --git a/utils.h b/utils.h
index 1cfe93a..6736304 100644
--- a/utils.h
+++ b/utils.h
@@ -73,6 +73,7 @@ bool has_prefix (const char *str,
int fdwalk (int proc_fd,
int (*cb)(void *data, int fd),
void *data);
+char *load_file_data (int fd);
char *load_file_at (int dirfd,
const char *path);
int write_file_at (int dirfd,