if (!def->resource && startup) {
virDomainResourceDefPtr res;
- if (VIR_ALLOC(res) < 0) {
- virReportOOMError();
+ if (VIR_ALLOC(res) < 0)
goto cleanup;
- }
if (VIR_STRDUP(res->partition, "/machine") < 0) {
VIR_FREE(res);
if (STRNEQ(model, "none")) {
/* Allocate just the primary security driver for LXC. */
if (VIR_ALLOC(caps->host.secModels) < 0)
- goto no_memory;
+ goto error;
caps->host.nsecModels = 1;
if (VIR_STRDUP(caps->host.secModels[0].model, model) < 0)
goto error;
return caps;
-no_memory:
- virReportOOMError();
-
error:
virObjectUnref(caps);
return NULL;
VIR_FREE(buf);
cmd = v ? LINUX_REBOOT_CMD_CAD_ON : LINUX_REBOOT_CMD_CAD_OFF;
- if (VIR_ALLOC_N(stack, getpagesize() * 4) < 0) {
- virReportOOMError();
+ if (VIR_ALLOC_N(stack, getpagesize() * 4) < 0)
return -1;
- }
childStack = stack + (getpagesize() * 4);
for (i = 0; i < nveths; i++) {
if (virAsprintf(&newname, "eth%zu", i) < 0) {
- virReportOOMError();
rc = -1;
goto error_out;
}
if (!STRPREFIX(mntent.mnt_dir, prefix))
continue;
- if (VIR_REALLOC_N(mounts, nmounts+1) < 0) {
- virReportOOMError();
+ if (VIR_REALLOC_N(mounts, nmounts+1) < 0)
goto cleanup;
- }
if (VIR_STRDUP(mounts[nmounts], mntent.mnt_dir) < 0)
goto cleanup;
nmounts++;
}
if (virAsprintf(&dst, "%s/%s.root",
- LXC_STATE_DIR, def->name) < 0) {
- virReportOOMError();
+ LXC_STATE_DIR, def->name) < 0)
return -1;
- }
tmp = root->dst;
root->dst = dst;
goto err;
}
- if (virAsprintf(&oldroot, "%s/.oldroot", root->src) < 0) {
- virReportOOMError();
+ if (virAsprintf(&oldroot, "%s/.oldroot", root->src) < 0)
goto err;
- }
if (virFileMakePath(oldroot) < 0) {
virReportSystemError(errno,
}
/* Create a directory called 'new' in tmpfs */
- if (virAsprintf(&newroot, "%s/new", oldroot) < 0) {
- virReportOOMError();
+ if (virAsprintf(&newroot, "%s/new", oldroot) < 0)
goto err;
- }
if (virFileMakePath(newroot) < 0) {
virReportSystemError(errno,
for (i = 0; i < nttyPaths; i++) {
char *tty;
- if (virAsprintf(&tty, "/dev/tty%zu", i+1) < 0) {
- virReportOOMError();
+ if (virAsprintf(&tty, "/dev/tty%zu", i+1) < 0)
return -1;
- }
if (symlink(ttyPaths[i], tty) < 0) {
VIR_FREE(tty);
virReportSystemError(errno,
int ret = -1;
struct stat st;
- if (virAsprintf(&src, "%s%s", srcprefix, fs->src) < 0) {
- virReportOOMError();
+ if (virAsprintf(&src, "%s%s", srcprefix, fs->src) < 0)
goto cleanup;
- }
if (stat(fs->dst, &st) < 0) {
if (errno != ENOENT) {
/* First time around we use /etc/filesystems */
retry:
if (virAsprintf(&fslist, "/.oldroot%s",
- tryProc ? "/proc/filesystems" : "/etc/filesystems") < 0) {
- virReportOOMError();
+ tryProc ? "/proc/filesystems" : "/etc/filesystems") < 0)
goto cleanup;
- }
VIR_DEBUG("Open fslist %s", fslist);
if (!(fp = fopen(fslist, "r"))) {
char *src = NULL;
int ret = -1;
- if (virAsprintf(&src, "%s%s", srcprefix, fs->src) < 0) {
- virReportOOMError();
+ if (virAsprintf(&src, "%s%s", srcprefix, fs->src) < 0)
goto cleanup;
- }
ret = lxcContainerMountFSBlockHelper(fs, src);
char *data = NULL;
if (virAsprintf(&data,
- "size=%lldk%s", fs->usage, sec_mount_options) < 0) {
- virReportOOMError();
+ "size=%lldk%s", fs->usage, sec_mount_options) < 0)
goto cleanup;
- }
if (virFileMakePath(fs->dst) < 0) {
virReportSystemError(errno,
goto cleanup;
}
- if (virAsprintf(&src, "/.oldroot/%s", def->src) < 0) {
- virReportOOMError();
+ if (virAsprintf(&src, "/.oldroot/%s", def->src) < 0)
goto cleanup;
- }
- if (virAsprintf(&dst, "/dev/%s", def->dst) < 0) {
- virReportOOMError();
+ if (virAsprintf(&dst, "/dev/%s", def->dst) < 0)
goto cleanup;
- }
if (stat(src, &sb) < 0) {
virReportSystemError(errno,
mode_t mode;
if (virAsprintf(&dstdir, USB_DEVFS "/%03d",
- def->source.subsys.u.usb.bus) < 0) {
- virReportOOMError();
+ def->source.subsys.u.usb.bus) < 0)
goto cleanup;
- }
if (virAsprintf(&dstfile, "%s/%03d",
dstdir,
- def->source.subsys.u.usb.device) < 0) {
- virReportOOMError();
+ def->source.subsys.u.usb.device) < 0)
goto cleanup;
- }
- if (virAsprintf(&src, "/.oldroot/%s", dstfile) < 0) {
- virReportOOMError();
+ if (virAsprintf(&src, "/.oldroot/%s", dstfile) < 0)
goto cleanup;
- }
if (stat(src, &sb) < 0) {
virReportSystemError(errno,
goto cleanup;
}
- if (virAsprintf(&src, "/.oldroot/%s", dev) < 0) {
- virReportOOMError();
+ if (virAsprintf(&src, "/.oldroot/%s", dev) < 0)
goto cleanup;
- }
if (stat(src, &sb) < 0) {
virReportSystemError(errno,
goto cleanup;
}
- if (virAsprintf(&src, "/.oldroot/%s", dev) < 0) {
- virReportOOMError();
+ if (virAsprintf(&src, "/.oldroot/%s", dev) < 0)
goto cleanup;
- }
if (stat(src, &sb) < 0) {
virReportSystemError(errno,
if (STRPREFIX(tty, "/dev/pts/"))
tty += strlen("/dev/pts/");
if (virAsprintf(&ttyPath, "%s/%s.devpts/%s",
- LXC_STATE_DIR, vmDef->name, tty) < 0) {
- virReportOOMError();
+ LXC_STATE_DIR, vmDef->name, tty) < 0)
goto cleanup;
- }
} else if (VIR_STRDUP(ttyPath, "/dev/null") < 0) {
goto cleanup;
}
ttyPaths, nttyPaths, handshakefd};
/* allocate a stack for the container */
- if (VIR_ALLOC_N(stack, stacksize) < 0) {
- virReportOOMError();
+ if (VIR_ALLOC_N(stack, stacksize) < 0)
return -1;
- }
stacktop = stack + stacksize;
cflags = CLONE_NEWPID|CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|SIGCHLD;
virDomainXMLOptionPtr xmlopt = NULL;
char *configFile = NULL;
- if (VIR_ALLOC(ctrl) < 0) {
- virReportOOMError();
+ if (VIR_ALLOC(ctrl) < 0)
goto error;
- }
ctrl->timerShutdown = -1;
ctrl->firstClient = true;
static int virLXCControllerAddConsole(virLXCControllerPtr ctrl,
int hostFd)
{
- if (VIR_EXPAND_N(ctrl->consoles, ctrl->nconsoles, 1) < 0) {
- virReportOOMError();
+ if (VIR_EXPAND_N(ctrl->consoles, ctrl->nconsoles, 1) < 0)
return -1;
- }
ctrl->consoles[ctrl->nconsoles-1].server = ctrl->server;
ctrl->consoles[ctrl->nconsoles-1].hostFd = hostFd;
ctrl->consoles[ctrl->nconsoles-1].hostWatch = -1;
VIR_DEBUG("Saving loop fd %d", fd);
if (VIR_EXPAND_N(ctrl->loopDevFds, ctrl->nloopDevs, 1) < 0) {
VIR_FORCE_CLOSE(fd);
- virReportOOMError();
goto cleanup;
}
ctrl->loopDevFds[ctrl->nloopDevs - 1] = fd;
VIR_DEBUG("Saving loop fd %d", fd);
if (VIR_EXPAND_N(ctrl->loopDevFds, ctrl->nloopDevs, 1) < 0) {
VIR_FORCE_CLOSE(fd);
- virReportOOMError();
goto cleanup;
}
ctrl->loopDevFds[ctrl->nloopDevs - 1] = fd;
char *sockpath;
if (virAsprintf(&sockpath, "%s/%s.sock",
- LXC_STATE_DIR, ctrl->name) < 0) {
- virReportOOMError();
+ LXC_STATE_DIR, ctrl->name) < 0)
return -1;
- }
if (!(ctrl->server = virNetServerNew(0, 0, 0, 1,
-1, 0, false,
ctrl->def);
if (virAsprintf(&dev, "/%s/%s.dev",
- LXC_STATE_DIR, ctrl->def->name) < 0) {
- virReportOOMError();
+ LXC_STATE_DIR, ctrl->def->name) < 0)
goto cleanup;
- }
if (virFileMakePath(dev) < 0) {
virReportSystemError(errno,
*/
if (virAsprintf(&opts,
- "mode=755,size=65536%s", mount_options) < 0) {
- virReportOOMError();
+ "mode=755,size=65536%s", mount_options) < 0)
goto cleanup;
- }
VIR_DEBUG("Mount devfs on %s type=tmpfs flags=%x, opts=%s",
dev, MS_NOSUID, opts);
/* Populate /dev/ with a few important bits */
for (i = 0; i < ARRAY_CARDINALITY(devs); i++) {
if (virAsprintf(&path, "/%s/%s.dev/%s",
- LXC_STATE_DIR, ctrl->def->name, devs[i].path) < 0) {
- virReportOOMError();
+ LXC_STATE_DIR, ctrl->def->name, devs[i].path) < 0)
goto cleanup;
- }
dev_t dev = makedev(devs[i].maj, devs[i].min);
if (mknod(path, S_IFCHR, dev) < 0 ||
if ((virAsprintf(ttyName, "/dev/pts/%d", ptyno) < 0) ||
(virAsprintf(ttyHostPath, "/%s/%s.devpts/%d", LXC_STATE_DIR,
ctrl->def->name, ptyno) < 0)) {
- virReportOOMError();
errno = ENOMEM;
goto cleanup;
}
if (virAsprintf(&devpts, "%s/%s.devpts",
LXC_STATE_DIR, ctrl->def->name) < 0 ||
virAsprintf(&ctrl->devptmx, "%s/%s.devpts/ptmx",
- LXC_STATE_DIR, ctrl->def->name) < 0) {
- virReportOOMError();
+ LXC_STATE_DIR, ctrl->def->name) < 0)
goto cleanup;
- }
if (virFileMakePath(devpts) < 0) {
virReportSystemError(errno,
/* XXX should we support gid=X for X!=5 for distros which use
* a different gid for tty? */
if (virAsprintf(&opts, "newinstance,ptmxmode=0666,mode=0620,gid=5%s",
- (mount_options ? mount_options : "")) < 0) {
- virReportOOMError();
+ (mount_options ? mount_options : "")) < 0)
goto cleanup;
- }
VIR_DEBUG("Mount devpts on %s type=tmpfs flags=%x, opts=%s",
devpts, MS_NOSUID, opts);
size_t i;
virCgroupPtr cgroup = NULL;
- if (VIR_ALLOC_N(containerTTYPaths, ctrl->nconsoles) < 0) {
- virReportOOMError();
+ if (VIR_ALLOC_N(containerTTYPaths, ctrl->nconsoles) < 0)
goto cleanup;
- }
if (socketpair(PF_UNIX, SOCK_STREAM, 0, control) < 0) {
virReportSystemError(errno, "%s",
break;
case 'v':
- if (VIR_REALLOC_N(veths, nveths+1) < 0) {
- virReportOOMError();
+ if (VIR_REALLOC_N(veths, nveths+1) < 0)
goto cleanup;
- }
if (VIR_STRDUP(veths[nveths++], optarg) < 0)
goto cleanup;
break;
case 'c':
- if (VIR_REALLOC_N(ttyFDs, nttyFDs + 1) < 0) {
- virReportOOMError();
+ if (VIR_REALLOC_N(ttyFDs, nttyFDs + 1) < 0)
goto cleanup;
- }
if (virStrToLong_i(optarg, NULL, 10, &ttyFDs[nttyFDs++]) < 0) {
fprintf(stderr, "malformed --console argument '%s'", optarg);
goto cleanup;
}
if (virAsprintf(&vroot, "/proc/%llu/root",
- (unsigned long long)priv->initpid) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid) < 0)
goto cleanup;
- }
if (flags == 0 ||
(flags & VIR_DOMAIN_SHUTDOWN_INITCTL)) {
}
if (virAsprintf(&vroot, "/proc/%llu/root",
- (unsigned long long)priv->initpid) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid) < 0)
goto cleanup;
- }
if (flags == 0 ||
(flags & VIR_DOMAIN_REBOOT_INITCTL)) {
_("target %s already exists."), disk->dst);
return -1;
}
- if (virDomainDiskInsert(vmdef, disk)) {
- virReportOOMError();
+ if (virDomainDiskInsert(vmdef, disk))
return -1;
- }
/* vmdef has the pointer. Generic codes for vmdef will do all jobs */
dev->data.disk = NULL;
ret = 0;
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- if (virDomainNetInsert(vmdef, net) < 0) {
- virReportOOMError();
+ if (virDomainNetInsert(vmdef, net) < 0)
goto cleanup;
- }
dev->data.net = NULL;
ret = 0;
break;
_("device is already in the domain configuration"));
return -1;
}
- if (virDomainHostdevInsert(vmdef, hostdev) < 0) {
- virReportOOMError();
+ if (virDomainHostdevInsert(vmdef, hostdev) < 0)
return -1;
- }
dev->data.hostdev = NULL;
ret = 0;
break;
}
if (virAsprintf(&dst, "/proc/%llu/root/dev/%s",
- (unsigned long long)priv->initpid, def->dst) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid, def->dst) < 0)
goto cleanup;
- }
- if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0) {
- virReportOOMError();
+ if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0)
goto cleanup;
- }
mode = 0700;
if (S_ISCHR(sb.st_mode))
}
/* preallocate new slot for device */
- if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets+1) < 0) {
- virReportOOMError();
+ if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets+1) < 0)
return -1;
- }
/* If appropriate, grab a physical device from the configured
* network's pool of devices, or resolve bridge device name
}
if (virAsprintf(&vroot, "/proc/%llu/root",
- (unsigned long long)priv->initpid) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid) < 0)
goto cleanup;
- }
if (virAsprintf(&dstdir, "%s/dev/bus/%03d",
vroot,
- def->source.subsys.u.usb.bus) < 0) {
- virReportOOMError();
+ def->source.subsys.u.usb.bus) < 0)
goto cleanup;
- }
if (virAsprintf(&dstfile, "%s/%03d",
dstdir,
- def->source.subsys.u.usb.device) < 0) {
- virReportOOMError();
+ def->source.subsys.u.usb.device) < 0)
goto cleanup;
- }
if (virAsprintf(&src, "/dev/bus/usb/%03d/%03d",
def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device) < 0) {
- virReportOOMError();
+ def->source.subsys.u.usb.device) < 0)
goto cleanup;
- }
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
}
if (virAsprintf(&vroot, "/proc/%llu/root",
- (unsigned long long)priv->initpid) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid) < 0)
goto cleanup;
- }
if (virAsprintf(&dst, "%s/%s",
vroot,
- def->source.caps.u.storage.block) < 0) {
- virReportOOMError();
+ def->source.caps.u.storage.block) < 0)
goto cleanup;
- }
- if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs+1) < 0) {
- virReportOOMError();
+ if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs+1) < 0)
goto cleanup;
- }
if (lxcContainerSetupHostdevCapsMakePath(dst) < 0) {
virReportSystemError(errno,
}
if (virAsprintf(&vroot, "/proc/%llu/root",
- (unsigned long long)priv->initpid) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid) < 0)
goto cleanup;
- }
if (virAsprintf(&dst, "%s/%s",
vroot,
- def->source.caps.u.misc.chardev) < 0) {
- virReportOOMError();
+ def->source.caps.u.misc.chardev) < 0)
goto cleanup;
- }
- if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs+1) < 0) {
- virReportOOMError();
+ if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs+1) < 0)
goto cleanup;
- }
if (lxcContainerSetupHostdevCapsMakePath(dst) < 0) {
virReportSystemError(errno,
def = vm->def->disks[i];
if (virAsprintf(&dst, "/proc/%llu/root/dev/%s",
- (unsigned long long)priv->initpid, def->dst) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid, def->dst) < 0)
goto cleanup;
- }
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
}
if (virAsprintf(&vroot, "/proc/%llu/root",
- (unsigned long long)priv->initpid) < 0) {
- virReportOOMError();
+ (unsigned long long)priv->initpid) < 0)
goto cleanup;
- }
if (virAsprintf(&dst, "%s/dev/bus/usb/%03d/%03d",
vroot,
def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device) < 0) {
- virReportOOMError();
+ def->source.subsys.u.usb.device) < 0)
goto cleanup;
- }
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
if (virAsprintf(&dst, "/proc/%llu/root/%s",
(unsigned long long)priv->initpid,
- def->source.caps.u.storage.block) < 0) {
- virReportOOMError();
+ def->source.caps.u.storage.block) < 0)
goto cleanup;
- }
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
if (virAsprintf(&dst, "/proc/%llu/root/%s",
(unsigned long long)priv->initpid,
- def->source.caps.u.misc.chardev) < 0) {
- virReportOOMError();
+ def->source.caps.u.misc.chardev) < 0)
goto cleanup;
- }
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
virDomainDefPtr def = (virDomainDefPtr)context->private_data;
memset(stbuf, 0, sizeof(struct stat));
- if (virAsprintf(&mempath, "/proc/%s", path) < 0) {
- virReportOOMError();
+ if (virAsprintf(&mempath, "/proc/%s", path) < 0)
return -errno;
- }
res = 0;
struct fuse_context *context = NULL;
virDomainDefPtr def = NULL;
- if (virAsprintf(&hostpath, "/proc/%s", path) < 0) {
- virReportOOMError();
+ if (virAsprintf(&hostpath, "/proc/%s", path) < 0)
return -errno;
- }
context = fuse_get_context();
def = (virDomainDefPtr)context->private_data;
goto cleanup2;
if (virAsprintf(&fuse->mountpoint, "%s/%s.fuse/", LXC_STATE_DIR,
- def->name) < 0) {
- virReportOOMError();
+ def->name) < 0)
goto cleanup1;
- }
if (virFileMakePath(fuse->mountpoint) < 0) {
virReportSystemError(errno, _("Cannot create %s"),
if (virAsprintf(&sockpath, "%s/%s.sock",
socketdir, vm->def->name) < 0)
- goto no_memory;
+ goto error;
if (!(mon->client = virNetClientNewUNIX(sockpath, false, NULL)))
goto error;
VIR_FREE(sockpath);
return mon;
-no_memory:
- virReportOOMError();
error:
virObjectUnref(mon);
mon = NULL;
if (networkAllocateActualDevice(def->nets[i]) < 0)
goto cleanup;
- if (VIR_EXPAND_N(*veths, *nveths, 1) < 0) {
- virReportOOMError();
+ if (VIR_EXPAND_N(*veths, *nveths, 1) < 0)
goto cleanup;
- }
switch (virDomainNetGetActualType(def->nets[i])) {
case VIR_DOMAIN_NET_TYPE_NETWORK: {
int ret = -1;
if (virAsprintf(&path, "/proc/%llu/ns/%s",
- (unsigned long long)pid, nsname) < 0) {
- virReportOOMError();
+ (unsigned long long)pid, nsname) < 0)
goto cleanup;
- }
if (stat(path, &sb) < 0) {
virReportSystemError(errno,
return 0;
if (VIR_ALLOC(root) < 0)
- goto no_memory;
+ goto error;
root->type = VIR_DOMAIN_FS_TYPE_MOUNT;
VIR_STRDUP(root->dst, "/") < 0)
goto error;
- if (VIR_INSERT_ELEMENT_QUIET(vm->def->fss,
- 0,
- vm->def->nfss,
- root) < 0)
- goto no_memory;
+ if (VIR_INSERT_ELEMENT(vm->def->fss,
+ 0,
+ vm->def->nfss,
+ root) < 0)
+ goto error;
return 0;
-no_memory:
- virReportOOMError();
error:
virDomainFSDefFree(root);
return -1;
}
if (virAsprintf(&logfile, "%s/%s.log",
- driver->logDir, vm->def->name) < 0) {
- virReportOOMError();
+ driver->logDir, vm->def->name) < 0)
return -1;
- }
/* Do this up front, so any part of the startup process can add
* runtime state to vm->def that won't be persisted. This let's us
* and forward I/O between them.
*/
nttyFDs = vm->def->nconsoles;
- if (VIR_ALLOC_N(ttyFDs, nttyFDs) < 0) {
- virReportOOMError();
+ if (VIR_ALLOC_N(ttyFDs, nttyFDs) < 0)
goto cleanup;
- }
for (i = 0; i < vm->def->nconsoles; i++)
ttyFDs[i] = -1;
vm->def->consoles[i]->source.data.file.path = ttyPath;
VIR_FREE(vm->def->consoles[i]->info.alias);
- if (virAsprintf(&vm->def->consoles[i]->info.alias, "console%zu", i) < 0) {
- virReportOOMError();
+ if (virAsprintf(&vm->def->consoles[i]->info.alias, "console%zu", i) < 0)
goto cleanup;
- }
}
if (virLXCProcessSetupInterfaces(conn, vm->def, &nveths, &veths) < 0)
}
/* Log timestamp */
- if ((timestamp = virTimeStringNow()) == NULL) {
- virReportOOMError();
+ if ((timestamp = virTimeStringNow()) == NULL)
goto cleanup;
- }
if (safewrite(logfd, timestamp, strlen(timestamp)) < 0 ||
safewrite(logfd, START_POSTFIX, strlen(START_POSTFIX)) < 0) {
VIR_WARN("Unable to write timestamp to logfile: %s",