X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sources%2Fmylschroot.c;h=f82e2f99928212e434a089bc5b5631741b342dee;hp=9d4d705af845483aa0cfbf06ef4b082c4d367f11;hb=HEAD;hpb=da88189d1ab4d9220496cadb1274a70f6fb96fa0 diff --git a/sources/mylschroot.c b/sources/mylschroot.c index 9d4d705..f82e2f9 100644 --- a/sources/mylschroot.c +++ b/sources/mylschroot.c @@ -18,39 +18,43 @@ */ /***************************************************************************** * - * File myls.c: An example ls done after a chroot + * File mylschroot.c: An example ls done after a chroot + * List files and their size inside a given directory inside a chroot * * Author: S. Piccardi Mar. 2005 * - * $Id$ - * *****************************************************************************/ -#include -#include -#include /* directory */ -#include /* C standard library */ -#include +/* + * Include needed headers + */ +#include /* primitive system data types */ +#include /* file characteristics constants and functions */ +#include /* directory operation constants and functions */ +#include /* C standard library */ +#include /* unix standard library */ #include "Gapil.h" -/* - * Program myls - * - * List files and their size inside a given directory + +/* + * Function and globals definitions */ -/* Help printing routine */ -void usage(void); -/* computation function for DirScan */ -int do_ls(struct dirent * direntry); +void usage(void); /* Help printing routine */ +int do_ls(struct dirent * direntry); /* computation function for dir_scan */ +/* + * Main program + */ int main(int argc, char *argv[]) { int i; + char * arg[]={"ls","-l", NULL}; + struct stat data; /* * Input section: decode command line parameters * Use getopt function */ opterr = 0; /* don't want writing to stderr */ - while ( (i = getopt(argc, argv, "hs:l:wrbf")) != -1) { + while ( (i = getopt(argc, argv, "h")) != -1) { switch (i) { /* * Handling options @@ -78,15 +82,26 @@ int main(int argc, char *argv[]) printf("Wrong number of arguments %d\n", argc - optind); usage(); } + printf("Chrooting to %s\n", argv[1]); if (chroot(argv[1])) { perror("Chroot fail"); } - DirScan("/", do_ls); + + if (execve("/ls", arg, NULL)) { + perror("errore in execve"); + } + if (stat("/ls", &data)) { + perror("errore in stat"); + } else { + printf("inode: %d\n", data.st_ino); + } + dir_scan("/", do_ls); + exit(0); } /* - * Routine to print file name and size inside DirScan + * Routine to print file name and size inside dir_scan */ int do_ls(struct dirent * direntry) { @@ -99,7 +114,7 @@ int do_ls(struct dirent * direntry) * routine to print usage info and exit */ void usage(void) { - printf("Program myls: list file in a directory \n"); + printf("Program mylschroot: chroot in a directory and list files \n"); printf("Usage:\n"); printf(" myls [-h] dirname \n"); printf(" -h print this help\n");