/* * Tester for getopt_r */ #include #include #include "getopt.h" static void netstats_usage() { printf( "netstats [-vAimfpcut] where:\n" " -A print All statistics\n" " -i print Inet Routes\n" " -m print MBUF Statistics\n" " -f print IF Statistics\n" " -p print IP Statistics\n" " -c print ICMP Statistics\n" " -u print UDP Statistics\n" " -t print TCP Statistics\n" ); } int rtems_shell_main_netstats( int argc, char *argv[] ) { int option; int doAll = 0; int doInetRoutes = 0; int doMBUFStats = 0; int doIFStats = 0; int doIPStats = 0; int doICMPStats = 0; int doUDPStats = 0; int doTCPStats = 0; int verbose = 0; struct getopt_data getopt_reent = GETOPT_DATA_INITIALIZER; while ( (option = getopt_r( argc, argv, "Aimfpcutv", &getopt_reent)) != -1 ) { fprintf( stderr, "getopt returned %c\n", option ); switch ((char)option) { case 'A': doAll = 1; break; case 'i': doInetRoutes = 1; break; case 'm': doMBUFStats = 1; break; case 'f': doIFStats = 1; break; case 'p': doIPStats = 1; break; case 'c': doICMPStats = 1; break; case 'u': doUDPStats = 1; break; case 't': doTCPStats = 1; break; case 'v': verbose = 1; break; case '?': default: netstats_usage(); return -1; } } if ( verbose ) { printf( "doAll=%d\n" "doInetRoutes=%d\n" "doMBUFStats=%d\n" "doIFStats=%d\n" "doIPStats=%d\n" "doICMPStats=%d\n" "doUDPStats=%d\n" "doTCPStats=%d\n", doAll, doInetRoutes, doMBUFStats, doIFStats, doIPStats, doICMPStats, doUDPStats, doTCPStats ); } return 0; } void testit(const char *command) { char *c; int argc; char *argv[32]; extern int rtems_shell_make_args( char *commandLine, int *argc_p, char **argv_p, int max_args ); c = strdup(command); printf( "===================\n" ); printf( "COMMAND: %s\n", c ); rtems_shell_make_args( c, &argc, argv, 32 ); rtems_shell_main_netstats( argc, argv ); printf( "===================\n" ); free(c); } int main( int argc, char **argv ) { testit( "cmd -?" ); testit( "cmd -t -u -v" ); testit( "cmd -t -i -c extra1" ); }