OSDN Git Service

Add readfileat() to lib
authorRob Landley <rob@landley.net>
Fri, 3 Apr 2015 16:49:31 +0000 (11:49 -0500)
committerRob Landley <rob@landley.net>
Fri, 3 Apr 2015 16:49:31 +0000 (11:49 -0500)
lib/lib.c
lib/lib.h

index 0f2b012..9664bec 100644 (file)
--- 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)
 {
index d8a1503..3cda7d9 100644 (file)
--- 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);