diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-04-08 10:17:15 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-04-08 10:17:15 +0200 |
commit | d44e3d642171fa506dcc5a6c1b2babe6b4b813bf (patch) | |
tree | f07ca08305b99b0c01ddd4775fd15b38ed7d0a67 /lib | |
parent | c239b65fc2bc779343d7b8f0afd1c4cac1dd0beb (diff) | |
parent | 14ad13bfc3e83e7b9befb78b837d28427d8eacdf (diff) | |
download | barebox-d44e3d642171fa506dcc5a6c1b2babe6b4b813bf.tar.gz barebox-d44e3d642171fa506dcc5a6c1b2babe6b4b813bf.tar.xz |
Merge branch 'for-next/lseek'
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libfile.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/lib/libfile.c b/lib/libfile.c index 9a223d2328..089749253d 100644 --- a/lib/libfile.c +++ b/lib/libfile.c @@ -522,12 +522,12 @@ err_out1: * @mode: The file open mode * @pos: The position to lseek to * - * Return: If successful this function returns a positive filedescriptor - * number, otherwise a negative error code is returned + * Return: If successful this function returns a positive + * filedescriptor number, otherwise -1 is returned */ int open_and_lseek(const char *filename, int mode, loff_t pos) { - int fd, ret; + int fd; fd = open(filename, mode); if (fd < 0) { @@ -541,28 +541,26 @@ int open_and_lseek(const char *filename, int mode, loff_t pos) if (mode & (O_WRONLY | O_RDWR)) { struct stat s; - ret = fstat(fd, &s); - if (ret) { + if (fstat(fd, &s)) { perror("fstat"); - return ret; + goto out; } - if (s.st_size < pos) { - ret = ftruncate(fd, pos); - if (ret) { - perror("ftruncate"); - return ret; - } + if (s.st_size < pos && ftruncate(fd, pos)) { + perror("ftruncate"); + goto out; } } if (lseek(fd, pos, SEEK_SET) != pos) { perror("lseek"); - close(fd); - return -errno; + goto out; } return fd; +out: + close(fd); + return -1; } /** |