Changeset 4052:c46fdb0f198a in roaraudio


Ignore:
Timestamp:
07/15/10 14:51:05 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

make argument parsing more safe, error on wong number of arguments

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/roard.c

    r4049 r4052  
    10931093// MAIN: 
    10941094 
     1095#define _CKHAVEARGS(x) if ( (i + (x)) >= argc ) { ROAR_ERR("Option requires more arguments."); return 70; } 
     1096 
    10951097#ifdef ROAR_HAVE_MAIN_ARGS 
    10961098int main (int argc, char * argv[]) { 
     
    13491351   realtime++; 
    13501352  } else if ( strcmp(k, "--chroot") == 0 ) { 
     1353   _CKHAVEARGS(1); 
    13511354#ifdef ROAR_HAVE_CHROOT 
    13521355   chrootdir = argv[++i]; 
     
    13681371#endif 
    13691372  } else if ( strcmp(k, "--location") == 0 ) { 
     1373   _CKHAVEARGS(1); 
    13701374   g_config->location = argv[++i]; 
    13711375  } else if ( strcmp(k, "--pidfile") == 0 ) { 
     1376   _CKHAVEARGS(1); 
    13721377#ifdef SUPPORT_PIDFILE 
    13731378   pidfile = argv[++i]; 
     
    13851390 
    13861391  } else if ( strcmp(k, "--plugin-load") == 0 ) { 
     1392   _CKHAVEARGS(1); 
    13871393   if ( plugins_load(argv[++i]) == -1 ) { 
    13881394    ROAR_ERR("Can not load plugin"); 
     
    13941400 
    13951401  } else if ( strcmp(k, "-R") == 0 || strcmp(k, "--rate") == 0 ) { 
     1402   _CKHAVEARGS(1); 
    13961403   sa.rate = atoi(argv[++i]); 
    13971404  } else if ( strcmp(k, "-B") == 0 || strcmp(k, "--bits") == 0 ) { 
     1405   _CKHAVEARGS(1); 
    13981406   sa.bits = atoi(argv[++i]); 
    13991407  } else if ( strcmp(k, "-C") == 0 || strcmp(k, "--chans") == 0 ) { 
     1408   _CKHAVEARGS(1); 
    14001409   sa.channels = atoi(argv[++i]); 
    14011410 
    14021411  } else if ( strcmp(k, "--aiprofile") == 0 ) { 
     1412   _CKHAVEARGS(1); 
    14031413   if ( roar_profile2info(&sa, argv[++i]) == -1 ) { 
    14041414    ROAR_ERR("Unknown audio profile: %s", argv[i]); 
     
    14081418 
    14091419  } else if ( strcmp(k, "--stream-flags") == 0 ) { 
     1420   _CKHAVEARGS(1); 
    14101421   if ( update_stream_flags(argv[++i]) == -1 ) { 
    14111422    ROAR_ERR("Can not set stream flags"); 
     
    14141425 
    14151426  } else if ( strcmp(k, "-d") == 0 || strcmp(k, "--driver") == 0 ) { 
     1427   _CKHAVEARGS(1); 
    14161428   driver = argv[++i]; 
    14171429   if ( strcmp(driver, "list") == 0 ) { 
     
    14211433   } 
    14221434  } else if ( strcmp(k, "-D") == 0 || strcmp(k, "--device") == 0 ) { 
     1435   _CKHAVEARGS(1); 
    14231436   device = argv[++i]; 
    14241437  } else if ( strcmp(k, "-dO") == 0 ) { 
     1438   _CKHAVEARGS(1); 
    14251439   opts = argv[++i]; 
    14261440  } else if ( strcmp(k, "--list-driver") == 0 ) { 
     
    14291443 
    14301444  } else if ( strcmp(k, "-o") == 0 || strcmp(k, "--odriver") == 0 ) { 
     1445   _CKHAVEARGS(1); 
    14311446   o_drv  = argv[++i]; 
    14321447  } else if ( strcmp(k, "-O") == 0 || strcmp(k, "--odevice") == 0 ) { 
     1448   _CKHAVEARGS(1); 
    14331449   o_dev  = argv[++i]; 
    14341450  } else if ( strcmp(k, "-oO") == 0 ) { 
     1451   _CKHAVEARGS(1); 
    14351452   o_opts = argv[++i]; 
    14361453  } else if ( strcmp(k, "-oP") == 0 ) { 
     
    14441461 
    14451462  } else if ( strcmp(k, "-s") == 0 || strcmp(k, "--source") == 0 ) { 
     1463   _CKHAVEARGS(1); 
    14461464#ifndef ROAR_WITHOUT_DCOMP_SOURCES 
    14471465   s_drv = argv[++i]; 
    14481466#else 
    14491467   ROAR_ERR("main(*): No support for sources compiled in"); 
     1468   i++; 
    14501469#endif 
    14511470  } else if ( strcmp(k, "-S") == 0 ) { 
     1471   _CKHAVEARGS(1); 
    14521472#ifndef ROAR_WITHOUT_DCOMP_SOURCES 
    14531473   s_dev = argv[++i]; 
    14541474#else 
    14551475   ROAR_ERR("main(*): No support for sources compiled in"); 
     1476   i++; 
    14561477#endif 
    14571478  } else if ( strcmp(k, "-sO") == 0 ) { 
     1479   _CKHAVEARGS(1); 
    14581480#ifndef ROAR_WITHOUT_DCOMP_SOURCES 
    14591481   s_opt = argv[++i]; 
    14601482#else 
    14611483   ROAR_ERR("main(*): No support for sources compiled in"); 
     1484   i++; 
    14621485#endif 
    14631486  } else if ( strcmp(k, "-sC") == 0 ) { 
     1487   _CKHAVEARGS(1); 
    14641488#ifndef ROAR_WITHOUT_DCOMP_SOURCES 
    14651489   s_con = argv[++i]; 
    14661490#else 
    14671491   ROAR_ERR("main(*): No support for sources compiled in"); 
     1492   i++; 
    14681493#endif 
    14691494  } else if ( strcmp(k, "-sP") == 0 ) { 
     
    14941519 
    14951520  } else if ( strcmp(k, "--light-channels") == 0 ) { 
     1521   _CKHAVEARGS(1); 
    14961522#ifndef ROAR_WITHOUT_DCOMP_LIGHT 
    14971523   light_channels = atoi(argv[++i]); 
    14981524#else 
    14991525   ROAR_WARN("main(*): no light subsystem compiled in"); 
     1526   i++; 
    15001527#endif 
    15011528 
    15021529  } else if ( strcmp(k, "--rds-pi") == 0 ) { 
     1530   _CKHAVEARGS(1); 
    15031531#ifndef ROAR_WITHOUT_DCOMP_RDTCS 
    15041532   g_rdtcs.rds.pi = atoi(argv[++i]); 
    15051533#else 
    15061534   ROAR_WARN("main(*): no RDTCS subsystem compiled in"); 
     1535   i++; 
    15071536#endif 
    15081537  } else if ( strcmp(k, "--rds-ps") == 0 ) { 
     1538   _CKHAVEARGS(1); 
    15091539#ifndef ROAR_WITHOUT_DCOMP_RDTCS 
    15101540   if ( rdtcs_rds_set_ps(argv[++i]) == -1 ) { 
     
    15141544#else 
    15151545   ROAR_WARN("main(*): no RDTCS subsystem compiled in"); 
     1546   i++; 
    15161547#endif 
    15171548  } else if ( strcmp(k, "--rds-pty") == 0 ) { 
     1549   _CKHAVEARGS(1); 
    15181550#ifndef ROAR_WITHOUT_DCOMP_RDTCS 
    15191551   if ( rdtcs_rds_set_pty(argv[++i]) == -1 ) { 
     
    15231555#else 
    15241556   ROAR_WARN("main(*): no RDTCS subsystem compiled in"); 
     1557   i++; 
    15251558#endif 
    15261559  } else if ( strcmp(k, "--rds-tp") == 0 ) { 
     
    15571590#endif 
    15581591  } else if ( strcmp(k, "--midi-console") == 0 ) { 
     1592   _CKHAVEARGS(1); 
    15591593#ifndef ROAR_WITHOUT_DCOMP_CB 
    15601594   midi_config.console_dev = argv[++i]; 
     
    15621596#else 
    15631597   ROAR_ERR("main(*): No support for MIDI subsystem part CB compiled in"); 
     1598   i++; 
    15641599#endif 
    15651600 
     
    15781613 
    15791614  } else if ( strcmp(k, "--x11-display") == 0 || strcmp(k, "--display") == 0 ) { 
     1615   _CKHAVEARGS(1); 
    15801616#ifdef ROAR_HAVE_LIBX11 
    15811617   x11display = argv[++i]; 
     
    15871623 
    15881624  } else if ( strcmp(k, "-p") == 0 || strcmp(k, "--port") == 0 ) { 
     1625   _CKHAVEARGS(1); 
    15891626   // This is only useful in INET not UNIX mode. 
    15901627#ifdef ROAR_SUPPORT_LISTEN 
     
    16101647#endif 
    16111648  } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 || strcmp(k, "--sock") == 0 ) { 
     1649   _CKHAVEARGS(1); 
    16121650#ifdef ROAR_SUPPORT_LISTEN 
    16131651   sock_addr = argv[++i]; 
     1652#else 
     1653   i++; 
    16141654#endif 
    16151655 
     
    16221662#endif 
    16231663  } else if ( strcmp(k, "--proto-dir") == 0 ) { 
     1664   _CKHAVEARGS(1); 
    16241665#ifdef ROAR_SUPPORT_LISTEN 
    16251666   if ( (sock_dir = roar_str2dir(argv[++i])) == -1 ) { 
     
    16271668    return 1; 
    16281669   } 
     1670#else 
     1671   i++; 
    16291672#endif 
    16301673  } else if ( strcmp(k, "--proto-rate") == 0 ) { 
     1674   _CKHAVEARGS(1); 
    16311675#ifdef ROAR_SUPPORT_LISTEN 
    16321676   sock_info.rate = atoi(argv[++i]); 
     1677#else 
     1678   i++; 
    16331679#endif 
    16341680  } else if ( strcmp(k, "--proto-bits") == 0 ) { 
     1681   _CKHAVEARGS(1); 
    16351682#ifdef ROAR_SUPPORT_LISTEN 
    16361683   sock_info.bits = atoi(argv[++i]); 
     1684#else 
     1685   i++; 
    16371686#endif 
    16381687  } else if ( strcmp(k, "--proto-chans") == 0 ) { 
     1688   _CKHAVEARGS(1); 
    16391689#ifdef ROAR_SUPPORT_LISTEN 
    16401690   sock_info.channels = atoi(argv[++i]); 
     1691#else 
     1692   i++; 
    16411693#endif 
    16421694  } else if ( strcmp(k, "--proto-codec") == 0 ) { 
     1695   _CKHAVEARGS(1); 
    16431696#ifdef ROAR_SUPPORT_LISTEN 
    16441697   if ( (sock_info.codec = roar_str2codec(argv[++i])) == -1 ) { 
     
    16461699    return 1; 
    16471700   } 
     1701#else 
     1702   i++; 
    16481703#endif 
    16491704  } else if ( strcmp(k, "--proto-aiprofile") == 0 ) { 
     1705   _CKHAVEARGS(1); 
    16501706#ifdef ROAR_SUPPORT_LISTEN 
    16511707   if ( roar_profile2info(&sock_info, argv[++i]) == -1 ) { 
     
    16531709    return 1; 
    16541710   } 
     1711#else 
     1712   i++; 
    16551713#endif 
    16561714  } else if ( strcmp(k, "--list-profiles") == 0 ) { 
     
    16601718#endif 
    16611719  } else if ( strcmp(k, "--proto-profile") == 0 ) { 
     1720   _CKHAVEARGS(1); 
    16621721#ifdef ROAR_SUPPORT_LISTEN 
    16631722   if ( get_listen_profile(argv[++i], &port, &sock_addr, &sock_type, &sock_proto, &sock_dir, &sock_info) == -1 ) { 
     
    16651724    return 1; 
    16661725   } 
     1726#else 
     1727   i++; 
    16671728#endif 
    16681729 
     
    17431804 
    17441805  } else if ( strcmp(k, "--jumbo-mtu") == 0 ) { 
     1806   _CKHAVEARGS(1); 
    17451807   g_config->jumbo_mtu = atoi(argv[++i]); 
    17461808 
    17471809  } else if ( strcmp(k, "-G") == 0 ) { 
     1810   _CKHAVEARGS(1); 
    17481811   sock_grp  = argv[++i]; 
    17491812  } else if ( strcmp(k, "-U") == 0 ) { 
     1813   _CKHAVEARGS(1); 
    17501814   sock_user = argv[++i]; 
    17511815 
     
    17571821#endif 
    17581822  } else if ( strcmp(k, "--client-fh") == 0 ) { 
     1823   _CKHAVEARGS(1); 
    17591824   if ( clients_new_from_fh(atoi(argv[++i]), ROAR_PROTO_ROARAUDIO, ROAR_BYTEORDER_NETWORK, 1) == -1 ) { 
    17601825    ROAR_ERR("main(*): Can not set client's fh"); 
     
    17621827   } 
    17631828  } else if ( strcmp(k, "--close-fh") == 0 ) { 
     1829   _CKHAVEARGS(1); 
    17641830#ifdef ROAR_HAVE_IO_POSIX 
    17651831   close(atoi(argv[++i])); 
Note: See TracChangeset for help on using the changeset viewer.