Fix strdup conflict on other platforms

In the FreeBSD kernel the strdup signature is:

```
char	*strdup(const char *__restrict, struct malloc_type *);
```

It's unfortunate that the developers have chosen to change
the signature of libc functions - but it's what I have to
deal with.

Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9433
This commit is contained in:
Matthew Macy
2019-10-10 09:47:06 -07:00
committed by Brian Behlendorf
parent c5858ff946
commit e4f5fa1229
21 changed files with 76 additions and 75 deletions
+4 -4
View File
@@ -120,18 +120,18 @@ __strdup(const char *str, int flags)
}
char *
strdup(const char *str)
kmem_strdup(const char *str)
{
return (__strdup(str, KM_SLEEP));
}
EXPORT_SYMBOL(strdup);
EXPORT_SYMBOL(kmem_strdup);
void
strfree(char *str)
kmem_strfree(char *str)
{
kfree(str);
}
EXPORT_SYMBOL(strfree);
EXPORT_SYMBOL(kmem_strfree);
/*
* General purpose unified implementation of kmem_alloc(). It is an
+3 -3
View File
@@ -631,7 +631,7 @@ kstat_detect_collision(kstat_proc_entry_t *kpep)
parent = kmem_asprintf("%s", kpep->kpe_module);
if ((cp = strrchr(parent, '/')) == NULL) {
strfree(parent);
kmem_strfree(parent);
return (0);
}
@@ -639,13 +639,13 @@ kstat_detect_collision(kstat_proc_entry_t *kpep)
if ((module = kstat_find_module(parent)) != NULL) {
list_for_each_entry(tmp, &module->ksm_kstat_list, kpe_list) {
if (strncmp(tmp->kpe_name, cp+1, KSTAT_STRLEN) == 0) {
strfree(parent);
kmem_strfree(parent);
return (EEXIST);
}
}
}
strfree(parent);
kmem_strfree(parent);
return (0);
}
+2 -2
View File
@@ -1038,7 +1038,7 @@ taskq_create(const char *name, int nthreads, pri_t pri,
spin_lock_init(&tq->tq_lock);
INIT_LIST_HEAD(&tq->tq_thread_list);
INIT_LIST_HEAD(&tq->tq_active_list);
tq->tq_name = strdup(name);
tq->tq_name = kmem_strdup(name);
tq->tq_nactive = 0;
tq->tq_nthreads = 0;
tq->tq_nspawn = 0;
@@ -1178,7 +1178,7 @@ taskq_destroy(taskq_t *tq)
spin_unlock_irqrestore(&tq->tq_lock, flags);
strfree(tq->tq_name);
kmem_strfree(tq->tq_name);
kmem_free(tq, sizeof (taskq_t));
}
EXPORT_SYMBOL(taskq_destroy);