[BACK]Return to sndiod.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / sndiod

Diff for /src/usr.bin/sndiod/sndiod.c between version 1.46 and 1.47

version 1.46, 2021/07/12 15:09:20 version 1.47, 2021/11/01 14:43:25
Line 318 
Line 318 
         struct dev *d;          struct dev *d;
   
         for (d = dev_list; d != NULL; d = d->next) {          for (d = dev_list; d != NULL; d = d->next) {
                 if (d->alt_list->next == NULL &&                  if (strcmp(d->path, path) == 0)
                     strcmp(d->alt_list->name, path) == 0)  
                         return d;                          return d;
         }          }
         if (!bufsz && !round) {          if (!bufsz && !round) {
Line 341 
Line 340 
         struct port *c;          struct port *c;
   
         for (c = port_list; c != NULL; c = c->next) {          for (c = port_list; c != NULL; c = c->next) {
                 if (c->path_list->next == NULL &&                  if (strcmp(c->path, path) == 0)
                     strcmp(c->path_list->str, path) == 0)  
                         return c;                          return c;
         }          }
         c = port_new(path, MODE_MIDIMASK, hold);          c = port_new(path, MODE_MIDIMASK, hold);
Line 385 
Line 383 
 start_helper(int background)  start_helper(int background)
 {  {
         struct dev *d;          struct dev *d;
         struct dev_alt *da;  
         struct port *p;          struct port *p;
         struct passwd *pw;          struct passwd *pw;
         struct name *n;  
         int s[2];          int s[2];
         pid_t pid;          pid_t pid;
   
Line 424 
Line 420 
                                 err(1, "cannot drop privileges");                                  err(1, "cannot drop privileges");
                 }                  }
                 for (d = dev_list; d != NULL; d = d->next) {                  for (d = dev_list; d != NULL; d = d->next) {
                         for (da = d->alt_list; da != NULL; da = da->next) {                          dounveil(d->path, "rsnd/", "/dev/audio");
                                 dounveil(da->name, "rsnd/", "/dev/audio");                          dounveil(d->path, "rsnd/", "/dev/audioctl");
                                 dounveil(da->name, "rsnd/", "/dev/audioctl");  
                         }  
                 }                  }
                 for (p = port_list; p != NULL; p = p->next) {                  for (p = port_list; p != NULL; p = p->next) {
                         for (n = p->path_list; n != NULL; n = n->next)                          dounveil(p->path, "rmidi/", "/dev/rmidi");
                                 dounveil(n->str, "rmidi/", "/dev/rmidi");  
                 }                  }
                 if (pledge("stdio sendfd rpath wpath", NULL) == -1)                  if (pledge("stdio sendfd rpath wpath", NULL) == -1)
                         err(1, "pledge");                          err(1, "pledge");
Line 461 
Line 454 
         char base[SOCKPATH_MAX], path[SOCKPATH_MAX];          char base[SOCKPATH_MAX], path[SOCKPATH_MAX];
         unsigned int mode, dup, mmc, vol;          unsigned int mode, dup, mmc, vol;
         unsigned int hold, autovol, bufsz, round, rate;          unsigned int hold, autovol, bufsz, round, rate;
           unsigned int reopen_list;
         const char *str;          const char *str;
         struct aparams par;          struct aparams par;
         struct dev *d;          struct opt *o;
         struct port *p;          struct dev *d, *dev_first, *dev_next;
           struct port *p, *port_first, *port_next;
         struct listen *l;          struct listen *l;
         struct passwd *pw;          struct passwd *pw;
         struct tcpaddr {          struct tcpaddr {
Line 493 
Line 488 
         rmax = 1;          rmax = 1;
         aparams_init(&par);          aparams_init(&par);
         mode = MODE_PLAY | MODE_REC;          mode = MODE_PLAY | MODE_REC;
           dev_first = dev_next = NULL;
           port_first = port_next = NULL;
         tcpaddr_list = NULL;          tcpaddr_list = NULL;
         d = NULL;          d = NULL;
         p = NULL;          p = NULL;
Line 559 
Line 556 
                         break;                          break;
                 case 'q':                  case 'q':
                         p = mkport(optarg, hold);                          p = mkport(optarg, hold);
                           /* create new circulate list */
                           port_first = port_next = p;
                         break;                          break;
                 case 'Q':                  case 'Q':
                         if (p == NULL)                          if (p == NULL)
                                 errx(1, "-Q %s: no ports defined", optarg);                                  errx(1, "-Q %s: no ports defined", optarg);
                         namelist_add(&p->path_list, optarg);                          p = mkport(optarg, hold);
                           /* add to circulate list */
                           p->alt_next = port_next;
                           port_first->alt_next = p;
                           port_next = p;
                         break;                          break;
                 case 'a':                  case 'a':
                         hold = opt_onoff();                          hold = opt_onoff();
Line 584 
Line 587 
                 case 'f':                  case 'f':
                         d = mkdev(optarg, &par, 0, bufsz, round,                          d = mkdev(optarg, &par, 0, bufsz, round,
                             rate, hold, autovol);                              rate, hold, autovol);
                           /* create new circulate list */
                           dev_first = dev_next = d;
                         break;                          break;
                 case 'F':                  case 'F':
                         if (d == NULL)                          if (d == NULL)
                                 errx(1, "-F %s: no devices defined", optarg);                                  errx(1, "-F %s: no devices defined", optarg);
                         if (!dev_addname(d, optarg))                          d = mkdev(optarg, &par, 0, bufsz, round,
                                 exit(1);                              rate, hold, autovol);
                           /* add to circulate list */
                           d->alt_next = dev_next;
                           dev_first->alt_next = d;
                           dev_next = d;
                         break;                          break;
                 default:                  default:
                         fputs(usagestr, stderr);                          fputs(usagestr, stderr);
Line 612 
Line 621 
                             bufsz, round, rate, 0, autovol);                              bufsz, round, rate, 0, autovol);
                 }                  }
         }          }
   
           /*
            * Add default sub-device (if none) backed by the last device
            */
           o = opt_byname("default");
           if (o == NULL) {
                   o = mkopt("default", dev_list, pmin, pmax, rmin, rmax,
                       mode, vol, 0, dup);
                   if (o == NULL)
                           return 1;
           }
   
           /*
            * For each device create an anonymous sub-device using
            * the "default" sub-device as template
            */
         for (d = dev_list; d != NULL; d = d->next) {          for (d = dev_list; d != NULL; d = d->next) {
                 if (opt_byname(d, "default"))                  if (opt_new(d, NULL, o->pmin, o->pmax, o->rmin, o->rmax,
                         continue;                          o->maxweight, o->mtc != NULL, o->dup, o->mode) == NULL)
                 if (mkopt("default", d, pmin, pmax, rmin, rmax,  
                         mode, vol, mmc, dup) == NULL)  
                         return 1;                          return 1;
                   dev_adjpar(d, o->mode, o->pmax, o->rmax);
         }          }
   
         setsig();          setsig();
