#include <ctype.h>
#include <dirent.h>
-static char *
-fullname (char *dir, char *file)
-{
- char *new;
- int dlen = strlen (dir);
- int flen = strlen (file);
- int slen = 0;
-
- if (dir[dlen-1] != '/')
- slen = 1;
- new = malloc (dlen + slen + flen + 1);
- if (!new)
- return 0;
- strcpy(new, dir);
- if (slen)
- strcat (new, "/");
- strcat(new, file);
- return new;
-}
-
static char *
load_string(char *dir, char *file)
{
- char *full = fullname(dir, file);
+ char *full = aoview_fullname(dir, file);
char line[4096];
char *r;
FILE *f;
return i;
}
-static char *
-basename(char *file)
+static int
+dir_filter_tty_colon(const struct dirent *d)
{
- char *b;
-
- b = strrchr(file, '/');
- if (!b)
- return file;
- return b + 1;
+ return strncmp(d->d_name, "tty:", 4) == 0;
}
static int
dir_filter_tty(const struct dirent *d)
{
- return strncmp(d->d_name, "tty:", 4) == 0;
+ return strncmp(d->d_name, "tty", 3) == 0;
}
static char *
int num_interfaces;
char endpoint_base[20];
char *endpoint_full;
+ char *tty_dir;
int ntty;
char *tty;
- base = basename(sys);
+ base = aoview_basename(sys);
num_configs = load_hex(sys, "bNumConfigurations");
num_interfaces = load_hex(sys, "bNumInterfaces");
for (config = 1; config <= num_configs; config++) {
for (interface = 0; interface < num_interfaces; interface++) {
sprintf(endpoint_base, "%s:%d.%d",
base, config, interface);
- endpoint_full = fullname(sys, endpoint_base);
+ endpoint_full = aoview_fullname(sys, endpoint_base);
+
+ /* Check for tty:ttyACMx style names
+ */
ntty = scandir(endpoint_full, &namelist,
- dir_filter_tty,
+ dir_filter_tty_colon,
alphasort);
+ if (ntty > 0) {
+ free(endpoint_full);
+ tty = aoview_fullname("/dev", namelist[0]->d_name + 4);
+ free(namelist);
+ return tty;
+ }
+
+ /* Check for tty/ttyACMx style names
+ */
+ tty_dir = aoview_fullname(endpoint_full, "tty");
free(endpoint_full);
- if (ntty) {
- tty = fullname("/dev", namelist[0]->d_name + 4);
+ ntty = scandir(tty_dir, &namelist,
+ dir_filter_tty,
+ alphasort);
+ free (tty_dir);
+ if (ntty > 0) {
+ tty = aoview_fullname("/dev", namelist[0]->d_name);
free(namelist);
return tty;
}
continue;
if (c == '-')
continue;
+ if (c == '.' && n != d->d_name + 1)
+ continue;
return 0;
}
return 1;
if (!n)
return 0;
for (e = 0; e < n; e++) {
- dir = fullname(USB_DEVICES, ents[e]->d_name);
+ dir = aoview_fullname(USB_DEVICES, ents[e]->d_name);
dev = usb_scan_device(dir);
free(dir);
if (dev->idVendor == 0xfffe && dev->tty) {