aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2015-04-03 11:49:31 -0500
committerRob Landley <rob@landley.net>2015-04-03 11:49:31 -0500
commite10483fdc9ef8b69b2a420e8d991b865e05b85b9 (patch)
tree72069bd30eb5c716254b695e99d26ec819b49e7b /lib
parent97c536c40eb4cc732b8a11688e0196281e90d81b (diff)
downloadtoybox-e10483fdc9ef8b69b2a420e8d991b865e05b85b9.tar.gz
Add readfileat() to lib
Diffstat (limited to 'lib')
-rw-r--r--lib/lib.c11
-rw-r--r--lib/lib.h1
2 files changed, 8 insertions, 4 deletions
diff --git a/lib/lib.c b/lib/lib.c
index 0f2b0120..9664bec5 100644
--- a/lib/lib.c
+++ b/lib/lib.c
@@ -362,14 +362,12 @@ off_t fdlength(int fd)
// Read contents of file as a single nul-terminated string.
// malloc new one if buf=len=0
-char *readfile(char *name, char *ibuf, off_t len)
+char *readfileat(int dirfd, char *name, char *ibuf, off_t len)
{
int fd;
char *buf;
- fd = open(name, O_RDONLY);
- if (fd == -1) return 0;
-
+ if (-1 == (fd = openat(dirfd, name, O_RDONLY))) return 0;
if (len<1) {
len = fdlength(fd);
// proc files don't report a length, so try 1 page minimum.
@@ -388,6 +386,11 @@ char *readfile(char *name, char *ibuf, off_t len)
return buf;
}
+char *readfile(char *name, char *ibuf, off_t len)
+{
+ return readfileat(AT_FDCWD, name, ibuf, len);
+}
+
// Sleep for this many thousandths of a second
void msleep(long miliseconds)
{
diff --git a/lib/lib.h b/lib/lib.h
index d8a1503e..3cda7d9f 100644
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -144,6 +144,7 @@ ssize_t writeall(int fd, void *buf, size_t len);
off_t lskip(int fd, off_t offset);
int mkpathat(int atfd, char *dir, mode_t lastmode, int flags);
struct string_list **splitpath(char *path, struct string_list **list);
+char *readfileat(int dirfd, char *name, char *buf, off_t len);
char *readfile(char *name, char *buf, off_t len);
void msleep(long miliseconds);
int64_t peek_le(void *ptr, unsigned size);