提交 f5fb059a 编写于 作者: O Osier Yang

virsh: Don't motify the const string

This improve helper vshStringToArray to accept const string as
argument instead. To not convert the const string when using
vshStringToArray, and thus avoid motifying it.
上级 a3676b6c
......@@ -2336,8 +2336,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
/* list of volumes to remove along with this domain */
vshUndefineVolume *vlist = NULL;
int nvols = 0;
const char *volumes_arg = NULL;
char *volumes = NULL;
const char *volumes = NULL;
char **volume_tokens = NULL;
char *volume_tok = NULL;
int nvolume_tokens = 0;
......@@ -2352,8 +2351,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
int nvolumes = 0;
bool vol_not_found = false;
ignore_value(vshCommandOptString(cmd, "storage", &volumes_arg));
volumes = vshStrdup(ctl, volumes_arg);
ignore_value(vshCommandOptString(cmd, "storage", &volumes));
if (managed_save) {
flags |= VIR_DOMAIN_UNDEFINE_MANAGED_SAVE;
......@@ -2605,8 +2603,10 @@ cleanup:
}
VIR_FREE(vlist);
VIR_FREE(volumes);
VIR_FREE(volume_tokens);
if (volume_tokens) {
VIR_FREE(*volume_tokens);
VIR_FREE(volume_tokens);
}
VIR_FREE(def);
VIR_FREE(vol_nodes);
xmlFreeDoc(doc);
......
......@@ -854,7 +854,7 @@ cmdPoolList(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
char **poolTypes = NULL;
int npoolTypes = 0;
npoolTypes = vshStringToArray((char *)type, &poolTypes);
npoolTypes = vshStringToArray(type, &poolTypes);
for (i = 0; i < npoolTypes; i++) {
if ((poolType = virStoragePoolTypeFromString(poolTypes[i])) < 0) {
......@@ -895,7 +895,10 @@ cmdPoolList(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
break;
}
}
VIR_FREE(poolTypes);
if (poolTypes) {
VIR_FREE(*poolTypes);
VIR_FREE(poolTypes);
}
}
if (!(list = vshStoragePoolListCollect(ctl, flags)))
......
......@@ -174,19 +174,20 @@ vshPrettyCapacity(unsigned long long val, const char **unit)
* on error.
*/
int
vshStringToArray(char *str,
vshStringToArray(const char *str,
char ***array)
{
char *str_copied = vshStrdup(NULL, str);
char *str_tok = NULL;
unsigned int nstr_tokens = 0;
char **arr = NULL;
/* tokenize the string from user and save it's parts into an array */
if (str) {
if (str_copied) {
nstr_tokens = 1;
/* count the delimiters */
str_tok = str;
str_tok = str_copied;
while (*str_tok) {
if (*str_tok == ',')
nstr_tokens++;
......@@ -195,12 +196,13 @@ vshStringToArray(char *str,
if (VIR_ALLOC_N(arr, nstr_tokens) < 0) {
virReportOOMError();
VIR_FREE(str_copied);
return -1;
}
/* tokenize the input string */
nstr_tokens = 0;
str_tok = str;
str_tok = str_copied;
do {
arr[nstr_tokens] = strsep(&str_tok, ",");
nstr_tokens++;
......
......@@ -330,7 +330,7 @@ int vshAskReedit(vshControl *ctl, const char *msg);
int vshStreamSink(virStreamPtr st, const char *bytes, size_t nbytes,
void *opaque);
double vshPrettyCapacity(unsigned long long val, const char **unit);
int vshStringToArray(char *str, char ***array);
int vshStringToArray(const char *str, char ***array);
/* Typedefs, function prototypes for job progress reporting.
* There are used by some long lingering commands like
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册