From: Isira Seneviratne Subject: [PATCH] ping: Implemented -n functionality. Message-Id: Date: Sat, 17 Feb 2018 10:44:11 +0530

From 11e36742f395e66b67c05f69af9f5fca44ade643 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Sat, 17 Feb 2018 10:22:55 +0530 Subject: [PATCH] ping: Implemented -n functionality. The program calls the Unix ping program with the passed parameters. Tested on Arch Linux. Signed-off-by: Isira Seneviratne --- programs/ping/ping_main.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/programs/ping/ping_main.c b/programs/ping/ping_main.c index 997d953d2e..f3eca93597 100644 --- a/programs/ping/ping_main.c +++ b/programs/ping/ping_main.c @@ -22,6 +22,7 @@ #include #include +#include #ifdef HAVE_UNISTD_H #include #endif @@ -45,8 +46,6 @@ int main(int argc, char** argv) unsigned int n = 0; int optc; - WINE_FIXME( "this command currently just sleeps based on -n parameter\n" ); - while ((optc = getopt( argc, argv, "n:w:tal:fi:v:r:s:j:k:" )) != -1) { switch(optc) @@ -70,7 +69,43 @@ int main(int argc, char** argv) } if (n != 0) - Sleep((n - 1) * 1000); + { + char *arg, **arg_ping, *str; + char ping[] = {'/','u','s','r','/','b','i','n','/','p','i','n','g', 0, 0}; + int len = 0, i; + for(i = 0; i < argc; i++) + len += strlen(argv[i])+1; + arg = calloc(len, sizeof(char)); + if(!arg) + { + printf("Unable to allocate memory for arg string.\n"); + return 1; + } + arg_ping = calloc(argc, sizeof(char*)); + if(!arg_ping) + { + printf("Unable to allocate memory for split arguments.\n"); + return 1; + } + for(i = 0; i < argc; i++) + { + strncat(arg, " ", 1); + if(!strcmp(argv[i], "-n")) + strncat(arg, "-c", 2); + else + strncat(arg, argv[i], strlen(argv[i])); + } + str = strtok(arg, " "); + i = 0; + while(str) + { + arg_ping[i++] = str; + str = strtok(NULL, " "); + } + _spawnvp(_P_OVERLAY, ping, arg_ping); + free(arg); + free(arg_ping); + } return 0; } -- 2.16.1