Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/util-linux/losetup.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (hide annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 9 months ago) by niro
File MIME type: text/plain
File size: 1323 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 niro 532 /* vi: set sw=4 ts=4: */
2     /*
3     * Mini losetup implementation for busybox
4     *
5     * Copyright (C) 2002 Matt Kraai.
6     *
7     * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
8     */
9    
10     #include <getopt.h>
11     #include <stdlib.h>
12    
13     #include "busybox.h"
14    
15     int losetup_main(int argc, char **argv)
16     {
17     unsigned opt;
18     char *opt_o;
19     unsigned long long offset = 0;
20    
21     opt = getopt32(argc, argv, "do:", &opt_o);
22     argc -= optind;
23     argv += optind;
24    
25     if (opt == 0x3) // -d + -o (illegal)
26     bb_show_usage();
27    
28     if (opt == 0x1) { // -d
29     /* detach takes exactly one argument */
30     if (argc != 1)
31     bb_show_usage();
32     if (!del_loop(argv[0]))
33     return EXIT_SUCCESS;
34     bb_perror_nomsg_and_die();
35     }
36    
37     if (opt == 0x2) // -o
38     offset = xatoull(opt_o);
39    
40     /* -o or no option */
41    
42     if (argc == 2) {
43     if (set_loop(&argv[0], argv[1], offset) < 0)
44     bb_perror_nomsg_and_die();
45     } else if (argc == 1) {
46     char *s = query_loop(argv[0]);
47     if (!s) bb_perror_nomsg_and_die();
48     printf("%s: %s\n", argv[0], s);
49     if (ENABLE_FEATURE_CLEAN_UP) free(s);
50     } else {
51     char dev[sizeof(LOOP_NAME"0")] = LOOP_NAME"0";
52     char c;
53     for (c = '0'; c <= '9'; ++c) {
54     char *s;
55     dev[sizeof(LOOP_NAME"0")-2] = c;
56     s = query_loop(dev);
57     if (s) {
58     printf("%s: %s\n", dev, s);
59     if (ENABLE_FEATURE_CLEAN_UP) free(s);
60     }
61     }
62     }
63     return EXIT_SUCCESS;
64     }