mirror of https://github.com/ericonr/sndio.git
Order opt_list in opt_new() call order, limit items to OPT_NMAX
This commit is contained in:
parent
8e99cca36c
commit
e891595ec7
31
sndiod/opt.c
31
sndiod/opt.c
|
@ -30,17 +30,10 @@ opt_new(struct dev *d, char *name,
|
|||
int pmin, int pmax, int rmin, int rmax,
|
||||
int maxweight, int mmc, int dup, unsigned int mode)
|
||||
{
|
||||
struct opt *o;
|
||||
unsigned int len;
|
||||
struct opt *o, **po;
|
||||
unsigned int len, num;
|
||||
char c;
|
||||
|
||||
if (opt_byname(d, name)) {
|
||||
dev_log(d);
|
||||
log_puts(".");
|
||||
log_puts(name);
|
||||
log_puts(": already defined\n");
|
||||
return NULL;
|
||||
}
|
||||
for (len = 0; name[len] != '\0'; len++) {
|
||||
if (len == OPT_NAMEMAX) {
|
||||
log_puts(name);
|
||||
|
@ -55,7 +48,23 @@ opt_new(struct dev *d, char *name,
|
|||
return NULL;
|
||||
}
|
||||
}
|
||||
num = 0;
|
||||
for (po = &opt_list; *po != NULL; po = &(*po)->next)
|
||||
num++;
|
||||
if (num >= OPT_NMAX) {
|
||||
log_puts(name);
|
||||
log_puts(": too many opts\n");
|
||||
return NULL;
|
||||
}
|
||||
if (opt_byname(d, name)) {
|
||||
dev_log(d);
|
||||
log_puts(".");
|
||||
log_puts(name);
|
||||
log_puts(": already defined\n");
|
||||
return NULL;
|
||||
}
|
||||
o = xmalloc(sizeof(struct opt));
|
||||
o->num = num;
|
||||
o->dev = d;
|
||||
if (mode & MODE_PLAY) {
|
||||
o->pmin = pmin;
|
||||
|
@ -70,8 +79,8 @@ opt_new(struct dev *d, char *name,
|
|||
o->dup = dup;
|
||||
o->mode = mode;
|
||||
memcpy(o->name, name, len + 1);
|
||||
o->next = opt_list;
|
||||
opt_list = o;
|
||||
o->next = *po;
|
||||
*po = o;
|
||||
if (log_level >= 2) {
|
||||
dev_log(d);
|
||||
log_puts(".");
|
||||
|
|
|
@ -17,11 +17,14 @@
|
|||
#ifndef OPT_H
|
||||
#define OPT_H
|
||||
|
||||
#define OPT_NMAX 16
|
||||
|
||||
struct dev;
|
||||
|
||||
struct opt {
|
||||
struct opt *next;
|
||||
struct dev *dev;
|
||||
int num;
|
||||
#define OPT_NAMEMAX 11
|
||||
char name[OPT_NAMEMAX + 1];
|
||||
int maxweight; /* max dynamic range for clients */
|
||||
|
|
Loading…
Reference in New Issue