[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH v4 1/9] loop:refactor: extract subfunction open_file()
From: Xiaoming Ni <nixiaoming () huawei ! com>
Date: 2022-11-21 13:58:11
Message-ID: 20221121135819.413-2-nixiaoming () huawei ! com
[Download RAW message or body]
Step 1 of micro-refactoring the set_loop():
Extract subfunction open_file() from set_loop()
function old new delta
set_loop 760 758 -2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-2) Total: -2 bytes
Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
---
libbb/loop.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/libbb/loop.c b/libbb/loop.c
index 750642ade..c517ceb13 100644
--- a/libbb/loop.c
+++ b/libbb/loop.c
@@ -96,6 +96,22 @@ int FAST_FUNC get_free_loop(void)
return loopdevno; /* can be -1 if error */
}
+static int open_file(const char *file, unsigned flags, int *mode)
+{
+ int ffd;
+ /* open the file. barf if this doesn't work. */
+ *mode = (flags & BB_LO_FLAGS_READ_ONLY) ? O_RDONLY : O_RDWR;
+ retry_open_ffd:
+ ffd = open(file, *mode);
+ if (ffd < 0) {
+ if (*mode != O_RDONLY) {
+ *mode = O_RDONLY;
+ goto retry_open_ffd;
+ }
+ }
+ return ffd;
+}
+
/* Returns opened fd to the loop device, <0 on error.
* *device is loop device to use, or if *device==NULL finds a loop device to
* mount it on and sets *device to a strdup of that loop device name.
@@ -109,15 +125,8 @@ int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offse
struct stat statbuf;
int i, lfd, ffd, mode, rc;
- /* Open the file. Barf if this doesn't work. */
- mode = (flags & BB_LO_FLAGS_READ_ONLY) ? O_RDONLY : O_RDWR;
- open_ffd:
- ffd = open(file, mode);
+ ffd = open_file(file, flags, &mode);
if (ffd < 0) {
- if (mode != O_RDONLY) {
- mode = O_RDONLY;
- goto open_ffd;
- }
return -errno;
}
--
2.27.0
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic