X-Git-Url: http://git.onelab.eu/?p=vsys-wrappers.git;a=blobdiff_plain;f=fuse%2Freroutemount.c;h=575554b9582ca09da98c9775a1c2e9a69478e7a3;hp=264fcdf62b86ad86eb983b1d729b239467622653;hb=9667d82d456cb9e234e946ce23031eb8087a84b9;hpb=7970328be9a695aecc4ecc1ea94bf686d256f1b7 diff --git a/fuse/reroutemount.c b/fuse/reroutemount.c index 264fcdf..575554b 100644 --- a/fuse/reroutemount.c +++ b/fuse/reroutemount.c @@ -17,6 +17,7 @@ void send_argument(int control_channel_fd, const char *source) { exit(1); } } + int connect_socket() { int fd = socket( AF_UNIX, SOCK_STREAM, 0 ); struct sockaddr_un addr; @@ -27,44 +28,6 @@ int connect_socket() { return fd; } -void do_umount( char *const argv[], int n, int fd ) { - - // write the length - char buf[1024]; - sprintf( buf, "%08x\n", n ); - write( fd, buf, strlen(buf) ); - - // now write each arg - int i; - for( i = 0; i < n; i++ ) { - assert( strlen(argv[i]) < 1024 ); - sprintf( buf, "%s\n", argv[i] ); - write( fd, buf, strlen(buf) ); - } - - char inbuf[10]; - int n2 = read( fd, inbuf, 10 ); - inbuf[n2] = '\0'; - - int r = atoi(inbuf); - -} - -int umount2( const char *mnt, int flags ) { - - int fd = connect_socket(); - - const char *argv[3]; - argv[0] = "fusermount"; - argv[1] = "-u"; - argv[2] = mnt; - - do_umount( (char **const) argv, 3, fd ); - - close(fd); - -} - int get_magic_fd (char *data) { char *ptr; int fd; @@ -85,6 +48,7 @@ int get_magic_fd (char *data) { else return -1; } + int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data) { int fd = connect_socket(); @@ -122,35 +86,3 @@ int mount(const char *source, const char *target, const char *filesystemtype, return 0; } - -int execv( const char *path, char *const argv[] ) { - int fd; - - if( strstr( path, "fusermount" ) == NULL ) { - return execv( path, argv ); - } - - // also make sure this is an unmount . . . - int n = 0; - char *arg = argv[n]; - int found_u = 0; - while( arg != NULL ) { - if( strcmp( arg, "-u" ) == 0 ) { - found_u = 1; - break; - } - arg = argv[++n]; - } - - if( !found_u ) { - return execv( path, argv ); - } - - // Have root do any fusermounts we need done - fd = connect_socket(); - - do_umount( argv, n, fd ); - exit(0); - -} -