summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-04-08 10:17:15 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2019-04-08 10:17:15 +0200
commitd44e3d642171fa506dcc5a6c1b2babe6b4b813bf (patch)
treef07ca08305b99b0c01ddd4775fd15b38ed7d0a67 /lib
parentc239b65fc2bc779343d7b8f0afd1c4cac1dd0beb (diff)
parent14ad13bfc3e83e7b9befb78b837d28427d8eacdf (diff)
downloadbarebox-d44e3d642171fa506dcc5a6c1b2babe6b4b813bf.tar.gz
barebox-d44e3d642171fa506dcc5a6c1b2babe6b4b813bf.tar.xz
Merge branch 'for-next/lseek'
Diffstat (limited to 'lib')
-rw-r--r--lib/libfile.c26
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;
}
/**