projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
made 3 license strings to follow the usual form ("or later" bit is not changed!)
[oweals/busybox.git]
/
util-linux
/
losetup.c
diff --git
a/util-linux/losetup.c
b/util-linux/losetup.c
index e224a4d541cf65774b35734b965e5f83e6d14638..776f784f5b1a51b7b34789fe0f68525af81dea2d 100644
(file)
--- a/
util-linux/losetup.c
+++ b/
util-linux/losetup.c
@@
-4,50
+4,54
@@
*
* Copyright (C) 2002 Matt Kraai.
*
*
* Copyright (C) 2002 Matt Kraai.
*
- * Licensed under GPLv2 or later, see file LICENSE in this
tarball for details
.
+ * Licensed under GPLv2 or later, see file LICENSE in this
source tree
.
*/
#include "libbb.h"
int losetup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
*/
#include "libbb.h"
int losetup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int losetup_main(int argc, char **argv)
+int losetup_main(int argc
UNUSED_PARAM
, char **argv)
{
{
- char dev[] = LOOP_NAME"0";
unsigned opt;
unsigned opt;
+ int n;
char *opt_o;
char *opt_o;
- char *s;
unsigned long long offset = 0;
unsigned long long offset = 0;
+ enum {
+ OPT_d = (1 << 0),
+ OPT_o = (1 << 1),
+ OPT_f = (1 << 2),
+ };
/* max 2 args, all opts are mutually exclusive */
/* max 2 args, all opts are mutually exclusive */
- opt_complementary = "?2:d--of:o--df:f-do";
+ opt_complementary = "?2:d--of:o--df:f-
-
do";
opt = getopt32(argv, "do:f", &opt_o);
opt = getopt32(argv, "do:f", &opt_o);
- argc -= optind;
argv += optind;
argv += optind;
- if (opt ==
0x2) // -o
+ if (opt ==
OPT_o)
offset = xatoull(opt_o);
offset = xatoull(opt_o);
- if (opt == 0x4 && argc) // -f does not take any argument
- bb_show_usage();
-
- if (opt == 0x1) { // -d
- /* detach takes exactly one argument */
- if (argc != 1)
+ if (opt == OPT_d) {
+ /* -d BLOCKDEV */
+ if (!argv[0] || argv[1])
bb_show_usage();
if (del_loop(argv[0]))
bb_simple_perror_msg_and_die(argv[0]);
return EXIT_SUCCESS;
}
bb_show_usage();
if (del_loop(argv[0]))
bb_simple_perror_msg_and_die(argv[0]);
return EXIT_SUCCESS;
}
- if (argc == 2) {
- /* -o or no option */
- if (set_loop(&argv[0], argv[1], offset) < 0)
- bb_simple_perror_msg_and_die(argv[0]);
- return EXIT_SUCCESS;
- }
+ if (argv[0]) {
+ char *s;
+
+ if (opt == OPT_f) /* -f should not have arguments */
+ bb_show_usage();
- if (argc == 1) {
- /* -o or no option */
+ if (argv[1]) {
+ /* [-o OFS] BLOCKDEV FILE */
+ if (set_loop(&argv[0], argv[1], offset) < 0)
+ bb_simple_perror_msg_and_die(argv[0]);
+ return EXIT_SUCCESS;
+ }
+ /* [-o OFS] BLOCKDEV */
s = query_loop(argv[0]);
if (!s)
bb_simple_perror_msg_and_die(argv[0]);
s = query_loop(argv[0]);
if (!s)
bb_simple_perror_msg_and_die(argv[0]);
@@
-57,23
+61,28
@@
int losetup_main(int argc, char **argv)
return EXIT_SUCCESS;
}
return EXIT_SUCCESS;
}
- /* -o, -f or no option */
+ /* [-o OFS|-f] with no params */
+ n = 0;
while (1) {
while (1) {
+ char *s;
+ char dev[LOOP_NAMESIZE];
+
+ sprintf(dev, LOOP_FORMAT, n);
s = query_loop(dev);
s = query_loop(dev);
+ n++;
if (!s) {
if (!s) {
- if (opt == 0x4) {
+ if (n > 9 && errno && errno != ENXIO)
+ return EXIT_SUCCESS;
+ if (opt == OPT_f) {
puts(dev);
return EXIT_SUCCESS;
}
} else {
puts(dev);
return EXIT_SUCCESS;
}
} else {
- if (opt !=
0x4
)
+ if (opt !=
OPT_f
)
printf("%s: %s\n", dev, s);
if (ENABLE_FEATURE_CLEAN_UP)
free(s);
}
printf("%s: %s\n", dev, s);
if (ENABLE_FEATURE_CLEAN_UP)
free(s);
}
-
- if (++dev[sizeof(dev) - 2] > '9')
- break;
}
return EXIT_SUCCESS;
}
}
return EXIT_SUCCESS;
}