From: Holger Eitzenberger Date: Mon, 24 Jan 2011 21:36:32 +0000 (+0100) Subject: ipset: turn Set name[] into a const pointer X-Git-Tag: v6.0~29 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba623ef3b9ce8f2a92f0f1e47163468932816ab3;p=ipset ipset: turn Set name[] into a const pointer Also check for the name length. Note that passing errno values back is not done consistently at various place, as there are some functions which set errno manually, others pass -errno back. I use the -errno approach here, as it is slightly shorter. Signed-off-by: Holger Eitzenberger Signed-off-by: Jozsef Kadlecsik --- diff --git a/include/libipset/types.h b/include/libipset/types.h index f9c8f2d..d8973db 100644 --- a/include/libipset/types.h +++ b/include/libipset/types.h @@ -70,7 +70,7 @@ struct ipset_elem { * but for the readability the full list is supported. */ struct ipset_type { - char name[IPSET_MAXNAMELEN]; /* type name */ + const char *name; uint8_t revision; /* revision number */ uint8_t family; /* supported family */ uint8_t dimension; /* elem dimension */ diff --git a/lib/types.c b/lib/types.c index 69dac6a..5eb53c4 100644 --- a/lib/types.c +++ b/lib/types.c @@ -441,13 +441,15 @@ ipset_type_add(struct ipset_type *type) assert(type); + if (strlen(type->name) > IPSET_MAXNAMELEN - 1) + return -EINVAL; + /* Add to the list: higher revision numbers first */ for (t = typelist, prev = NULL; t != NULL; t = t->next) { if (STREQ(t->name, type->name)) { - if (t->revision == type->revision) { - errno = EEXIST; - return -1; - } else if (t->revision < type->revision) { + if (t->revision == type->revision) + return -EEXIST; + else if (t->revision < type->revision) { type->next = t; if (prev) prev->next = type; @@ -457,10 +459,9 @@ ipset_type_add(struct ipset_type *type) } } if (t->next != NULL && STREQ(t->next->name, type->name)) { - if (t->next->revision == type->revision) { - errno = EEXIST; - return -1; - } else if (t->next->revision < type->revision) { + if (t->next->revision == type->revision) + return -EEXIST; + else if (t->next->revision < type->revision) { type->next = t->next; t->next = type; return 0;