fileio: add new flag READ_FULL_FILE_VERIFY_REGULAR() that checks if file we operate on is regular
This commit is contained in:
+8
-1
@@ -664,6 +664,12 @@ int read_full_stream_full(
|
||||
if (fstat(fd, &st) < 0)
|
||||
return -errno;
|
||||
|
||||
if (FLAGS_SET(flags, READ_FULL_FILE_VERIFY_REGULAR)) {
|
||||
r = stat_verify_regular(&st);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (S_ISREG(st.st_mode)) {
|
||||
|
||||
/* Try to start with the right file size if we shall read the file in full. Note
|
||||
@@ -685,7 +691,8 @@ int read_full_stream_full(
|
||||
if (flags & READ_FULL_FILE_WARN_WORLD_READABLE)
|
||||
(void) warn_file_is_world_accessible(filename, &st, NULL, 0);
|
||||
}
|
||||
}
|
||||
} else if (FLAGS_SET(flags, READ_FULL_FILE_VERIFY_REGULAR))
|
||||
return -EBADFD;
|
||||
|
||||
/* If we don't know how much to read, figure it out now. If we shall read a part of the file, then
|
||||
* allocate the requested size. If we shall load the full file start with LINE_MAX. Note that if
|
||||
|
||||
@@ -30,6 +30,7 @@ typedef enum {
|
||||
READ_FULL_FILE_WARN_WORLD_READABLE = 1 << 3, /* if regular file, log at LOG_WARNING level if access mode above 0700 */
|
||||
READ_FULL_FILE_CONNECT_SOCKET = 1 << 4, /* if socket inode, connect to it and read off it */
|
||||
READ_FULL_FILE_FAIL_WHEN_LARGER = 1 << 5, /* fail loading if file is larger than specified size */
|
||||
READ_FULL_FILE_VERIFY_REGULAR = 1 << 6, /* before reading, verify this is a regular file */
|
||||
} ReadFullFileFlags;
|
||||
|
||||
int fdopen_unlocked(int fd, const char *options, FILE **ret);
|
||||
|
||||
Reference in New Issue
Block a user