Simple mount command
[akaros.git] / tests / bind.c
1 #define _LARGEFILE64_SOURCE /* needed to use lseek64 */
2
3 #include <stdio.h> 
4 #include <sys/types.h>
5 #include <sys/stat.h>
6 #include <fcntl.h>
7 #include <arch/arch.h>
8 #include <unistd.h>
9 #include <errno.h>
10 #include <dirent.h>
11 #include <stdlib.h>
12 #include <string.h>
13 #include <ros/syscall.h>
14
15 /* The naming for the args in bind is messy historically.  We do:
16  *              bind src_path onto_path
17  * plan9 says bind NEW OLD, where new is *src*, and old is *onto*.
18  * Linux says mount --bind OLD NEW, where OLD is *src* and NEW is *onto*. */
19 int main(int argc, char *argv[]) 
20
21         int ret;
22         int flag = 0;
23         char *src_path, *onto_path;
24         /* crap arg handling for now. */
25         argc--,argv++;
26         if (argc > 2){
27                 switch(argv[0][1]){
28                         case 'b': flag = 1;
29                         break;
30                         case 'a': flag = 2;
31                         break;
32                         case 'c': flag = 4;
33                         break;
34                         default: 
35                                 printf("-a or -b and/or -c for now\n");
36                                 exit(0);
37                 }
38                 argc--, argv++;
39         }
40
41         if (argc < 2) {
42                 fprintf(stderr, "usage: bind [-a|-b] src_path onto_path\n");
43                 exit(1);
44         }
45         src_path = argv[0];
46         onto_path = argv[1];
47         printf("bind %s -> %s flag %d\n", src_path, onto_path, flag);
48         ret = syscall(SYS_nbind, src_path, strlen(src_path), onto_path,
49                       strlen(onto_path), flag);
50         return ret;
51 }