diff options
| author | Csaba Henk <csaba@gluster.com> | 2011-05-26 03:32:27 +0000 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2011-05-26 08:55:22 -0700 | 
| commit | 9072b817b0803f999081c6244b18a9ae8fb0234c (patch) | |
| tree | 919d47d2ea6d42975dac3dd9293f925d6e7849e6 /cli/src/cli-cmd-volume.c | |
| parent | 302ad26982d1eb7762e743e14dda627ffb317379 (diff) | |
reimplement invocation of external programs with run API
Signed-off-by: Csaba Henk <csaba@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 2562 (invoke external commands precisely with fork + exec)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2562
Diffstat (limited to 'cli/src/cli-cmd-volume.c')
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 37 | 
1 files changed, 9 insertions, 28 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 7ca9ed4bb2f..f2edbd0b1fa 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -32,6 +32,7 @@  #include "cli-cmd.h"  #include "cli-mem-types.h"  #include "cli1-xdr.h" +#include "run.h"  extern struct rpc_clnt *global_rpc; @@ -1053,30 +1054,10 @@ out:  static int  cli_check_gsync_present ()  { -        FILE                *in = NULL;          char                buff[PATH_MAX] = {0, }; -        char                cmd[PATH_MAX + 256] = {0, }; +        runner_t            runner = {0,};          char                *ptr = NULL;          int                 ret = 0; -        struct stat         stat_buff; - -        if (strlen (GSYNCD_PREFIX)+1 > PATH_MAX-strlen("/gsyncd")) { -                ret = -1; -                goto out; -        } - -        ret = snprintf (cmd, sizeof(cmd), GSYNCD_PREFIX "/gsyncd"); -        if (ret < 0) { -               ret = 0; -               goto out; -        } -        ret = lstat (cmd, &stat_buff); - -        if (ret || !(stat_buff.st_mode & S_IXUSR)) { -                ret = -1; -                gf_log ("", GF_LOG_INFO, "geo-replication not installed"); -                goto out; -        }          ret = setenv ("_GLUSTERD_CALLED_", "1", 1);          if (-1 == ret) { @@ -1085,16 +1066,16 @@ cli_check_gsync_present ()                  goto out;          } -        memset (cmd, 0, sizeof (cmd)); -        ret = snprintf (cmd, sizeof(cmd), GSYNCD_PREFIX"/gsyncd --version"); - -        if (!(in = popen(cmd, "r"))) { -                ret = -1; +        runinit (&runner); +        runner_add_args (&runner, GSYNCD_PREFIX"/gsyncd", "--version", NULL); +        runner_redir (&runner, STDOUT_FILENO, RUN_PIPE); +        ret = runner_start (&runner); +        if (ret == -1) {                  gf_log ("", GF_LOG_INFO, "geo-replication not installed");                  goto out;          } -        ptr = fgets(buff, sizeof(buff), in); +        ptr = fgets(buff, sizeof(buff), runner_chio (&runner, STDOUT_FILENO));          if (ptr) {                  if (!strstr (buff, "gsyncd")) {                          ret  = -1; @@ -1105,7 +1086,7 @@ cli_check_gsync_present ()                  goto out;          } -        ret = pclose (in); +        ret = runner_end (&runner);          if (ret)                  gf_log ("", GF_LOG_ERROR, "geo-replication not installed");  | 
