src: Make virStr*cpy*() functions return an int

Currently, the functions return a pointer to the
destination buffer on success or NULL on failure.

Not only does this kind of error handling look quite
alien in the context of libvirt, where most functions
return zero on success and a negative int on failure,
but it's also somewhat pointless because unless there's
been a failure the returned pointer will be the same
one passed in by the user, thus offering no additional
value.

Change the functions so that they return an int
instead.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
Andrea Bolognani 2018-07-20 09:50:37 +02:00
parent 583bdfa65c
commit 6c0d0210cb
41 changed files with 113 additions and 115 deletions

View File

@ -1134,7 +1134,7 @@
respectively. The last argument is the number of bytes respectively. The last argument is the number of bytes
available in the destination string; if a copy of the source available in the destination string; if a copy of the source
string (including a \0) will not fit into the destination, no string (including a \0) will not fit into the destination, no
bytes are copied and the routine returns NULL. Otherwise, n bytes are copied and the routine returns &lt;0. Otherwise, n
bytes from the source are copied into the destination and a bytes from the source are copied into the destination and a
trailing \0 is appended. trailing \0 is appended.
</p> </p>

View File

@ -1262,7 +1262,7 @@ virCapabilitiesGetNodeInfo(virNodeInfoPtr nodeinfo)
memset(nodeinfo, 0, sizeof(*nodeinfo)); memset(nodeinfo, 0, sizeof(*nodeinfo));
if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL) if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) < 0)
return -1; return -1;
if (virHostMemGetInfo(&memorybytes, NULL) < 0) if (virHostMemGetInfo(&memorybytes, NULL) < 0)

View File

@ -134,7 +134,7 @@ virNetDevVPortProfileParse(xmlNodePtr node, unsigned int flags)
} }
if (virtPortProfileID && if (virtPortProfileID &&
!virStrcpyStatic(virtPort->profileID, virtPortProfileID)) { virStrcpyStatic(virtPort->profileID, virtPortProfileID) < 0) {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
_("profileid parameter too long")); _("profileid parameter too long"));
goto error; goto error;

View File

@ -966,7 +966,7 @@ ipsetValidator(enum attrDatatype datatype ATTRIBUTE_UNUSED,
{ {
const char *errmsg = NULL; const char *errmsg = NULL;
if (virStrcpyStatic(item->u.ipset.setname, val->c) == NULL) { if (virStrcpyStatic(item->u.ipset.setname, val->c) < 0) {
errmsg = _("ipset name is too long"); errmsg = _("ipset name is too long");
goto arg_err_exit; goto arg_err_exit;
} }

View File

@ -914,8 +914,8 @@ esxConnectOpen(virConnectPtr conn, virConnectAuthPtr auth,
goto cleanup; goto cleanup;
} }
if (!virStrcpyStatic(vCenterIPAddress, if (virStrcpyStatic(vCenterIPAddress,
potentialVCenterIPAddress)) { potentialVCenterIPAddress) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("vCenter IP address %s too big for destination"), _("vCenter IP address %s too big for destination"),
potentialVCenterIPAddress); potentialVCenterIPAddress);
@ -1317,7 +1317,7 @@ esxNodeGetInfo(virConnectPtr conn, virNodeInfoPtr nodeinfo)
++ptr; ++ptr;
} }
if (!virStrcpyStatic(nodeinfo->model, dynamicProperty->val->string)) { if (virStrcpyStatic(nodeinfo->model, dynamicProperty->val->string) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("CPU Model %s too long for destination"), _("CPU Model %s too long for destination"),
dynamicProperty->val->string); dynamicProperty->val->string);

View File

@ -185,7 +185,7 @@ esxVI_CURL_Debug(CURL *curl ATTRIBUTE_UNUSED, curl_infotype type,
if (VIR_ALLOC_N(buffer, size + 1) < 0) if (VIR_ALLOC_N(buffer, size + 1) < 0)
return 0; return 0;
if (!virStrncpy(buffer, info, size, size + 1)) { if (virStrncpy(buffer, info, size, size + 1) < 0) {
VIR_FREE(buffer); VIR_FREE(buffer);
return 0; return 0;
} }

View File

@ -1491,7 +1491,7 @@ esxVI_DateTime_ConvertToCalendarTime(esxVI_DateTime *dateTime,
return -1; return -1;
} }
if (!virStrcpyStatic(value, dateTime->value)) { if (virStrcpyStatic(value, dateTime->value) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("xsd:dateTime value '%s' too long for destination"), _("xsd:dateTime value '%s' too long for destination"),
dateTime->value); dateTime->value);

View File

@ -307,7 +307,7 @@ hypervNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
} }
/* Fill struct */ /* Fill struct */
if (virStrcpyStatic(info->model, processorList->data.common->Name) == NULL) { if (virStrcpyStatic(info->model, processorList->data.common->Name) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("CPU model %s too long for destination"), _("CPU model %s too long for destination"),
processorList->data.common->Name); processorList->data.common->Name);

View File