Line 652 
Line 676 
                 if (!dev_init(d))                  if (!dev_init(d))
                         return 1;                          return 1;
         }          }
           for (o = opt_list; o != NULL; o = o->next)
                   opt_init(o);
         if (background) {          if (background) {
                 log_flush();                  log_flush();
                 log_level = 0;                  log_level = 0;
Line 680 
Line 706 
                         break;                          break;
                 if (reopen_flag) {                  if (reopen_flag) {
                         reopen_flag = 0;                          reopen_flag = 0;
                         for (d = dev_list; d != NULL; d = d->next)  
                                 dev_reopen(d);                          reopen_list = 0;
                         for (p = port_list; p != NULL; p = p->next)                          for (d = dev_list; d != NULL; d = d->next) {
                                 port_reopen(p);                                  if (d->pstate != DEV_CFG)
                                           reopen_list |= (1 << d->num);
                           }
                           for (d = dev_list; d != NULL; d = d->next) {
                                   if (reopen_list & (1 << d->num))
                                           dev_migrate(d);
                           }
   
                           reopen_list = 0;
                           for (p = port_list; p != NULL; p = p->next) {
                                   if (p->state != PORT_CFG)
                                           reopen_list |= (1 << p->num);
                           }
                           for (p = port_list; p != NULL; p = p->next) {
                                   if (reopen_list & (1 << p->num)) {
                                           if (port_migrate(p) != p)
                                                   port_close(p);
                                   }
                           }
                 }                  }
                 if (!fdpass_peer)                  if (!fdpass_peer)
                         break;                          break;
Line 695 
Line 739 
                 listen_close(listen_list);                  listen_close(listen_list);
         while (sock_list != NULL)          while (sock_list != NULL)
                 sock_close(sock_list);                  sock_close(sock_list);
           for (o = opt_list; o != NULL; o = o->next)
                   opt_done(o);
         for (d = dev_list; d != NULL; d = d->next)          for (d = dev_list; d != NULL; d = d->next)
                 dev_done(d);                  dev_done(d);
         for (p = port_list; p != NULL; p = p->next)          for (p = port_list; p != NULL; p = p->next)

Legend:
Removed from v.1.46  
changed lines
  Added in v.1.47