goto snprintf_error;
}
- if (server->privileged)
- server->logDir = strdup (LOCAL_STATE_DIR "/log/libvirt");
- else
- virAsprintf(&server->logDir, "%s/.libvirt/log", dir_prefix);
+ if (server->privileged) {
+ if (!(server->logDir = strdup (LOCAL_STATE_DIR "/log/libvirt")))
+ virReportOOMError(NULL);
+ } else {
+ if (virAsprintf(&server->logDir, "%s/.libvirt/log", dir_prefix) < 0)
+ virReportOOMError(NULL);
+ }
if (server->logDir == NULL)
- virReportOOMError(NULL);
+ goto cleanup;
ret = 0;
}
if (macaddr) {
- virParseMacAddr((const char *)macaddr, def->mac);
+ if (virParseMacAddr((const char *)macaddr, def->mac) < 0) {
+ virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("unable to parse mac address '%s'"),
+ (const char *)macaddr);
+ goto error;
+ }
} else {
virCapabilitiesGenerateMac(caps, def->mac);
}
#ifdef __linux__
char *pidpath;
- virAsprintf(&pidpath, "/proc/%d/exe", obj->dnsmasqPid);
+ if (virAsprintf(&pidpath, "/proc/%d/exe", obj->dnsmasqPid) < 0) {
+ virReportOOMError(NULL);
+ goto cleanup;
+ }
if (virFileLinkPointsTo(pidpath, DNSMASQ) == 0)
obj->dnsmasqPid = -1;
VIR_FREE(pidpath);
}
}
+ cleanup:
virNetworkObjUnlock(obj);
}
}
for (i = 0 ; i < nkeywords ; i++) {
if (STREQ(keywords[i], "macaddr")) {
genmac = 0;
- virParseMacAddr(values[i], def->mac);
+ if (virParseMacAddr(values[i], def->mac) < 0) {
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("unable to parse mac address '%s'"),
+ values[i]);
+ virDomainNetDefFree(def);
+ def = NULL;
+ goto cleanup;
+ }
} else if (STREQ(keywords[i], "model")) {
def->model = values[i];
values[i] = NULL;
char *ptr = NULL;
int fd = 0;
- virRandomInitialize(time(NULL) ^ getpid());
-
fd = open(selinux_virtual_domain_context_path(), O_RDONLY);
if (fd < 0) {
virReportSystemError(conn, errno,
#include "storage_conf.h"
#include "util.h"
#include "memory.h"
+#include "logging.h"
#define VIR_FROM_THIS VIR_FROM_STORAGE
* that might be hanging around, so if this fails for some reason, the
* worst that happens is that scanning doesn't pick everything up
*/
- virRun(conn, scanprog, &exitstatus);
+ if (virRun(conn, scanprog, &exitstatus) < 0) {
+ VIR_WARN0("Failure when running vgscan to refresh physical volumes");
+ }
memset(&sourceList, 0, sizeof(sourceList));
sourceList.type = VIR_STORAGE_POOL_LOGICAL;
char* virFilePid(const char *dir, const char* name)
{
char *pidfile;
- virAsprintf(&pidfile, "%s/%s.pid", dir, name);
+ if (virAsprintf(&pidfile, "%s/%s.pid", dir, name) < 0)
+ return NULL;
return pidfile;
}
* If this fails for any reason, we still have the backup of polling for
* 5 seconds for device nodes.
*/
- virRun(conn, settleprog, &exitstatus);
+ if (virRun(conn, settleprog, &exitstatus) < 0)
+ {}
}
#else
void virFileWaitForDevices(virConnectPtr conn ATTRIBUTE_UNUSED) {}
VIR_EXEC_CLEAR_CAPS = (1 << 2),
};
-int virSetNonBlock(int fd);
-int virSetCloseExec(int fd);
+int virSetNonBlock(int fd) ATTRIBUTE_RETURN_CHECK;
+int virSetCloseExec(int fd) ATTRIBUTE_RETURN_CHECK;
/* This will execute in the context of the first child
* after fork() but before execve() */
int flags,
virExecHook hook,
void *data,
- char *pidfile);
+ char *pidfile) ATTRIBUTE_RETURN_CHECK;
int virExecWithHook(virConnectPtr conn,
const char *const*argv,
const char *const*envp,
int flags,
virExecHook hook,
void *data,
- char *pidfile);
+ char *pidfile) ATTRIBUTE_RETURN_CHECK;
int virExec(virConnectPtr conn,
const char *const*argv,
const char *const*envp,
int infd,
int *outfd,
int *errfd,
- int flags);
-int virRun(virConnectPtr conn, const char *const*argv, int *status);
+ int flags) ATTRIBUTE_RETURN_CHECK;
+int virRun(virConnectPtr conn, const char *const*argv, int *status) ATTRIBUTE_RETURN_CHECK;
-int virFileReadLimFD(int fd, int maxlen, char **buf);
+int virFileReadLimFD(int fd, int maxlen, char **buf) ATTRIBUTE_RETURN_CHECK;
-int virFileReadAll(const char *path, int maxlen, char **buf);
+int virFileReadAll(const char *path, int maxlen, char **buf) ATTRIBUTE_RETURN_CHECK;
-int virFileWriteStr(const char *path, const char *str);
+int virFileWriteStr(const char *path, const char *str) ATTRIBUTE_RETURN_CHECK;
int virFileMatchesNameSuffix(const char *file,
const char *name,
const char *suffix);
int virFileStripSuffix(char *str,
- const char *suffix);
+ const char *suffix) ATTRIBUTE_RETURN_CHECK;
int virFileLinkPointsTo(const char *checkLink,
const char *checkDest);
int virFileResolveLink(const char *linkpath,
- char **resultpath);
+ char **resultpath) ATTRIBUTE_RETURN_CHECK;
char *virFindFileInPath(const char *file);
int virFileExists(const char *path);
-int virFileMakePath(const char *path);
+int virFileMakePath(const char *path) ATTRIBUTE_RETURN_CHECK;
int virFileBuildPath(const char *dir,
const char *name,
const char *ext,
char *buf,
- unsigned int buflen);
+ unsigned int buflen) ATTRIBUTE_RETURN_CHECK;
int virFileAbsPath(const char *path,
- char **abspath);
+ char **abspath) ATTRIBUTE_RETURN_CHECK;
int virFileOpenTty(int *ttymaster,
char **ttyName,
char* virFilePid(const char *dir,
const char *name);
int virFileWritePidPath(const char *path,
- pid_t pid);
+ pid_t pid) ATTRIBUTE_RETURN_CHECK;
int virFileWritePid(const char *dir,
const char *name,
- pid_t pid);
+ pid_t pid) ATTRIBUTE_RETURN_CHECK;
int virFileReadPid(const char *dir,
const char *name,
- pid_t *pid);
+ pid_t *pid) ATTRIBUTE_RETURN_CHECK;
int virFileDeletePid(const char *dir,
const char *name);
void virSkipSpaces(const char **str);
int virParseNumber(const char **str);
int virAsprintf(char **strp, const char *fmt, ...)
- ATTRIBUTE_FMT_PRINTF(2, 3);
+ ATTRIBUTE_FMT_PRINTF(2, 3) ATTRIBUTE_RETURN_CHECK;
char *virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
ATTRIBUTE_RETURN_CHECK;
char *virStrcpy(char *dest, const char *src, size_t destbytes)
#define VIR_MAC_STRING_BUFLEN VIR_MAC_BUFLEN * 3
int virParseMacAddr(const char* str,
- unsigned char *addr);
+ unsigned char *addr) ATTRIBUTE_RETURN_CHECK;
void virFormatMacAddr(const unsigned char *addr,
char *str);
void virGenerateMacAddr(const unsigned char *prefix,
uid_t uid);
int virGetUserID(virConnectPtr conn,
const char *name,
- uid_t *uid);
+ uid_t *uid) ATTRIBUTE_RETURN_CHECK;
int virGetGroupID(virConnectPtr conn,
const char *name,
- gid_t *gid);
+ gid_t *gid) ATTRIBUTE_RETURN_CHECK;
#endif
-int virRandomInitialize(unsigned int seed);
+int virRandomInitialize(unsigned int seed) ATTRIBUTE_RETURN_CHECK;
int virRandom(int max);
#ifdef HAVE_MNTENT_H
MACAddress[4], MACAddress[5], MACAddress[6], MACAddress[7],
MACAddress[8], MACAddress[9], MACAddress[10], MACAddress[11]);
- virParseMacAddr(macaddr, def->nets[netAdpIncCnt]->mac);
+ /* XXX some real error handling here some day ... */
+ if (virParseMacAddr(macaddr, def->nets[netAdpIncCnt]->mac) < 0)
+ {}
netAdpIncCnt++;
static char *xenXMAutostartLinkName(virDomainPtr dom)
{
char *ret;
- virAsprintf(&ret, "/etc/xen/auto/%s", dom->name);
+ if (virAsprintf(&ret, "/etc/xen/auto/%s", dom->name) < 0)
+ return NULL;
return ret;
}
static char *xenXMDomainConfigName(virDomainPtr dom)
{
char *ret;
- virAsprintf(&ret, "/etc/xen/%s", dom->name);
+ if (virAsprintf(&ret, "/etc/xen/%s", dom->name) < 0)
+ return NULL;
return ret;
}
if (!abs_srcdir)
abs_srcdir = getcwd(cwd, sizeof(cwd));
- virRandomInitialize(0);
-
if ((driver.caps = testQemuCapsInit()) == NULL)
return EXIT_FAILURE;
if((driver.stateDir = strdup("/nowhere")) == NULL)