aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorOsier Yang <jyang@redhat.com>2012-09-15 00:21:07 +0800
committerOsier Yang <jyang@redhat.com>2012-09-17 11:29:31 +0800
commitf5fb059a78b5af08d91397565040fadc9eb37876 (patch)
tree78d069ba95a08d5411319be423ce6b40bef9b4db /tools
parentlist: Expose virConnectListAllNodeDevices to Python binding (diff)
downloadlibvirt-f5fb059a78b5af08d91397565040fadc9eb37876.tar.gz
libvirt-f5fb059a78b5af08d91397565040fadc9eb37876.tar.bz2
libvirt-f5fb059a78b5af08d91397565040fadc9eb37876.zip
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.
Diffstat (limited to 'tools')
-rw-r--r--tools/virsh-domain.c12
-rw-r--r--tools/virsh-pool.c7
-rw-r--r--tools/virsh.c10
-rw-r--r--tools/virsh.h2
4 files changed, 18 insertions, 13 deletions
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index c6695b351..887a1560d 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -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);
diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
index bc10f76ce..f15c573f1 100644
--- a/tools/virsh-pool.c
+++ b/tools/virsh-pool.c
@@ -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)))
diff --git a/tools/virsh.c b/tools/virsh.c
index 242f7892c..d0b302a53 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -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++;
diff --git a/tools/virsh.h b/tools/virsh.h
index 30eff4bf8..122007942 100644
--- a/tools/virsh.h
+++ b/tools/virsh.h
@@ -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