netlink: Introduce nla_strdup()
This is similar to strdup() for netlink string attributes. Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
Родитель
6e692678d7
Коммит
2cf0c8b3e6
|
@ -247,6 +247,7 @@ int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head,
|
|||
int nla_policy_len(const struct nla_policy *, int);
|
||||
struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype);
|
||||
size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize);
|
||||
char *nla_strdup(const struct nlattr *nla, gfp_t flags);
|
||||
int nla_memcpy(void *dest, const struct nlattr *src, int count);
|
||||
int nla_memcmp(const struct nlattr *nla, const void *data, size_t size);
|
||||
int nla_strcmp(const struct nlattr *nla, const char *str);
|
||||
|
|
24
lib/nlattr.c
24
lib/nlattr.c
|
@ -271,6 +271,30 @@ size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize)
|
|||
}
|
||||
EXPORT_SYMBOL(nla_strlcpy);
|
||||
|
||||
/**
|
||||
* nla_strdup - Copy string attribute payload into a newly allocated buffer
|
||||
* @nla: attribute to copy the string from
|
||||
* @flags: the type of memory to allocate (see kmalloc).
|
||||
*
|
||||
* Returns a pointer to the allocated buffer or NULL on error.
|
||||
*/
|
||||
char *nla_strdup(const struct nlattr *nla, gfp_t flags)
|
||||
{
|
||||
size_t srclen = nla_len(nla);
|
||||
char *src = nla_data(nla), *dst;
|
||||
|
||||
if (srclen > 0 && src[srclen - 1] == '\0')
|
||||
srclen--;
|
||||
|
||||
dst = kmalloc(srclen + 1, flags);
|
||||
if (dst != NULL) {
|
||||
memcpy(dst, src, srclen);
|
||||
dst[srclen] = '\0';
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
EXPORT_SYMBOL(nla_strdup);
|
||||
|
||||
/**
|
||||
* nla_memcpy - Copy a netlink attribute into another memory area
|
||||
* @dest: where to copy to memcpy
|
||||
|
|
Загрузка…
Ссылка в новой задаче