mirror of https://gitee.com/openkylin/libvirt.git
split out opening of the qemu logfile
This commit is contained in:
parent
261c3a8fd0
commit
4275be68fb
|
@ -1,3 +1,9 @@
|
||||||
|
Sun Jan 11 12:16:44 CET 2009 Guido Günther <agx@sigxcpu.org>
|
||||||
|
|
||||||
|
split out opening of the qemu logfile
|
||||||
|
* src/qemu_driver.c (qemudLogFD): new function
|
||||||
|
(qemudStartVMDaemon): call qemudLogFD
|
||||||
|
|
||||||
Fri Jan 9 18:29:11 GMT 2009 John Levon <levon@movementarian.org>
|
Fri Jan 9 18:29:11 GMT 2009 John Levon <levon@movementarian.org>
|
||||||
|
|
||||||
* src/logging.h: fix non-debug compile
|
* src/logging.h: fix non-debug compile
|
||||||
|
|
|
@ -143,6 +143,52 @@ static int qemudMonitorCommand (const virDomainObjPtr vm,
|
||||||
static struct qemud_driver *qemu_driver = NULL;
|
static struct qemud_driver *qemu_driver = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemudLogFD(virConnectPtr conn, const char* logDir, const char* name)
|
||||||
|
{
|
||||||
|
char logfile[PATH_MAX];
|
||||||
|
mode_t logmode;
|
||||||
|
uid_t uid = geteuid();
|
||||||
|
int fd = -1;
|
||||||
|
|
||||||
|
if ((strlen(logDir) + /* path */
|
||||||
|
1 + /* Separator */
|
||||||
|
strlen(name) + /* basename */
|
||||||
|
4 + /* suffix .log */
|
||||||
|
1 /* NULL */) > PATH_MAX) {
|
||||||
|
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("config file path too long: %s/%s.log"),
|
||||||
|
logDir, name);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(logfile, logDir);
|
||||||
|
strcat(logfile, "/");
|
||||||
|
strcat(logfile, name);
|
||||||
|
strcat(logfile, ".log");
|
||||||
|
|
||||||
|
logmode = O_CREAT | O_WRONLY;
|
||||||
|
if (uid != 0)
|
||||||
|
logmode |= O_TRUNC;
|
||||||
|
else
|
||||||
|
logmode |= O_APPEND;
|
||||||
|
if ((fd = open(logfile, logmode, S_IRUSR | S_IWUSR)) < 0) {
|
||||||
|
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("failed to create logfile %s: %s"),
|
||||||
|
logfile, strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (qemudSetCloseExec(fd) < 0) {
|
||||||
|
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("Unable to set VM logfile close-on-exec flag %s"),
|
||||||
|
strerror(errno));
|
||||||
|
close(fd);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
qemudAutostartConfigs(struct qemud_driver *driver) {
|
qemudAutostartConfigs(struct qemud_driver *driver) {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -892,15 +938,12 @@ static int qemudStartVMDaemon(virConnectPtr conn,
|
||||||
const char **argv = NULL, **tmp;
|
const char **argv = NULL, **tmp;
|
||||||
const char **progenv = NULL;
|
const char **progenv = NULL;
|
||||||
int i, ret;
|
int i, ret;
|
||||||
char logfile[PATH_MAX];
|
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
int *tapfds = NULL;
|
int *tapfds = NULL;
|
||||||
int ntapfds = 0;
|
int ntapfds = 0;
|
||||||
unsigned int qemuCmdFlags;
|
unsigned int qemuCmdFlags;
|
||||||
fd_set keepfd;
|
fd_set keepfd;
|
||||||
const char *emulator;
|
const char *emulator;
|
||||||
uid_t uid = geteuid();
|
|
||||||
mode_t logmode;
|
|
||||||
|
|
||||||
FD_ZERO(&keepfd);
|
FD_ZERO(&keepfd);
|
||||||
|
|
||||||
|
@ -922,21 +965,6 @@ static int qemudStartVMDaemon(virConnectPtr conn,
|
||||||
vm->def->graphics->data.vnc.port = port;
|
vm->def->graphics->data.vnc.port = port;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((strlen(driver->logDir) + /* path */
|
|
||||||
1 + /* Separator */
|
|
||||||
strlen(vm->def->name) + /* basename */
|
|
||||||
4 + /* suffix .log */
|
|
||||||
1 /* NULL */) > PATH_MAX) {
|
|
||||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("config file path too long: %s/%s.log"),
|
|
||||||
driver->logDir, vm->def->name);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
strcpy(logfile, driver->logDir);
|
|
||||||
strcat(logfile, "/");
|
|
||||||
strcat(logfile, vm->def->name);
|
|
||||||
strcat(logfile, ".log");
|
|
||||||
|
|
||||||
if (virFileMakePath(driver->logDir) < 0) {
|
if (virFileMakePath(driver->logDir) < 0) {
|
||||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||||
_("cannot create log directory %s: %s"),
|
_("cannot create log directory %s: %s"),
|
||||||
|
@ -944,25 +972,8 @@ static int qemudStartVMDaemon(virConnectPtr conn,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
logmode = O_CREAT | O_WRONLY;
|
if((vm->logfile = qemudLogFD(conn, driver->logDir, vm->def->name)) < 0)
|
||||||
if (uid != 0)
|
|
||||||
logmode |= O_TRUNC;
|
|
||||||
else
|
|
||||||
logmode |= O_APPEND;
|
|
||||||
if ((vm->logfile = open(logfile, logmode, S_IRUSR | S_IWUSR)) < 0) {
|
|
||||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("failed to create logfile %s: %s"),
|
|
||||||
logfile, strerror(errno));
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
if (qemudSetCloseExec(vm->logfile) < 0) {
|
|
||||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("Unable to set VM logfile close-on-exec flag %s"),
|
|
||||||
strerror(errno));
|
|
||||||
close(vm->logfile);
|
|
||||||
vm->logfile = -1;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
emulator = vm->def->emulator;
|
emulator = vm->def->emulator;
|
||||||
if (!emulator)
|
if (!emulator)
|
||||||
|
|
Loading…
Reference in New Issue