mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-05 22:05:47 +00:00
Remove pointless storage of var names in virNWFilterHashTable
The virNWFilterHashTable struct contains a virHashTable and then a 'char **names' field which keeps a copy of all the hash keys. Presumably this was intended to record the ordering of the hash keys. No code ever uses this and the ordering is mangled whenever a variable is removed from the hash, because the last element in the list is copied into the middle of the list when shrinking the array. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
50859fc1dd
commit
293d4fe2f1
@ -60,7 +60,7 @@ virNWFilterIPAddrMapAddIPAddr(const char *ifname, char *addr)
|
|||||||
val = virNWFilterVarValueCreateSimple(addr);
|
val = virNWFilterVarValueCreateSimple(addr);
|
||||||
if (!val)
|
if (!val)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
ret = virNWFilterHashTablePut(ipAddressMap, ifname, val, 1);
|
ret = virNWFilterHashTablePut(ipAddressMap, ifname, val);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
} else {
|
} else {
|
||||||
if (virNWFilterVarValueAddValue(val, addr) < 0)
|
if (virNWFilterVarValueAddValue(val, addr) < 0)
|
||||||
|
@ -631,33 +631,14 @@ hashDataFree(void *payload, const void *name ATTRIBUTE_UNUSED)
|
|||||||
int
|
int
|
||||||
virNWFilterHashTablePut(virNWFilterHashTablePtr table,
|
virNWFilterHashTablePut(virNWFilterHashTablePtr table,
|
||||||
const char *name,
|
const char *name,
|
||||||
virNWFilterVarValuePtr val,
|
virNWFilterVarValuePtr val)
|
||||||
int copyName)
|
|
||||||
{
|
{
|
||||||
if (!virHashLookup(table->hashTable, name)) {
|
if (!virHashLookup(table->hashTable, name)) {
|
||||||
char *newName;
|
if (virHashAddEntry(table->hashTable, name, val) < 0)
|
||||||
if (copyName) {
|
|
||||||
if (VIR_STRDUP(newName, name) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (VIR_APPEND_ELEMENT_COPY(table->names,
|
|
||||||
table->nNames, newName) < 0) {
|
|
||||||
VIR_FREE(newName);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virHashAddEntry(table->hashTable, name, val) < 0) {
|
|
||||||
if (copyName) {
|
|
||||||
VIR_FREE(newName);
|
|
||||||
table->nNames--;
|
|
||||||
}
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (virHashUpdateEntry(table->hashTable, name, val) < 0) {
|
if (virHashUpdateEntry(table->hashTable, name, val) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -675,14 +656,10 @@ virNWFilterHashTablePut(virNWFilterHashTablePtr table,
|
|||||||
void
|
void
|
||||||
virNWFilterHashTableFree(virNWFilterHashTablePtr table)
|
virNWFilterHashTableFree(virNWFilterHashTablePtr table)
|
||||||
{
|
{
|
||||||
size_t i;
|
|
||||||
if (!table)
|
if (!table)
|
||||||
return;
|
return;
|
||||||
virHashFree(table->hashTable);
|
virHashFree(table->hashTable);
|
||||||
|
|
||||||
for (i = 0; i < table->nNames; i++)
|
|
||||||
VIR_FREE(table->names[i]);
|
|
||||||
VIR_FREE(table->names);
|
|
||||||
VIR_FREE(table);
|
VIR_FREE(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -707,20 +684,7 @@ void *
|
|||||||
virNWFilterHashTableRemoveEntry(virNWFilterHashTablePtr ht,
|
virNWFilterHashTableRemoveEntry(virNWFilterHashTablePtr ht,
|
||||||
const char *entry)
|
const char *entry)
|
||||||
{
|
{
|
||||||
size_t i;
|
return virHashSteal(ht->hashTable, entry);
|
||||||
void *value = virHashSteal(ht->hashTable, entry);
|
|
||||||
|
|
||||||
if (value) {
|
|
||||||
for (i = 0; i < ht->nNames; i++) {
|
|
||||||
if (STREQ(ht->names[i], entry)) {
|
|
||||||
VIR_FREE(ht->names[i]);
|
|
||||||
ht->names[i] = ht->names[--ht->nNames];
|
|
||||||
ht->names[ht->nNames] = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -745,7 +709,7 @@ addToTable(void *payload, const void *name, void *data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virNWFilterHashTablePut(atts->target, (const char *)name, val, 1) < 0){
|
if (virNWFilterHashTablePut(atts->target, (const char *)name, val) < 0){
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("Could not put variable '%s' into hashmap"),
|
_("Could not put variable '%s' into hashmap"),
|
||||||
(const char *)name);
|
(const char *)name);
|
||||||
@ -850,7 +814,7 @@ virNWFilterParseParamAttributes(xmlNodePtr cur)
|
|||||||
value = virNWFilterParseVarValue(val);
|
value = virNWFilterParseVarValue(val);
|
||||||
if (!value)
|
if (!value)
|
||||||
goto skip_entry;
|
goto skip_entry;
|
||||||
if (virNWFilterHashTablePut(table, nam, value, 1) < 0)
|
if (virNWFilterHashTablePut(table, nam, value) < 0)
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
}
|
}
|
||||||
value = NULL;
|
value = NULL;
|
||||||
|
@ -66,9 +66,6 @@ typedef struct _virNWFilterHashTable virNWFilterHashTable;
|
|||||||
typedef virNWFilterHashTable *virNWFilterHashTablePtr;
|
typedef virNWFilterHashTable *virNWFilterHashTablePtr;
|
||||||
struct _virNWFilterHashTable {
|
struct _virNWFilterHashTable {
|
||||||
virHashTablePtr hashTable;
|
virHashTablePtr hashTable;
|
||||||
|
|
||||||
size_t nNames;
|
|
||||||
char **names;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -81,8 +78,7 @@ virNWFilterHashTablePtr virNWFilterHashTableCreate(int n);
|
|||||||
void virNWFilterHashTableFree(virNWFilterHashTablePtr table);
|
void virNWFilterHashTableFree(virNWFilterHashTablePtr table);
|
||||||
int virNWFilterHashTablePut(virNWFilterHashTablePtr table,
|
int virNWFilterHashTablePut(virNWFilterHashTablePtr table,
|
||||||
const char *name,
|
const char *name,
|
||||||
virNWFilterVarValuePtr val,
|
virNWFilterVarValuePtr val);
|
||||||
int freeName);
|
|
||||||
void *virNWFilterHashTableRemoveEntry(virNWFilterHashTablePtr table,
|
void *virNWFilterHashTableRemoveEntry(virNWFilterHashTablePtr table,
|
||||||
const char *name);
|
const char *name);
|
||||||
int virNWFilterHashTablePutAll(virNWFilterHashTablePtr src,
|
int virNWFilterHashTablePutAll(virNWFilterHashTablePtr src,
|
||||||
|
@ -512,7 +512,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr filter,
|
|||||||
|
|
||||||
varAccess = virBufferContentAndReset(&buf);
|
varAccess = virBufferContentAndReset(&buf);
|
||||||
virNWFilterHashTablePut(missing_vars, varAccess,
|
virNWFilterHashTablePut(missing_vars, varAccess,
|
||||||
val, 1);
|
val);
|
||||||
VIR_FREE(varAccess);
|
VIR_FREE(varAccess);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user