Standardize on the vi editing directives being on the first line.
[oweals/busybox.git] / util-linux / losetup.c
1 /* 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   int offset = 0;
18
19   /* This will need a "while(getopt()!=-1)" loop when we can have more than
20      one option, but for now we can't. */
21   switch(getopt(argc,argv, "do:")) {
22     case 'd':
23       /* detach takes exactly one argument */
24       if(optind+1!=argc) bb_show_usage();
25       if(!del_loop(argv[optind])) return EXIT_SUCCESS;
26 die_failed:
27       bb_perror_msg_and_die("%s",argv[optind]);
28
29     case 'o':
30       offset = bb_xparse_number (optarg, NULL);
31       /* Fall through to do the losetup */
32     case -1:
33       /* losetup takes two argument:, loop_device and file */
34       if(optind+2==argc) {
35         if(set_loop(&argv[optind], argv[optind + 1], offset)>=0)
36           return EXIT_SUCCESS;
37         else goto die_failed;
38       }
39       if(optind+1==argc) {
40         char *s=query_loop(argv[optind]);
41         if (!s) goto die_failed;
42         printf("%s: %s\n",argv[optind],s);
43         if(ENABLE_FEATURE_CLEAN_UP) free(s);
44         return EXIT_SUCCESS;
45       }
46       break;
47   }
48   bb_show_usage();
49   return EXIT_FAILURE;
50 }