diff --git a/AUTHORS b/AUTHORS index 21ac53efec..6e0276e34c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -171,6 +171,7 @@ Patches have also been contributed by: Yufang Zhang <yuzhang@redhat.com> Supriya Kannery <supriyak@in.ibm.com> Dirk Herrendoerfer <d.herrendoerfer@herrendoerfer.name> + Taisuke Yamada <tai@rakugaki.org> [....send patches to get your name here....] diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index cfb691745f..c106b07f63 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -642,53 +642,45 @@ openvzWriteVPSConfigParam(int vpsid, const char *param, const char *value) /* * value will be freed before a new value is assigned to it, the caller is * responsible for freeing it afterwards. + * + * Returns <0 on error, 0 if not found, 1 if found. */ static int openvzReadConfigParam(const char *conf_file, const char *param, char **value) { char *line = NULL; size_t line_size = 0; - ssize_t ret; FILE *fp; - int found = 0; - char *sf, *token; - char *saveptr = NULL; - - value[0] = 0; + int err = 0; + char *sf, *token, *saveptr = NULL; fp = fopen(conf_file, "r"); if (fp == NULL) return -1; - while (1) { - ret = getline(&line, &line_size, fp); - if (ret <= 0) - break; + VIR_FREE(*value); + while (getline(&line, &line_size, fp) >= 0) { + if (! STREQLEN(line, param, strlen(param))) + continue; + + sf = line + strlen(param); + if (*sf++ != '=') continue; + saveptr = NULL; - if (STREQLEN(line, param, strlen(param))) { - sf = line; - sf += strlen(param); - if (sf[0] == '=' && sf[1] != '\0' ) { - sf++; - if ((token = strtok_r(sf,"\"\t\n", &saveptr)) != NULL) { - VIR_FREE(*value); - *value = strdup(token); - if (value == NULL) { - ret = -1; - break; - } - found = 1; - } + if ((token = strtok_r(sf, "\"\t\n", &saveptr)) != NULL) { + VIR_FREE(*value); + *value = strdup(token); + if (*value == NULL) { + err = 1; + break; } - } + /* keep going - last entry wins */ + } } VIR_FREE(line); VIR_FORCE_FCLOSE(fp); - if (ret == 0 && found) - ret = 1; - - return ret; + return err ? -1 : *value ? 1 : 0; } /*