Call basename() and dirname() in the POSIXly correct way.
Pull copies of the input string, as these functions are allowed to modify them. Free the copies after creating the new pathname string.
This commit is contained in:
parent
33f5799a81
commit
544e9b30a9
@ -50,6 +50,7 @@
|
||||
#include <libgen.h>
|
||||
#include <paths.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <unistd.h>
|
||||
@ -84,19 +85,30 @@ extern uint8_t _binary_ar5523_bin_end;
|
||||
static int
|
||||
getdevname(const char *devname, char *msgdev, char *datadev)
|
||||
{
|
||||
char *bn, *dn;
|
||||
char *bn, *bnbuf, *dn, *dnbuf;
|
||||
|
||||
dn = dirname(devname);
|
||||
if (dn == NULL)
|
||||
dnbuf = strdup(devname);
|
||||
if (dnbuf == NULL)
|
||||
return (-1);
|
||||
bn = basename(devname);
|
||||
if (bn == NULL || strncmp(bn, "ugen", 4))
|
||||
dn = dirname(dnbuf);
|
||||
bnbuf = strdup(devname);
|
||||
if (bnbuf == NULL) {
|
||||
free(dnbuf);
|
||||
return (-1);
|
||||
}
|
||||
bn = basename(bnbuf);
|
||||
if (strncmp(bn, "ugen", 4) != 0) {
|
||||
free(dnbuf);
|
||||
free(bnbuf);
|
||||
return (-1);
|
||||
}
|
||||
bn += 4;
|
||||
|
||||
/* NB: pipes are hardcoded */
|
||||
snprintf(msgdev, 256, "%s/usb/%s.1", dn, bn);
|
||||
snprintf(datadev, 256, "%s/usb/%s.2", dn, bn);
|
||||
free(dnbuf);
|
||||
free(bnbuf);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user