1 /* $NetBSD: intr.c,v 1.2 2017/01/28 21:31:51 christos Exp $ */ 2 3 #include <config.h> 4 5 #include <krb5/getarg.h> 6 #include <krb5/roken.h> 7 #include <time.h> 8 9 static int help_flag; 10 static int timeout = 3; 11 12 static struct getargs args[] = { 13 { "help", 'h', arg_flag, &help_flag, NULL, NULL }, 14 { "timeout", 't', arg_integer, &timeout, NULL, NULL } 15 }; 16 17 static int nargs = sizeof(args) / sizeof(args[0]); 18 19 static time_t 20 handle_timeout(void *data) 21 { 22 static int killed; 23 24 if (!killed++) 25 return -1; /* kill it */ 26 return -2; /* stop waiting for it */ 27 } 28 29 static void 30 usage(int status) 31 { 32 arg_printusage(args, nargs, NULL, "command"); 33 exit(status); 34 } 35 36 37 int 38 main(int argc, char **argv) 39 { 40 int optidx = 0; 41 42 setprogname(argv[0]); 43 44 if (getarg(args, nargs, argc, argv, &optidx)) 45 usage(1); 46 47 if (help_flag) 48 usage(0); 49 50 argc -= optidx; 51 argv += optidx; 52 53 if (argc == 0) 54 usage(1); 55 56 return simple_execvp_timed(argv[0], argv, handle_timeout, NULL, 57 timeout); 58 } 59