@ -2365,7 +2365,7 @@ libxlDriverNodeGetInfo(libxlDriverPrivatePtr driver, virNodeInfoPtr info)
goto cleanup; goto cleanup;
} }
if (virStrcpyStatic(info->model, virArchToString(hostarch)) == NULL) { if (virStrcpyStatic(info->model, virArchToString(hostarch)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("machine type %s too big for destination"), _("machine type %s too big for destination"),
virArchToString(hostarch)); virArchToString(hostarch));

View File

@ -221,8 +221,8 @@ virLockManagerSanlockSetupLockspace(virLockManagerSanlockDriverPtr driver)
VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE) < 0) VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE) < 0)
goto error; goto error;
if (!virStrcpyStatic(ls.name, if (virStrcpyStatic(ls.name,
VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE)) { VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Lockspace path '%s' exceeded %d characters"), _("Lockspace path '%s' exceeded %d characters"),
VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE, VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE,
@ -231,7 +231,7 @@ virLockManagerSanlockSetupLockspace(virLockManagerSanlockDriverPtr driver)
} }
ls.host_id = 0; /* Doesn't matter for initialization */ ls.host_id = 0; /* Doesn't matter for initialization */
ls.flags = 0; ls.flags = 0;
if (!virStrcpy(ls.host_id_disk.path, path, SANLK_PATH_LEN)) { if (virStrcpy(ls.host_id_disk.path, path, SANLK_PATH_LEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Lockspace path '%s' exceeded %d characters"), _("Lockspace path '%s' exceeded %d characters"),
path, SANLK_PATH_LEN); path, SANLK_PATH_LEN);
@ -583,7 +583,7 @@ static int virLockManagerSanlockAddLease(virLockManagerPtr lock,
res->flags = shared ? SANLK_RES_SHARED : 0; res->flags = shared ? SANLK_RES_SHARED : 0;
res->num_disks = 1; res->num_disks = 1;
if (!virStrcpy(res->name, name, SANLK_NAME_LEN)) { if (virStrcpy(res->name, name, SANLK_NAME_LEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Resource name '%s' exceeds %d characters"), _("Resource name '%s' exceeds %d characters"),
name, SANLK_NAME_LEN); name, SANLK_NAME_LEN);
@ -592,7 +592,7 @@ static int virLockManagerSanlockAddLease(virLockManagerPtr lock,
for (i = 0; i < nparams; i++) { for (i = 0; i < nparams; i++) {
if (STREQ(params[i].key, "path")) { if (STREQ(params[i].key, "path")) {
if (!virStrcpy(res->disks[0].path, params[i].value.str, SANLK_PATH_LEN)) { if (virStrcpy(res->disks[0].path, params[i].value.str, SANLK_PATH_LEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Lease path '%s' exceeds %d characters"), _("Lease path '%s' exceeds %d characters"),
params[i].value.str, SANLK_PATH_LEN); params[i].value.str, SANLK_PATH_LEN);
@ -601,7 +601,7 @@ static int virLockManagerSanlockAddLease(virLockManagerPtr lock,
} else if (STREQ(params[i].key, "offset")) { } else if (STREQ(params[i].key, "offset")) {
res->disks[0].offset = params[i].value.ul; res->disks[0].offset = params[i].value.ul;
} else if (STREQ(params[i].key, "lockspace")) { } else if (STREQ(params[i].key, "lockspace")) {
if (!virStrcpy(res->lockspace_name, params[i].value.str, SANLK_NAME_LEN)) { if (virStrcpy(res->lockspace_name, params[i].value.str, SANLK_NAME_LEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Resource lockspace '%s' exceeds %d characters"), _("Resource lockspace '%s' exceeds %d characters"),
params[i].value.str, SANLK_NAME_LEN); params[i].value.str, SANLK_NAME_LEN);
@ -651,7 +651,7 @@ virLockManagerSanlockAddDisk(virLockManagerSanlockDriverPtr driver,
res->num_disks = 1; res->num_disks = 1;
if (virCryptoHashString(VIR_CRYPTO_HASH_MD5, name, &hash) < 0) if (virCryptoHashString(VIR_CRYPTO_HASH_MD5, name, &hash) < 0)
goto cleanup; goto cleanup;
if (!virStrcpy(res->name, hash, SANLK_NAME_LEN)) { if (virStrcpy(res->name, hash, SANLK_NAME_LEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("MD5 hash '%s' unexpectedly larger than %d characters"), _("MD5 hash '%s' unexpectedly larger than %d characters"),
hash, (SANLK_NAME_LEN - 1)); hash, (SANLK_NAME_LEN - 1));
@ -661,16 +661,16 @@ virLockManagerSanlockAddDisk(virLockManagerSanlockDriverPtr driver,
if (virAsprintf(&path, "%s/%s", if (virAsprintf(&path, "%s/%s",
driver->autoDiskLeasePath, res->name) < 0) driver->autoDiskLeasePath, res->name) < 0)
goto cleanup; goto cleanup;
if (!virStrcpy(res->disks[0].path, path, SANLK_PATH_LEN)) { if (virStrcpy(res->disks[0].path, path, SANLK_PATH_LEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Lease path '%s' exceeds %d characters"), _("Lease path '%s' exceeds %d characters"),
path, SANLK_PATH_LEN); path, SANLK_PATH_LEN);
goto cleanup; goto cleanup;
} }
if (!virStrcpy(res->lockspace_name, if (virStrcpy(res->lockspace_name,
VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE, VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE,
SANLK_NAME_LEN)) { SANLK_NAME_LEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Resource lockspace '%s' exceeds %d characters"), _("Resource lockspace '%s' exceeds %d characters"),
VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE, SANLK_NAME_LEN); VIR_LOCK_MANAGER_SANLOCK_AUTO_DISK_LOCKSPACE, SANLK_NAME_LEN);

View File

@ -1334,8 +1334,8 @@ static int lxcNodeGetSecurityModel(virConnectPtr conn,
|| caps->host.secModels[0].model == NULL) || caps->host.secModels[0].model == NULL)
goto cleanup; goto cleanup;
if (!virStrcpy(secmodel->model, caps->host.secModels[0].model, if (virStrcpy(secmodel->model, caps->host.secModels[0].model,
VIR_SECURITY_MODEL_BUFLEN)) { VIR_SECURITY_MODEL_BUFLEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("security model string exceeds max %d bytes"), _("security model string exceeds max %d bytes"),
VIR_SECURITY_MODEL_BUFLEN - 1); VIR_SECURITY_MODEL_BUFLEN - 1);
@ -1343,8 +1343,8 @@ static int lxcNodeGetSecurityModel(virConnectPtr conn,
goto cleanup; goto cleanup;
} }
if (!virStrcpy(secmodel->doi, caps->host.secModels[0].doi, if (virStrcpy(secmodel->doi, caps->host.secModels[0].doi,
VIR_SECURITY_DOI_BUFLEN)) { VIR_SECURITY_DOI_BUFLEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("security DOI string exceeds max %d bytes"), _("security DOI string exceeds max %d bytes"),
VIR_SECURITY_DOI_BUFLEN-1); VIR_SECURITY_DOI_BUFLEN-1);

View File

@ -595,7 +595,7 @@ virNWFilterSnoopReqNew(const char *ifkey)
req->threadStatus = THREAD_STATUS_NONE; req->threadStatus = THREAD_STATUS_NONE;
if (virStrcpyStatic(req->ifkey, ifkey) == NULL || if (virStrcpyStatic(req->ifkey, ifkey) < 0||
virMutexInitRecursive(&req->lock) < 0) virMutexInitRecursive(&req->lock) < 0)
goto err_free_req; goto err_free_req;

View File

@ -168,7 +168,7 @@ printVar(virNWFilterVarCombIterPtr vars,
return -1; return -1;
} }
if (!virStrcpy(buf, val, bufsize)) { if (virStrcpy(buf, val, bufsize) < 0) {
const char *varName; const char *varName;
varName = virNWFilterVarAccessGetVarName(item->varAccess); varName = virNWFilterVarAccessGetVarName(item->varAccess);
@ -282,7 +282,7 @@ _printDataType(virNWFilterVarCombIterPtr vars,
break; break;
case DATATYPE_IPSETNAME: case DATATYPE_IPSETNAME:
if (virStrcpy(buf, item->u.ipset.setname, bufsize) == NULL) { if (virStrcpy(buf, item->u.ipset.setname, bufsize) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Buffer to small for ipset name")); _("Buffer to small for ipset name"));
return -1; return -1;
@ -311,7 +311,7 @@ _printDataType(virNWFilterVarCombIterPtr vars,
flags = virBufferContentAndReset(&vb); flags = virBufferContentAndReset(&vb);
if (virStrcpy(buf, flags, bufsize) == NULL) { if (virStrcpy(buf, flags, bufsize) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Buffer too small for IPSETFLAGS type")); _("Buffer too small for IPSETFLAGS type"));
VIR_FREE(flags); VIR_FREE(flags);

View File

@ -170,7 +170,7 @@ virNWFilterLockIface(const char *ifname)
goto err_exit; goto err_exit;
} }
if (virStrcpyStatic(ifaceLock->ifname, ifname) == NULL) { if (virStrcpyStatic(ifaceLock->ifname, ifname) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("interface name %s does not fit into " _("interface name %s does not fit into "
"buffer "), "buffer "),

View File

@ -274,7 +274,7 @@ openvzReadNetworkConf(virDomainDefPtr def,
if (VIR_ALLOC_N(net->ifname, len+1) < 0) if (VIR_ALLOC_N(net->ifname, len+1) < 0)
goto error; goto error;
if (virStrncpy(net->ifname, p, len, len+1) == NULL) { if (virStrncpy(net->ifname, p, len, len+1) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Network ifname %s too long for destination"), p); _("Network ifname %s too long for destination"), p);
goto error; goto error;
@ -291,7 +291,7 @@ openvzReadNetworkConf(virDomainDefPtr def,
if (VIR_ALLOC_N(net->data.bridge.brname, len+1) < 0) if (VIR_ALLOC_N(net->data.bridge.brname, len+1) < 0)
goto error; goto error;
if (virStrncpy(net->data.bridge.brname, p, len, len+1) == NULL) { if (virStrncpy(net->data.bridge.brname, p, len, len+1) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Bridge name %s too long for destination"), p); _("Bridge name %s too long for destination"), p);
goto error; goto error;
@ -304,7 +304,7 @@ openvzReadNetworkConf(virDomainDefPtr def,
_("Wrong length MAC address")); _("Wrong length MAC address"));
goto error; goto error;
} }
if (virStrncpy(cpy_temp, p, len, sizeof(cpy_temp)) == NULL) { if (virStrncpy(cpy_temp, p, len, sizeof(cpy_temp)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("MAC address %s too long for destination"), p); _("MAC address %s too long for destination"), p);
goto error; goto error;
@ -956,7 +956,7 @@ openvzGetVPSUUID(int vpsid, char *uuidstr, size_t len)
uuidbuf = strtok_r(NULL, "\n", &saveptr); uuidbuf = strtok_r(NULL, "\n", &saveptr);
if (iden != NULL && uuidbuf != NULL && STREQ(iden, "#UUID:")) { if (iden != NULL && uuidbuf != NULL && STREQ(iden, "#UUID:")) {
if (virStrcpy(uuidstr, uuidbuf, len) == NULL) { if (virStrcpy(uuidstr, uuidbuf, len) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("invalid uuid %s"), uuidbuf); _("invalid uuid %s"), uuidbuf);
goto cleanup; goto cleanup;

View File

@ -207,7 +207,7 @@ qemuAgentOpenUnix(const char *monitor)
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
if (virStrcpyStatic(addr.sun_path, monitor) == NULL) { if (virStrcpyStatic(addr.sun_path, monitor) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Agent path %s too big for destination"), monitor); _("Agent path %s too big for destination"), monitor);
goto error; goto error;

View File

@ -4941,7 +4941,7 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
if (virStrcpyStatic(addr.sun_path, dev->data.nix.path) == NULL) { if (virStrcpyStatic(addr.sun_path, dev->data.nix.path) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("UNIX socket path '%s' too long"), _("UNIX socket path '%s' too long"),
dev->data.nix.path); dev->data.nix.path);

View File

@ -353,7 +353,7 @@ qemuMonitorOpenUnix(const char *monitor,
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
if (virStrcpyStatic(addr.sun_path, monitor) == NULL) { if (virStrcpyStatic(addr.sun_path, monitor) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Monitor path %s too big for destination"), monitor); _("Monitor path %s too big for destination"), monitor);
goto error; goto error;

View File

@ -1608,7 +1608,7 @@ remoteNodeGetCPUStats(virConnectPtr conn,
/* Deserialise the result. */ /* Deserialise the result. */
for (i = 0; i < *nparams; ++i) { for (i = 0; i < *nparams; ++i) {
if (virStrcpyStatic(params[i].field, ret.params.params_val[i].field) == NULL) { if (virStrcpyStatic(params[i].field, ret.params.params_val[i].field) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Stats %s too big for destination"), _("Stats %s too big for destination"),
ret.params.params_val[i].field); ret.params.params_val[i].field);
@ -1672,7 +1672,7 @@ remoteNodeGetMemoryStats(virConnectPtr conn,
/* Deserialise the result. */ /* Deserialise the result. */
for (i = 0; i < *nparams; ++i) { for (i = 0; i < *nparams; ++i) {
if (virStrcpyStatic(params[i].field, ret.params.params_val[i].field) == NULL) { if (virStrcpyStatic(params[i].field, ret.params.params_val[i].field) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Stats %s too big for destination"), _("Stats %s too big for destination"),
ret.params.params_val[i].field); ret.params.params_val[i].field);

View File

@ -424,7 +424,7 @@ virNetLibsshAuthenticatePrivkeyCb(const char *prompt,
virConnectCredential retr_passphrase; virConnectCredential retr_passphrase;
int cred_type; int cred_type;
char *actual_prompt = NULL; char *actual_prompt = NULL;
char *p; int p;
/* request user's key password */ /* request user's key password */
if (!sess->cred || !sess->cred->cb) { if (!sess->cred || !sess->cred->cb) {
@ -459,7 +459,7 @@ virNetLibsshAuthenticatePrivkeyCb(const char *prompt,
p = virStrncpy(buf, retr_passphrase.result, p = virStrncpy(buf, retr_passphrase.result,
retr_passphrase.resultlen, len); retr_passphrase.resultlen, len);
VIR_DISPOSE_STRING(retr_passphrase.result); VIR_DISPOSE_STRING(retr_passphrase.result);
if (!p) { if (p < 0) {
virReportError(VIR_ERR_LIBSSH, "%s", virReportError(VIR_ERR_LIBSSH, "%s",
_("passphrase is too long for the buffer")); _("passphrase is too long for the buffer"));
goto error; goto error;

View File

@ -459,7 +459,7 @@ int virNetSocketNewListenUNIX(const char *path,
} }
addr.data.un.sun_family = AF_UNIX; addr.data.un.sun_family = AF_UNIX;
if (virStrcpyStatic(addr.data.un.sun_path, path) == NULL) { if (virStrcpyStatic(addr.data.un.sun_path, path) < 0) {
virReportSystemError(ENAMETOOLONG, virReportSystemError(ENAMETOOLONG,
_("Path %s too long for unix socket"), path); _("Path %s too long for unix socket"), path);
goto error; goto error;
@ -690,7 +690,7 @@ int virNetSocketNewConnectUNIX(const char *path,
} }
remoteAddr.data.un.sun_family = AF_UNIX; remoteAddr.data.un.sun_family = AF_UNIX;
if (virStrcpyStatic(remoteAddr.data.un.sun_path, path) == NULL) { if (virStrcpyStatic(remoteAddr.data.un.sun_path, path) < 0) {
virReportSystemError(ENOMEM, _("Path %s too long for unix socket"), path); virReportSystemError(ENOMEM, _("Path %s too long for unix socket"), path);
goto cleanup; goto cleanup;
} }

View File

@ -530,7 +530,7 @@ AppArmorGetSecurityProcessLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
} }
if (virStrcpy(sec->label, profile_name, if (virStrcpy(sec->label, profile_name,
VIR_SECURITY_LABEL_BUFLEN) == NULL) { VIR_SECURITY_LABEL_BUFLEN) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("error copying profile name")); "%s", _("error copying profile name"));
goto cleanup; goto cleanup;

View File

@ -1317,7 +1317,7 @@ vahParseArgv(vahControl * ctl, int argc, char **argv)
if (strlen(optarg) > PROFILE_NAME_SIZE - 1) if (strlen(optarg) > PROFILE_NAME_SIZE - 1)
vah_error(ctl, 1, _("invalid UUID")); vah_error(ctl, 1, _("invalid UUID"));
if (virStrcpy((char *)ctl->uuid, optarg, if (virStrcpy((char *)ctl->uuid, optarg,
PROFILE_NAME_SIZE) == NULL) PROFILE_NAME_SIZE) < 0)
vah_error(ctl, 1, _("error copying UUID")); vah_error(ctl, 1, _("error copying UUID"));
break; break;
default: default:

View File

@ -690,7 +690,7 @@ static char *testBuildFilename(const char *relativeTo,
int totalLen = baseLen + strlen(filename) + 1; int totalLen = baseLen + strlen(filename) + 1;
if (VIR_ALLOC_N(absFile, totalLen) < 0) if (VIR_ALLOC_N(absFile, totalLen) < 0)
return NULL; return NULL;
if (virStrncpy(absFile, relativeTo, baseLen, totalLen) == NULL) { if (virStrncpy(absFile, relativeTo, baseLen, totalLen) < 0) {
VIR_FREE(absFile); VIR_FREE(absFile);
return NULL; return NULL;
} }
@ -804,7 +804,7 @@ testParseNodeInfo(virNodeInfoPtr nodeInfo, xmlXPathContextPtr ctxt)
str = virXPathString("string(/node/cpu/model[1])", ctxt); str = virXPathString("string(/node/cpu/model[1])", ctxt);
if (str != NULL) { if (str != NULL) {
if (virStrcpyStatic(nodeInfo->model, str) == NULL) { if (virStrcpyStatic(nodeInfo->model, str) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Model %s too big for destination"), str); _("Model %s too big for destination"), str);
VIR_FREE(str); VIR_FREE(str);

View File

@ -850,7 +850,7 @@ static int umlMonitorAddress(const struct uml_driver *driver,
memset(addr, 0, sizeof(*addr)); memset(addr, 0, sizeof(*addr));
addr->sun_family = AF_UNIX; addr->sun_family = AF_UNIX;
if (virStrcpyStatic(addr->sun_path, sockname) == NULL) { if (virStrcpyStatic(addr->sun_path, sockname) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unix path %s too long for destination"), sockname); _("Unix path %s too long for destination"), sockname);
retval = -1; retval = -1;
@ -951,7 +951,7 @@ static int umlMonitorCommand(const struct uml_driver *driver,
cmd, req.length); cmd, req.length);
return -1; return -1;
} }
if (virStrcpyStatic(req.data, cmd) == NULL) { if (virStrcpyStatic(req.data, cmd) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Command %s too long for destination"), cmd); _("Command %s too long for destination"), cmd);
return -1; return -1;

View File

@ -1179,11 +1179,11 @@ int virFDStreamConnectUNIX(virStreamPtr st,
memset(&sa, 0, sizeof(sa)); memset(&sa, 0, sizeof(sa));
sa.sun_family = AF_UNIX; sa.sun_family = AF_UNIX;
if (abstract) { if (abstract) {
if (virStrcpy(sa.sun_path+1, path, sizeof(sa.sun_path)-1) == NULL) if (virStrcpy(sa.sun_path+1, path, sizeof(sa.sun_path)-1) < 0)
goto error; goto error;
sa.sun_path[0] = '\0'; sa.sun_path[0] = '\0';
} else { } else {
if (virStrcpyStatic(sa.sun_path, path) == NULL) if (virStrcpyStatic(sa.sun_path, path) < 0)
goto error; goto error;
} }

View File

@ -166,7 +166,7 @@ virHostCPUGetStatsFreeBSD(int cpuNum,
for (i = 0; cpu_map[i].field != NULL; i++) { for (i = 0; cpu_map[i].field != NULL; i++) {
virNodeCPUStatsPtr param = &params[i]; virNodeCPUStatsPtr param = &params[i];
if (virStrcpyStatic(param->field, cpu_map[i].field) == NULL) { if (virStrcpyStatic(param->field, cpu_map[i].field) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Field '%s' too long for destination"), _("Field '%s' too long for destination"),
cpu_map[i].field); cpu_map[i].field);
@ -933,7 +933,7 @@ virHostCPUStatsAssign(virNodeCPUStatsPtr param,
const char *name, const char *name,
unsigned long long value) unsigned long long value)
{ {
if (virStrcpyStatic(param->field, name) == NULL) { if (virStrcpyStatic(param->field, name) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("kernel cpu time field is too long" "%s", _("kernel cpu time field is too long"
" for the destination")); " for the destination"));

View File

@ -104,7 +104,7 @@ virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params,
} }
param = &params[j++]; param = &params[j++];
if (virStrcpyStatic(param->field, sysctl_map[i].field) == NULL) { if (virStrcpyStatic(param->field, sysctl_map[i].field) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Field '%s' too long for destination"), _("Field '%s' too long for destination"),
sysctl_map[i].field); sysctl_map[i].field);
@ -122,7 +122,7 @@ virHostMemGetStatsFreeBSD(virNodeMemoryStatsPtr params,
"vfs.bufspace"); "vfs.bufspace");
return -1; return -1;
} }
if (virStrcpyStatic(param->field, VIR_NODE_MEMORY_STATS_BUFFERS) == NULL) { if (virStrcpyStatic(param->field, VIR_NODE_MEMORY_STATS_BUFFERS) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Field '%s' too long for destination"), _("Field '%s' too long for destination"),
VIR_NODE_MEMORY_STATS_BUFFERS); VIR_NODE_MEMORY_STATS_BUFFERS);
@ -224,7 +224,7 @@ virHostMemGetStatsLinux(FILE *meminfo,
if (STREQ(meminfo_hdr, convp->meminfo_hdr)) { if (STREQ(meminfo_hdr, convp->meminfo_hdr)) {
virNodeMemoryStatsPtr param = &params[k++]; virNodeMemoryStatsPtr param = &params[k++];
if (virStrcpyStatic(param->field, convp->field) == NULL) { if (virStrcpyStatic(param->field, convp->field) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Field kernel memory too long for destination")); "%s", _("Field kernel memory too long for destination"));
goto cleanup; goto cleanup;

View File

@ -1026,7 +1026,7 @@ virLogOutputToJournald(virLogSourcePtr source,
memset(&sa, 0, sizeof(sa)); memset(&sa, 0, sizeof(sa));
sa.sun_family = AF_UNIX; sa.sun_family = AF_UNIX;
if (!virStrcpyStatic(sa.sun_path, "/run/systemd/journal/socket")) if (virStrcpyStatic(sa.sun_path, "/run/systemd/journal/socket") < 0)
return; return;
memset(&mh, 0, sizeof(mh)); memset(&mh, 0, sizeof(mh));

View File

@ -138,7 +138,7 @@ static int virNetDevSetupControlFull(const char *ifname,
if (ifr && ifname) { if (ifr && ifname) {
memset(ifr, 0, sizeof(*ifr)); memset(ifr, 0, sizeof(*ifr));
if (virStrcpyStatic(ifr->ifr_name, ifname) == NULL) { if (virStrcpyStatic(ifr->ifr_name, ifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("Network interface name '%s' is too long"), _("Network interface name '%s' is too long"),
ifname); ifname);
@ -593,7 +593,7 @@ int virNetDevSetName(const char* ifname, const char *newifname)
return -1; return -1;
# ifdef HAVE_STRUCT_IFREQ_IFR_NEWNAME # ifdef HAVE_STRUCT_IFREQ_IFR_NEWNAME
if (virStrcpyStatic(ifr.ifr_newname, newifname) == NULL) { if (virStrcpyStatic(ifr.ifr_newname, newifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("Network interface name '%s' is too long"), _("Network interface name '%s' is too long"),
newifname); newifname);
@ -914,7 +914,7 @@ int virNetDevGetIndex(const char *ifname, int *ifindex)
memset(&ifreq, 0, sizeof(ifreq)); memset(&ifreq, 0, sizeof(ifreq));
if (virStrcpyStatic(ifreq.ifr_name, ifname) == NULL) { if (virStrcpyStatic(ifreq.ifr_name, ifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("invalid interface name %s"), _("invalid interface name %s"),
ifname); ifname);
@ -1015,7 +1015,7 @@ int virNetDevGetVLanID(const char *ifname, int *vlanid)
return -1; return -1;
} }
if (virStrcpyStatic(vlanargs.device1, ifname) == NULL) { if (virStrcpyStatic(vlanargs.device1, ifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("invalid interface name %s"), _("invalid interface name %s"),
ifname); ifname);
@ -2763,7 +2763,7 @@ static int virNetDevParseMcast(char *buf, virNetDevMcastEntryPtr mcast)
mcast->idx = num; mcast->idx = num;
break; break;
case VIR_MCAST_TYPE_NAME_TOKEN: case VIR_MCAST_TYPE_NAME_TOKEN:
if (virStrcpy(mcast->name, token, VIR_MCAST_NAME_LEN) == NULL) { if (virStrcpy(mcast->name, token, VIR_MCAST_NAME_LEN) < 0) {
virReportSystemError(EINVAL, virReportSystemError(EINVAL,
_("Failed to parse network device name from '%s'"), _("Failed to parse network device name from '%s'"),
buf); buf);

View File

@ -93,7 +93,7 @@ static int virNetDevBridgeCmd(const char *brname,
return -1; return -1;
} }
if (virStrcpyStatic(ifd.ifd_name, brname) == NULL) { if (virStrcpyStatic(ifd.ifd_name, brname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("Network interface name '%s' is too long"), _("Network interface name '%s' is too long"),
brname); brname);
@ -686,7 +686,7 @@ int virNetDevBridgeAddPort(const char *brname,
struct ifbreq req; struct ifbreq req;
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
if (virStrcpyStatic(req.ifbr_ifsname, ifname) == NULL) { if (virStrcpyStatic(req.ifbr_ifsname, ifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("Network interface name '%s' is too long"), _("Network interface name '%s' is too long"),
ifname); ifname);
@ -756,7 +756,7 @@ int virNetDevBridgeRemovePort(const char *brname,
struct ifbreq req; struct ifbreq req;
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
if (virStrcpyStatic(req.ifbr_ifsname, ifname) == NULL) { if (virStrcpyStatic(req.ifbr_ifsname, ifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("Network interface name '%s' is too long"), _("Network interface name '%s' is too long"),
ifname); ifname);

View File

@ -270,7 +270,7 @@ int virNetDevTapCreate(char **ifname,
ifr.ifr_flags |= IFF_VNET_HDR; ifr.ifr_flags |= IFF_VNET_HDR;
# endif # endif
if (virStrcpyStatic(ifr.ifr_name, *ifname) == NULL) { if (virStrcpyStatic(ifr.ifr_name, *ifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("Network interface name '%s' is too long"), _("Network interface name '%s' is too long"),
*ifname); *ifname);
@ -336,7 +336,7 @@ int virNetDevTapDelete(const char *ifname,
memset(&try, 0, sizeof(struct ifreq)); memset(&try, 0, sizeof(struct ifreq));
try.ifr_flags = IFF_TAP|IFF_NO_PI; try.ifr_flags = IFF_TAP|IFF_NO_PI;
if (virStrcpyStatic(try.ifr_name, ifname) == NULL) { if (virStrcpyStatic(try.ifr_name, ifname) < 0) {
virReportSystemError(ERANGE, virReportSystemError(ERANGE,
_("Network interface name '%s' is too long"), _("Network interface name '%s' is too long"),
ifname); ifname);

View File

@ -389,7 +389,7 @@ virNetDevVPortProfileMerge(virNetDevVPortProfilePtr orig,
orig->profileID, mods->profileID); orig->profileID, mods->profileID);
return -1; return -1;
} }
if (virStrcpyStatic(orig->profileID, mods->profileID) == NULL) { if (virStrcpyStatic(orig->profileID, mods->profileID) < 0) {
/* this should never happen - it indicates mods->profileID /* this should never happen - it indicates mods->profileID
* isn't properly null terminated. */ * isn't properly null terminated. */
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@ -885,8 +885,8 @@ virNetDevVPortProfileGetNthParent(const char *ifname, int ifindex, unsigned int
break; break;
if (tb[IFLA_IFNAME]) { if (tb[IFLA_IFNAME]) {
if (!virStrcpy(parent_ifname, (char*)RTA_DATA(tb[IFLA_IFNAME]), if (virStrcpy(parent_ifname, (char*)RTA_DATA(tb[IFLA_IFNAME]),
IFNAMSIZ)) { IFNAMSIZ) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("buffer for root interface name is too small")); _("buffer for root interface name is too small"));
rc = -1; rc = -1;

View File

@ -774,25 +774,23 @@ virAsprintfInternal(bool report,
* A safe version of strncpy. The last parameter is the number of bytes * A safe version of strncpy. The last parameter is the number of bytes
* available in the destination string, *not* the number of bytes you want * available in the destination string, *not* the number of bytes you want
* to copy. If the destination is not large enough to hold all n of the * to copy. If the destination is not large enough to hold all n of the
* src string bytes plus a \0, NULL is returned and no data is copied. * src string bytes plus a \0, <0 is returned and no data is copied.
* If the destination is large enough to hold the n bytes plus \0, then the * If the destination is large enough to hold the n bytes plus \0, then the
* string is copied and a pointer to the destination string is returned. * string is copied and 0 is returned.
*/ */
char * int
virStrncpy(char *dest, const char *src, size_t n, size_t destbytes) virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
{ {
char *ret;
if (n > (destbytes - 1)) if (n > (destbytes - 1))
return NULL; return -1;
ret = strncpy(dest, src, n); strncpy(dest, src, n);
/* strncpy NULL terminates iff the last character is \0. Therefore /* strncpy NULL terminates iff the last character is \0. Therefore
* force the last byte to be \0 * force the last byte to be \0
*/ */
dest[n] = '\0'; dest[n] = '\0';
return ret; return 0;
} }
/** /**
@ -801,11 +799,11 @@ virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
* A safe version of strcpy. The last parameter is the number of bytes * A safe version of strcpy. The last parameter is the number of bytes
* available in the destination string, *not* the number of bytes you want * available in the destination string, *not* the number of bytes you want
* to copy. If the destination is not large enough to hold all n of the * to copy. If the destination is not large enough to hold all n of the
* src string bytes plus a \0, NULL is returned and no data is copied. * src string bytes plus a \0, <0 is returned and no data is copied.
* If the destination is large enough to hold the source plus \0, then the * If the destination is large enough to hold the source plus \0, then the
* string is copied and a pointer to the destination string is returned. * string is copied and 0 is returned.
*/ */
char * int
virStrcpy(char *dest, const char *src, size_t destbytes) virStrcpy(char *dest, const char *src, size_t destbytes)
{ {
return virStrncpy(dest, src, strlen(src), destbytes); return virStrncpy(dest, src, strlen(src), destbytes);

View File

@ -127,9 +127,9 @@ void virSkipSpacesBackwards(const char *str, char **endp)
bool virStringIsEmpty(const char *str); bool virStringIsEmpty(const char *str);
char *virStrncpy(char *dest, const char *src, size_t n, size_t destbytes) int virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_RETURN_CHECK;
char *virStrcpy(char *dest, const char *src, size_t destbytes) int virStrcpy(char *dest, const char *src, size_t destbytes)
ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_RETURN_CHECK;
# define virStrcpyStatic(dest, src) virStrcpy((dest), (src), sizeof(dest)) # define virStrcpyStatic(dest, src) virStrcpy((dest), (src), sizeof(dest))

View File

@ -86,7 +86,7 @@ virTypedParamsValidate(virTypedParameterPtr params, int nparams, ...)
if (VIR_RESIZE_N(keys, nkeysalloc, nkeys, 1) < 0) if (VIR_RESIZE_N(keys, nkeysalloc, nkeys, 1) < 0)
goto cleanup; goto cleanup;
if (virStrcpyStatic(keys[nkeys].field, name) == NULL) { if (virStrcpyStatic(keys[nkeys].field, name) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Field name '%s' too long"), name); _("Field name '%s' too long"), name);
goto cleanup; goto cleanup;
@ -222,7 +222,7 @@ virTypedParameterAssign(virTypedParameterPtr param, const char *name,
va_start(ap, type); va_start(ap, type);
if (virStrcpyStatic(param->field, name) == NULL) { if (virStrcpyStatic(param->field, name) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"), virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"),
name); name);
goto cleanup; goto cleanup;
@ -279,7 +279,7 @@ virTypedParameterAssignFromStr(virTypedParameterPtr param, const char *name,
goto cleanup; goto cleanup;
} }
if (virStrcpyStatic(param->field, name) == NULL) { if (virStrcpyStatic(param->field, name) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"), virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"),
name); name);
goto cleanup; goto cleanup;
@ -1413,7 +1413,7 @@ virTypedParamsDeserialize(virTypedParameterRemotePtr remote_params,
virTypedParameterRemotePtr remote_param = remote_params + i; virTypedParameterRemotePtr remote_param = remote_params + i;
if (virStrcpyStatic(param->field, if (virStrcpyStatic(param->field,
remote_param->field) == NULL) { remote_param->field) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("parameter %s too big for destination"), _("parameter %s too big for destination"),
remote_param->field); remote_param->field);

View File

@ -430,9 +430,9 @@ xenapiNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
if (xen_host_cpu_get_all(session, &host_cpu_set)) { if (xen_host_cpu_get_all(session, &host_cpu_set)) {
host_cpu = host_cpu_set->contents[0]; host_cpu = host_cpu_set->contents[0];
xen_host_cpu_get_modelname(session, &modelname, host_cpu); xen_host_cpu_get_modelname(session, &modelname, host_cpu);
if (!virStrncpy(info->model, modelname, if (virStrncpy(info->model, modelname,
MIN(strlen(modelname), LIBVIRT_MODELNAME_LEN - 1), MIN(strlen(modelname), LIBVIRT_MODELNAME_LEN - 1),
LIBVIRT_MODELNAME_LEN)) { LIBVIRT_MODELNAME_LEN) < 0) {
virReportOOMError(); virReportOOMError();
xen_host_cpu_set_free(host_cpu_set); xen_host_cpu_set_free(host_cpu_set);
VIR_FREE(modelname); VIR_FREE(modelname);

View File

@ -410,7 +410,7 @@ xenParsePCI(char *entry)
return NULL; return NULL;
if (!(nextkey = strchr(key, ':'))) if (!(nextkey = strchr(key, ':')))
return NULL; return NULL;
if (virStrncpy(domain, key, (nextkey - key), sizeof(domain)) == NULL) { if (virStrncpy(domain, key, (nextkey - key), sizeof(domain)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Domain %s too big for destination"), key); _("Domain %s too big for destination"), key);
return NULL; return NULL;
@ -419,7 +419,7 @@ xenParsePCI(char *entry)
key = nextkey + 1; key = nextkey + 1;
if (!(nextkey = strchr(key, ':'))) if (!(nextkey = strchr(key, ':')))
return NULL; return NULL;
if (virStrncpy(bus, key, (nextkey - key), sizeof(bus)) == NULL) { if (virStrncpy(bus, key, (nextkey - key), sizeof(bus)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Bus %s too big for destination"), key); _("Bus %s too big for destination"), key);
return NULL; return NULL;
@ -428,7 +428,7 @@ xenParsePCI(char *entry)
key = nextkey + 1; key = nextkey + 1;
if (!(nextkey = strchr(key, '.'))) if (!(nextkey = strchr(key, '.')))
return NULL; return NULL;
if (virStrncpy(slot, key, (nextkey - key), sizeof(slot)) == NULL) { if (virStrncpy(slot, key, (nextkey - key), sizeof(slot)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Slot %s too big for destination"), key); _("Slot %s too big for destination"), key);
return NULL; return NULL;
@ -437,7 +437,7 @@ xenParsePCI(char *entry)
key = nextkey + 1; key = nextkey + 1;
if (strlen(key) != 1) if (strlen(key) != 1)
return NULL; return NULL;
if (virStrncpy(func, key, 1, sizeof(func)) == NULL) { if (virStrncpy(func, key, 1, sizeof(func)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Function %s too big for destination"), key); _("Function %s too big for destination"), key);
return NULL; return NULL;
@ -669,7 +669,7 @@ xenParseVfb(virConfPtr conf, virDomainDefPtr def)
char vfb[MAX_VFB]; char vfb[MAX_VFB];
char *key = vfb; char *key = vfb;
if (virStrcpyStatic(vfb, list->list->str) == NULL) { if (virStrcpyStatic(vfb, list->list->str) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("VFB %s too big for destination"), _("VFB %s too big for destination"),
list->list->str); list->list->str);
@ -880,7 +880,7 @@ xenParseVif(char *entry, const char *vif_typename)
if (STRPREFIX(key, "mac=")) { if (STRPREFIX(key, "mac=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(mac, data, len, sizeof(mac)) == NULL) { if (virStrncpy(mac, data, len, sizeof(mac)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("MAC address %s too big for destination"), _("MAC address %s too big for destination"),
data); data);
@ -888,7 +888,7 @@ xenParseVif(char *entry, const char *vif_typename)
} }
} else if (STRPREFIX(key, "bridge=")) { } else if (STRPREFIX(key, "bridge=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(bridge, data, len, sizeof(bridge)) == NULL) { if (virStrncpy(bridge, data, len, sizeof(bridge)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Bridge %s too big for destination"), _("Bridge %s too big for destination"),
data); data);
@ -901,7 +901,7 @@ xenParseVif(char *entry, const char *vif_typename)
return NULL; return NULL;
} else if (STRPREFIX(key, "model=")) { } else if (STRPREFIX(key, "model=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(model, data, len, sizeof(model)) == NULL) { if (virStrncpy(model, data, len, sizeof(model)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Model %s too big for destination"), _("Model %s too big for destination"),
data); data);
@ -909,7 +909,7 @@ xenParseVif(char *entry, const char *vif_typename)
} }
} else if (STRPREFIX(key, "type=")) { } else if (STRPREFIX(key, "type=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(type, data, len, sizeof(type)) == NULL) { if (virStrncpy(type, data, len, sizeof(type)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Type %s too big for destination"), _("Type %s too big for destination"),
data); data);
@ -917,7 +917,7 @@ xenParseVif(char *entry, const char *vif_typename)
} }
} else if (STRPREFIX(key, "vifname=")) { } else if (STRPREFIX(key, "vifname=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(vifname, data, len, sizeof(vifname)) == NULL) { if (virStrncpy(vifname, data, len, sizeof(vifname)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Vifname %s too big for destination"), _("Vifname %s too big for destination"),
data); data);
@ -925,14 +925,14 @@ xenParseVif(char *entry, const char *vif_typename)
} }
} else if (STRPREFIX(key, "ip=")) { } else if (STRPREFIX(key, "ip=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(ip, data, len, sizeof(ip)) == NULL) { if (virStrncpy(ip, data, len, sizeof(ip)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("IP %s too big for destination"), data); _("IP %s too big for destination"), data);
return NULL; return NULL;
} }
} else if (STRPREFIX(key, "rate=")) { } else if (STRPREFIX(key, "rate=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(rate, data, len, sizeof(rate)) == NULL) { if (virStrncpy(rate, data, len, sizeof(rate)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("rate %s too big for destination"), data); _("rate %s too big for destination"), data);
return NULL; return NULL;

View File

@ -740,7 +740,7 @@ xenParseSxprSound(virDomainDefPtr def,
len = (offset2 - offset); len = (offset2 - offset);
else else
len = strlen(offset); len = strlen(offset);
if (virStrncpy(model, offset, len, sizeof(model)) == NULL) { if (virStrncpy(model, offset, len, sizeof(model)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Sound model %s too big for destination"), _("Sound model %s too big for destination"),
offset); offset);

View File

@ -480,7 +480,7 @@ xenParseXLVnuma(virConfPtr conf,
if (STRPREFIX(str, "pnode")) { if (STRPREFIX(str, "pnode")) {
unsigned int cellid; unsigned int cellid;
if (!virStrcpyStatic(vtoken, data)) { if (virStrcpyStatic(vtoken, data) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("vnuma vnode %zu pnode '%s' too long for destination"), _("vnuma vnode %zu pnode '%s' too long for destination"),
vnodeCnt, data); vnodeCnt, data);
@ -496,7 +496,7 @@ xenParseXLVnuma(virConfPtr conf,
} }
pnode = cellid; pnode = cellid;
} else if (STRPREFIX(str, "size")) { } else if (STRPREFIX(str, "size")) {
if (!virStrcpyStatic(vtoken, data)) { if (virStrcpyStatic(vtoken, data) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("vnuma vnode %zu size '%s' too long for destination"), _("vnuma vnode %zu size '%s' too long for destination"),
vnodeCnt, data); vnodeCnt, data);
@ -509,7 +509,7 @@ xenParseXLVnuma(virConfPtr conf,
virDomainNumaSetNodeMemorySize(numa, vnodeCnt, (kbsize * 1024)); virDomainNumaSetNodeMemorySize(numa, vnodeCnt, (kbsize * 1024));
} else if (STRPREFIX(str, "vcpus")) { } else if (STRPREFIX(str, "vcpus")) {
if (!virStrcpyStatic(vtoken, data)) { if (virStrcpyStatic(vtoken, data) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("vnuma vnode %zu vcpus '%s' too long for destination"), _("vnuma vnode %zu vcpus '%s' too long for destination"),
vnodeCnt, data); vnodeCnt, data);
@ -526,7 +526,7 @@ xenParseXLVnuma(virConfPtr conf,
size_t i, ndistances; size_t i, ndistances;
unsigned int value; unsigned int value;
if (!virStrcpyStatic(vtoken, data)) { if (virStrcpyStatic(vtoken, data) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("vnuma vnode %zu vdistances '%s' too long for destination"), _("vnuma vnode %zu vdistances '%s' too long for destination"),
vnodeCnt, data); vnodeCnt, data);
@ -900,7 +900,7 @@ xenParseXLUSBController(virConfPtr conf, virDomainDefPtr def)
if (STRPREFIX(key, "type=")) { if (STRPREFIX(key, "type=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(type, data, len, sizeof(type)) == NULL) { if (virStrncpy(type, data, len, sizeof(type)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("type %s invalid"), _("type %s invalid"),
data); data);
@ -908,7 +908,7 @@ xenParseXLUSBController(virConfPtr conf, virDomainDefPtr def)
} }
} else if (STRPREFIX(key, "version=")) { } else if (STRPREFIX(key, "version=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(version, data, len, sizeof(version)) == NULL) { if (virStrncpy(version, data, len, sizeof(version)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("version %s invalid"), _("version %s invalid"),
data); data);
@ -918,7 +918,7 @@ xenParseXLUSBController(virConfPtr conf, virDomainDefPtr def)
goto skipusbctrl; goto skipusbctrl;
} else if (STRPREFIX(key, "ports=")) { } else if (STRPREFIX(key, "ports=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(ports, data, len, sizeof(ports)) == NULL) { if (virStrncpy(ports, data, len, sizeof(ports)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("version %s invalid"), _("version %s invalid"),
data); data);
@ -1002,7 +1002,7 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def)
if (STRPREFIX(key, "hostbus=")) { if (STRPREFIX(key, "hostbus=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(bus, data, len, sizeof(bus)) == NULL) { if (virStrncpy(bus, data, len, sizeof(bus)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("bus %s too big for destination"), _("bus %s too big for destination"),
data); data);
@ -1010,7 +1010,7 @@ xenParseXLUSB(virConfPtr conf, virDomainDefPtr def)
} }
} else if (STRPREFIX(key, "hostaddr=")) { } else if (STRPREFIX(key, "hostaddr=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(device, data, len, sizeof(device)) == NULL) { if (virStrncpy(device, data, len, sizeof(device)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("device %s too big for destination"), _("device %s too big for destination"),
data); data);
@ -1078,7 +1078,7 @@ xenParseXLChannel(virConfPtr conf, virDomainDefPtr def)
if (STRPREFIX(key, "connection=")) { if (STRPREFIX(key, "connection=")) {
int len = nextkey ? (nextkey - data) : strlen(data); int len = nextkey ? (nextkey - data) : strlen(data);
if (virStrncpy(type, data, len, sizeof(type)) == NULL) { if (virStrncpy(type, data, len, sizeof(type)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("connection %s too big"), data); _("connection %s too big"), data);
goto skipchannel; goto skipchannel;

View File

@ -159,7 +159,7 @@ xenParseXMDisk(char *entry, int hvm)
goto error; goto error;
if (virStrncpy(disk->dst, head, offset - head, if (virStrncpy(disk->dst, head, offset - head,
(offset - head) + 1) == NULL) { (offset - head) + 1) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Dest file %s too big for destination"), head); _("Dest file %s too big for destination"), head);
goto error; goto error;