diff options
| author | Pranith Kumar K <pranithk@gluster.com> | 2012-11-06 12:19:47 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2012-11-23 23:13:39 -0800 | 
| commit | 76a4afec6e03d15cb442e819f6fe7b94d6f9f487 (patch) | |
| tree | 2b98adca7a192a31e21e6b2d4965aaa80d16403b /libglusterfs/src | |
| parent | 6dee0e3d99dd3423edc6ad2981733fac3ef8c67d (diff) | |
libglusterfs: Implement float percentage
Change-Id: Ia7ea63471f0bbd74686873f5f6f183475880f1a0
BUG: 839595
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.org/4162
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/common-utils.c | 7 | ||||
| -rw-r--r-- | libglusterfs/src/common-utils.h | 2 | ||||
| -rw-r--r-- | libglusterfs/src/options.c | 35 | ||||
| -rw-r--r-- | libglusterfs/src/options.h | 8 | 
4 files changed, 27 insertions, 25 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index bf1f03a9a4b..8c18b91a7b4 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -676,11 +676,10 @@ gf_string2time (const char *str, uint32_t *n)          return 0;  } -  int -gf_string2percent (const char *str, uint32_t *n) +gf_string2percent (const char *str, double *n)  { -        unsigned long value = 0; +        double value = 0;          char *tail = NULL;          int old_errno = 0;          const char *s = NULL; @@ -701,7 +700,7 @@ gf_string2percent (const char *str, uint32_t *n)          old_errno = errno;          errno = 0; -        value = strtol (str, &tail, 0); +        value = strtod (str, &tail);          if (errno == ERANGE || errno == EINVAL)                  return -1; diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 56483984dc3..183837b9650 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -509,7 +509,7 @@ int gf_string2percent_or_bytesize (const char *str, uint64_t *n,  				   gf_boolean_t *is_percent);  int gf_string2boolean (const char *str, gf_boolean_t *b); -int gf_string2percent (const char *str, uint32_t *n); +int gf_string2percent (const char *str, double *n);  int gf_string2time (const char *str, uint32_t *n);  int gf_lockfd (int fd); diff --git a/libglusterfs/src/options.c b/libglusterfs/src/options.c index 6fa11283d41..f8ebb94c6d7 100644 --- a/libglusterfs/src/options.c +++ b/libglusterfs/src/options.c @@ -53,7 +53,6 @@ out:          return ret;  } -  static int  xlator_option_validate_int (xlator_t *xl, const char *key, const char *value,                              volume_option_t *opt, char **op_errstr) @@ -298,10 +297,9 @@ static int  xlator_option_validate_percent (xlator_t *xl, const char *key, const char *value,                                  volume_option_t *opt, char **op_errstr)  { -        int          ret = -1; -        char         errstr[256]; -        uint32_t     percent = 0; - +        double    percent = 0; +        int       ret = -1; +        char      errstr[256];          /* Check if the value is valid percentage */          if (gf_string2percent (value, &percent) != 0) { @@ -312,9 +310,9 @@ xlator_option_validate_percent (xlator_t *xl, const char *key, const char *value                  goto out;          } -        if ((percent < 0) || (percent > 100)) { +        if ((percent < 0.0) || (percent > 100.0)) {                  snprintf (errstr, 256, -                          "'%d' in 'option %s %s' is out of range [0 - 100]", +                          "'%lf' in 'option %s %s' is out of range [0 - 100]",                            percent, key, value);                  gf_log (xl->name, GF_LOG_ERROR, "%s", errstr);                  goto out; @@ -1043,19 +1041,24 @@ xl_by_name (char *in, xlator_t **out)  static int -pc_or_size (char *in, uint64_t *out) +pc_or_size (char *in, double *out)  { -        uint32_t  pc = 0; +        double  pc = 0;          int       ret = 0; +        uint64_t  size = 0;          if (gf_string2percent (in, &pc) == 0) { -                if (pc > 100) { -                        ret = gf_string2bytesize (in, out); +                if (pc > 100.0) { +                        ret = gf_string2bytesize (in, &size); +                        if (!ret) +                                *out = size;                  } else {                          *out = pc;                  }          } else { -                ret = gf_string2bytesize (in, out); +                ret = gf_string2bytesize (in, &size); +                if (!ret) +                        *out = size;          }          return ret;  } @@ -1067,8 +1070,8 @@ DEFINE_INIT_OPT(int64_t, int64, gf_string2int64);  DEFINE_INIT_OPT(uint32_t, uint32, gf_string2uint32);  DEFINE_INIT_OPT(int32_t, int32, gf_string2int32);  DEFINE_INIT_OPT(uint64_t, size, gf_string2bytesize); -DEFINE_INIT_OPT(uint32_t, percent, gf_string2percent); -DEFINE_INIT_OPT(uint64_t, percent_or_size, pc_or_size); +DEFINE_INIT_OPT(double, percent, gf_string2percent); +DEFINE_INIT_OPT(double, percent_or_size, pc_or_size);  DEFINE_INIT_OPT(gf_boolean_t, bool, gf_string2boolean);  DEFINE_INIT_OPT(xlator_t *, xlator, xl_by_name);  DEFINE_INIT_OPT(char *, path, pass); @@ -1082,8 +1085,8 @@ DEFINE_RECONF_OPT(int64_t, int64, gf_string2int64);  DEFINE_RECONF_OPT(uint32_t, uint32, gf_string2uint32);  DEFINE_RECONF_OPT(int32_t, int32, gf_string2int32);  DEFINE_RECONF_OPT(uint64_t, size, gf_string2bytesize); -DEFINE_RECONF_OPT(uint32_t, percent, gf_string2percent); -DEFINE_RECONF_OPT(uint64_t, percent_or_size, pc_or_size); +DEFINE_RECONF_OPT(double, percent, gf_string2percent); +DEFINE_RECONF_OPT(double, percent_or_size, pc_or_size);  DEFINE_RECONF_OPT(gf_boolean_t, bool, gf_string2boolean);  DEFINE_RECONF_OPT(xlator_t *, xlator, xl_by_name);  DEFINE_RECONF_OPT(char *, path, pass); diff --git a/libglusterfs/src/options.h b/libglusterfs/src/options.h index 309a9ab9a5d..64c2c64ef59 100644 --- a/libglusterfs/src/options.h +++ b/libglusterfs/src/options.h @@ -105,8 +105,8 @@ DECLARE_INIT_OPT(int64_t, int64);  DECLARE_INIT_OPT(uint32_t, uint32);  DECLARE_INIT_OPT(int32_t, int32);  DECLARE_INIT_OPT(uint64_t, size); -DECLARE_INIT_OPT(uint32_t, percent); -DECLARE_INIT_OPT(uint64_t, percent_or_size); +DECLARE_INIT_OPT(double, percent); +DECLARE_INIT_OPT(double, percent_or_size);  DECLARE_INIT_OPT(gf_boolean_t, bool);  DECLARE_INIT_OPT(xlator_t *, xlator);  DECLARE_INIT_OPT(char *, path); @@ -185,8 +185,8 @@ DECLARE_RECONF_OPT(int64_t, int64);  DECLARE_RECONF_OPT(uint32_t, uint32);  DECLARE_RECONF_OPT(int32_t, int32);  DECLARE_RECONF_OPT(uint64_t, size); -DECLARE_RECONF_OPT(uint32_t, percent); -DECLARE_RECONF_OPT(uint64_t, percent_or_size); +DECLARE_RECONF_OPT(double, percent); +DECLARE_RECONF_OPT(double, percent_or_size);  DECLARE_RECONF_OPT(gf_boolean_t, bool);  DECLARE_RECONF_OPT(xlator_t *, xlator);  DECLARE_RECONF_OPT(char *, path);  | 
