diff options
| author | Csaba Henk <csaba@redhat.com> | 2017-05-09 19:23:18 +0200 | 
|---|---|---|
| committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2017-05-23 13:21:20 +0000 | 
| commit | 98db583e9b2e7aa8e095a75a6bb5f42b0d65ae79 (patch) | |
| tree | 44b49138df370965ab948ff2b7c9326924f1a054 /libglusterfs/src/run.c | |
| parent | 02979e4663ea9e8a925f785f206d1dba02f253c4 (diff) | |
libglusterfs: extract some functionality to functions
- code in run.c to close all file descriptors,
  except for specified ones is extracted to
    int close_fds_except (int *fdv, size_t count);
- tokenizing and editing a string that consists
  of comma-separated tokens (as done eg. in
  mount_param_to_flag() of contrib/fuse/mount.c
  is abstacted into the following API:
    char *token_iter_init (char *str, char sep, token_iter_t *tit);
    gf_boolean_t next_token (char **tokenp, token_iter_t *tit);
    void drop_token (char *token, token_iter_t *tit);
Updates #153
Change-Id: I7cb5bda38f680f08882e2a7ef84f9142ffaa54eb
Signed-off-by: Csaba Henk <csaba@redhat.com>
Reviewed-on: https://review.gluster.org/17229
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'libglusterfs/src/run.c')
| -rw-r--r-- | libglusterfs/src/run.c | 35 | 
1 files changed, 3 insertions, 32 deletions
diff --git a/libglusterfs/src/run.c b/libglusterfs/src/run.c index ff587f7e4de..a7d98af502f 100644 --- a/libglusterfs/src/run.c +++ b/libglusterfs/src/run.c @@ -23,7 +23,6 @@  #include <assert.h>  #include <signal.h>  #include <sys/wait.h> -#include <sys/resource.h>  #include "syscall.h"  #ifdef RUN_STANDALONE @@ -274,37 +273,9 @@ runner_start (runner_t *runner)                  }                  if (ret != -1 ) { -#ifdef GF_LINUX_HOST_OS -                        DIR *d = NULL; -                        struct dirent *de = NULL; -                        struct dirent  scratch[2] = {{0,},}; -                        char *e = NULL; - -                        d = sys_opendir ("/proc/self/fd"); -                        if (d) { -                                for (;;) { -                                        errno = 0; -                                        de = sys_readdir (d, scratch); -                                        if (!de || errno != 0) -                                                break; -                                        i = strtoul (de->d_name, &e, 10); -                                        if (*e == '\0' && i > 2 && -                                            i != dirfd (d) && i != xpi[1]) -                                                sys_close (i); -                                } -                                sys_closedir (d); -                        } else -                                ret = -1; -#else /* !GF_LINUX_HOST_OS */ -                        struct rlimit rl; -                        ret = getrlimit (RLIMIT_NOFILE, &rl); -                        GF_ASSERT (ret == 0); - -                        for (i = 3; i < rl.rlim_cur; i++) { -                                if (i != xpi[1]) -                                        sys_close (i); -                        } -#endif /* !GF_LINUX_HOST_OS */ +                        int fdv[4] = {0, 1, 2, xpi[1]}; + +                        ret = close_fds_except(fdv, sizeof (fdv) / sizeof (*fdv));                  }                  if (ret != -1) {  | 
