mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-23 11:52:20 +00:00
Use virFileReadAll in virsh.c
This commit is contained in:
parent
53365f4c54
commit
45738083a6
@ -1,3 +1,10 @@
|
|||||||
|
Mon Jan 21 10:25:04 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
* src/util.c, src/util.h: Rename virFileReadAll to __virFileReadAll,
|
||||||
|
and add macro for compat
|
||||||
|
* src/libvirt_sym.version: Export __virFileReadAll
|
||||||
|
* src/virsh.c: Use virFileReadAll for loading XML files
|
||||||
|
|
||||||
Mon Jan 21 10:12:04 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Mon Jan 21 10:12:04 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* src/openvz_driver.c: Remove no-op networking APIs
|
* src/openvz_driver.c: Remove no-op networking APIs
|
||||||
|
@ -131,5 +131,7 @@
|
|||||||
__virDomainMigratePerform;
|
__virDomainMigratePerform;
|
||||||
__virDomainMigrateFinish;
|
__virDomainMigrateFinish;
|
||||||
|
|
||||||
|
__virFileReadAll;
|
||||||
|
|
||||||
local: *;
|
local: *;
|
||||||
};
|
};
|
||||||
|
@ -316,7 +316,7 @@ ssize_t safewrite(int fd, const void *buf, size_t count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int virFileReadAll(const char *path,
|
int __virFileReadAll(const char *path,
|
||||||
int maxlen,
|
int maxlen,
|
||||||
char **buf)
|
char **buf)
|
||||||
{
|
{
|
||||||
|
@ -33,9 +33,10 @@ int virRun(virConnectPtr conn, char **argv, int *status);
|
|||||||
int saferead(int fd, void *buf, size_t count);
|
int saferead(int fd, void *buf, size_t count);
|
||||||
ssize_t safewrite(int fd, const void *buf, size_t count);
|
ssize_t safewrite(int fd, const void *buf, size_t count);
|
||||||
|
|
||||||
int virFileReadAll(const char *path,
|
int __virFileReadAll(const char *path,
|
||||||
int maxlen,
|
int maxlen,
|
||||||
char **buf);
|
char **buf);
|
||||||
|
#define virFileReadAll(p,m,b) __virFileReadAll((p),(m),(b))
|
||||||
|
|
||||||
int virFileMatchesNameSuffix(const char *file,
|
int virFileMatchesNameSuffix(const char *file,
|
||||||
const char *name,
|
const char *name,
|
||||||
|
87
src/virsh.c
87
src/virsh.c
@ -48,6 +48,7 @@
|
|||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
static char *progname;
|
static char *progname;
|
||||||
|
|
||||||
@ -56,6 +57,8 @@ static char *progname;
|
|||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define VIRSH_MAX_XML_FILE 10*1024*1024
|
||||||
|
|
||||||
#define VSH_PROMPT_RW "virsh # "
|
#define VSH_PROMPT_RW "virsh # "
|
||||||
#define VSH_PROMPT_RO "virsh > "
|
#define VSH_PROMPT_RO "virsh > "
|
||||||
|
|
||||||
@ -858,66 +861,6 @@ static vshCmdOptDef opts_create[] = {
|
|||||||
{NULL, 0, 0, NULL}
|
{NULL, 0, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Read in a whole file and return it as a string.
|
|
||||||
* If it fails, it logs an error and returns NULL.
|
|
||||||
* String must be freed by caller.
|
|
||||||
*/
|
|
||||||
static char *
|
|
||||||
readFile (vshControl *ctl, const char *filename)
|
|
||||||
{
|
|
||||||
char *retval;
|
|
||||||
int len = 0, fd;
|
|
||||||
|
|
||||||
if ((fd = open(filename, O_RDONLY)) == -1) {
|
|
||||||
vshError (ctl, FALSE, _("Failed to open '%s': %s"),
|
|
||||||
filename, strerror (errno));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(retval = malloc(len + 1)))
|
|
||||||
goto out_of_memory;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
char buffer[1024];
|
|
||||||
char *new;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if ((ret = read(fd, buffer, sizeof(buffer))) == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ret == -1) {
|
|
||||||
if (errno == EINTR)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
vshError (ctl, FALSE, _("Failed to open '%s': read: %s"),
|
|
||||||
filename, strerror (errno));
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(new = realloc(retval, len + ret + 1)))
|
|
||||||
goto out_of_memory;
|
|
||||||
|
|
||||||
retval = new;
|
|
||||||
|
|
||||||
memcpy(retval + len, buffer, ret);
|
|
||||||
len += ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
retval[len] = '\0';
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
out_of_memory:
|
|
||||||
vshError (ctl, FALSE, _("Error allocating memory: %s"),
|
|
||||||
strerror(errno));
|
|
||||||
|
|
||||||
error:
|
|
||||||
if (retval)
|
|
||||||
free(retval);
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
cmdCreate(vshControl * ctl, vshCmd * cmd)
|
cmdCreate(vshControl * ctl, vshCmd * cmd)
|
||||||
{
|
{
|
||||||
@ -934,8 +877,8 @@ cmdCreate(vshControl * ctl, vshCmd * cmd)
|
|||||||
if (!found)
|
if (!found)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
buffer = readFile (ctl, from);
|
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
|
||||||
if (buffer == NULL) return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
dom = virDomainCreateLinux(ctl->conn, buffer, 0);
|
dom = virDomainCreateLinux(ctl->conn, buffer, 0);
|
||||||
free (buffer);
|
free (buffer);
|
||||||
@ -982,8 +925,8 @@ cmdDefine(vshControl * ctl, vshCmd * cmd)
|
|||||||
if (!found)
|
if (!found)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
buffer = readFile (ctl, from);
|
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
|
||||||
if (buffer == NULL) return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
dom = virDomainDefineXML(ctl->conn, buffer);
|
dom = virDomainDefineXML(ctl->conn, buffer);
|
||||||
free (buffer);
|
free (buffer);
|
||||||
@ -2372,8 +2315,8 @@ cmdNetworkCreate(vshControl * ctl, vshCmd * cmd)
|
|||||||
if (!found)
|
if (!found)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
buffer = readFile (ctl, from);
|
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
|
||||||
if (buffer == NULL) return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
network = virNetworkCreateXML(ctl->conn, buffer);
|
network = virNetworkCreateXML(ctl->conn, buffer);
|
||||||
free (buffer);
|
free (buffer);
|
||||||
@ -2420,8 +2363,8 @@ cmdNetworkDefine(vshControl * ctl, vshCmd * cmd)
|
|||||||
if (!found)
|
if (!found)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
buffer = readFile (ctl, from);
|
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
|
||||||
if (buffer == NULL) return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
network = virNetworkDefineXML(ctl->conn, buffer);
|
network = virNetworkDefineXML(ctl->conn, buffer);
|
||||||
free (buffer);
|
free (buffer);
|
||||||
@ -3107,8 +3050,8 @@ cmdAttachDevice(vshControl * ctl, vshCmd * cmd)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = readFile (ctl, from);
|
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
|
||||||
if (buffer == NULL) return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
ret = virDomainAttachDevice(dom, buffer);
|
ret = virDomainAttachDevice(dom, buffer);
|
||||||
free (buffer);
|
free (buffer);
|
||||||
@ -3161,8 +3104,8 @@ cmdDetachDevice(vshControl * ctl, vshCmd * cmd)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = readFile (ctl, from);
|
if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
|
||||||
if (buffer == NULL) return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
ret = virDomainDetachDevice(dom, buffer);
|
ret = virDomainDetachDevice(dom, buffer);
|
||||||
free (buffer);
|
free (buffer);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user