diff --git a/ChangeLog b/ChangeLog index 59b51070..43b2d622 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16659,3 +16659,5 @@ * Converted sas_filter(1) to use RDApplication. 2018-02-03 Fred Gleason <fredg@paravelsystems.com> * Converted wings_filter(1) to use RDApplication. +2018-02-03 Fred Gleason <fredg@paravelsystems.com> + * Fixed a bug that broke command processing in rdimport(1). diff --git a/utils/rdimport/rdimport.cpp b/utils/rdimport/rdimport.cpp index 65868f22..2b0cdf07 100644 --- a/utils/rdimport/rdimport.cpp +++ b/utils/rdimport/rdimport.cpp @@ -114,64 +114,69 @@ MainObject::MainObject(QObject *parent) for(unsigned i=0;i<rda->cmdSwitch()->keys()-2;i++) { if(rda->cmdSwitch()->key(i)=="--verbose") { import_verbose=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--log-mode") { import_verbose=true; import_log_mode=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--to-cart") { import_cart_number=rda->cmdSwitch()->value(i).toUInt(&ok); if((!ok)||(import_cart_number<1)||(import_cart_number>999999)) { fprintf(stderr,"rdimport: invalid cart number\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } if(import_use_cartchunk_cutid) { fprintf(stderr,"rdimport: '--to-cart' and '--use-cartchunk-cutid' are mutually exclusive\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } import_single_cart=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--use-cartchunk-cutid") { if(import_cart_number!=0) { fprintf(stderr,"rdimport: '--to-cart' and '--use-cartchunk-cutid' are mutually exclusive\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } import_use_cartchunk_cutid=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--cart-number-offset") { import_cart_number_offset=rda->cmdSwitch()->value(i).toInt(&ok); if(!ok) { fprintf(stderr,"rdimport: invalid --cart-number-offset\n"); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--title-from-cartchunk-cutid") { import_title_from_cartchunk_cutid=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--delete-source") { import_delete_source=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--delete-cuts") { import_delete_cuts=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--startdate-offset") { import_startdate_offset=rda->cmdSwitch()->value(i).toInt(&ok); if(!ok) { fprintf(stderr,"rdimport: invalid startdate-offset\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--enddate-offset") { import_enddate_offset=rda->cmdSwitch()->value(i).toInt(&ok); if(!ok) { fprintf(stderr,"rdimport: invalid enddate-offset\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--clear-datetimes") { import_clear_datetimes=true; @@ -181,42 +186,42 @@ MainObject::MainObject(QObject *parent) QStringList f0=QStringList().split(",",rda->cmdSwitch()->value(i)); if(f0.size()!=2) { fprintf(stderr,"rdimport: invalid argument to --set-datetimes\n"); - exit(256); + exit(2); } for(unsigned j=0;j<2;j++) { if((f0[j].length()!=15)||(f0[j].mid(8,1)!="-")) { fprintf(stderr,"rdimport: invalid argument to --set-datetimes\n"); - exit(256); + exit(2); } unsigned year=f0[j].left(4).toUInt(&ok); if(!ok) { fprintf(stderr,"rdimport: invalid year argument to --set-datetimes\n"); - exit(256); + exit(2); } unsigned month=f0[j].mid(4,2).toUInt(&ok); if((!ok)||(month>12)) { fprintf(stderr,"rdimport: invalid month argument to --set-datetimes\n"); - exit(256); + exit(2); } unsigned day=f0[j].mid(6,2).toUInt(&ok); if((!ok)||(day>31)) { fprintf(stderr,"rdimport: invalid day argument to --set-datetimes\n"); - exit(256); + exit(2); } unsigned hour=f0[j].mid(9,2).toUInt(&ok); if((!ok)||(hour>23)) { fprintf(stderr,"rdimport: invalid hour argument to --set-datetimes\n"); - exit(256); + exit(2); } unsigned min=f0[j].mid(11,2).toUInt(&ok); if((!ok)||(min>59)) { fprintf(stderr,"rdimport: invalid minute argument to --set-datetimes\n"); - exit(256); + exit(2); } unsigned sec=f0[j].right(2).toUInt(&ok); if((!ok)||(sec>59)) { fprintf(stderr,"rdimport: invalid seconds argument to --set-datetimes\n"); - exit(256); + exit(2); } import_datetimes[j]=QDateTime(QDate(year,month,day), QTime(hour,min,sec)); @@ -226,44 +231,47 @@ MainObject::MainObject(QObject *parent) } if(import_datetimes[0]>=import_datetimes[1]) { fprintf(stderr,"rdimport: datetime cannot end before it begins\n"); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--set-daypart-times") { QStringList f0=QStringList().split(",",rda->cmdSwitch()->value(i)); if(f0.size()!=2) { fprintf(stderr,"rdimport: invalid argument to --set-daypart-times\n"); - exit(256); + exit(2); } for(unsigned j=0;j<2;j++) { if(f0[j].length()!=6) { fprintf(stderr,"rdimport: invalid argument to --set-daypart-times\n"); - exit(256); + exit(2); } unsigned hour=f0[j].left(2).toUInt(&ok); if((!ok)||(hour>23)) { fprintf(stderr,"rdimport: invalid hour argument to --set-daypart-times\n"); - exit(256); + exit(2); } unsigned min=f0[j].mid(2,2).toUInt(&ok); if((!ok)||(min>59)) { fprintf(stderr,"rdimport: invalid minute argument to --set-daypart-times\n"); - exit(256); + exit(2); } unsigned sec=f0[j].right(2).toUInt(&ok); if((!ok)||(sec>59)) { fprintf(stderr,"rdimport: invalid seconds argument to --set-daypart-times\n"); - exit(256); + exit(2); } import_dayparts[j].setHMS(hour,min,sec); } if(import_dayparts[0]>=import_dayparts[1]) { fprintf(stderr,"rdimport: daypart cannot end before it begins\n"); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--to-mono") { import_to_mono=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--clear-daypart-times") { import_clear_dayparts=true; @@ -274,50 +282,54 @@ MainObject::MainObject(QObject *parent) if(import_persistent_dropbox_id<0) { import_delete_source=true; } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--add-scheduler-code") { import_add_scheduler_codes.push_back(rda->cmdSwitch()->value(i)); + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--set-user-defined") { import_set_user_defined=rda->cmdSwitch()->value(i); + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--metadata-pattern") { import_metadata_pattern=rda->cmdSwitch()->value(i); if(!VerifyPattern(import_metadata_pattern)) { fprintf(stderr,"rdimport: invalid metadata pattern\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--fix-broken-formats") { import_fix_broken_formats=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--persistent-dropbox-id") { import_persistent_dropbox_id=rda->cmdSwitch()->value(i).toInt(&ok); if(!ok) { fprintf(stderr,"rdimport: invalid persistent dropbox id\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--create-startdate-offset") { import_create_startdate_offset=rda->cmdSwitch()->value(i).toInt(&ok); if(!ok) { fprintf(stderr,"rdimport: invalid create-startddate-offset\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } import_create_dates=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--create-enddate-offset") { import_create_enddate_offset=rda->cmdSwitch()->value(i).toInt(&ok); if((!ok) || (import_create_startdate_offset > import_create_enddate_offset )) { fprintf(stderr,"rdimport: invalid create-enddate-offset\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } import_create_dates=true; + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--set-string-agency") { import_string_agency=rda->cmdSwitch()->value(i); @@ -395,12 +407,6 @@ MainObject::MainObject(QObject *parent) import_xml=true; rda->cmdSwitch()->setProcessed(i,true); } - - if(!rda->cmdSwitch()->processed(i)) { - fprintf(stderr,"rdimport: unknown command option \"%s\"\n", - (const char *)rda->cmdSwitch()->key(i)); - exit(2); - } } // @@ -448,8 +454,7 @@ MainObject::MainObject(QObject *parent) if(!import_group->exists()) { fprintf(stderr,"rdimport: invalid group specified\n"); delete import_group; - delete rda->cmdSwitch(); - exit(256); + exit(2); } import_file_key=i+1; i=rda->cmdSwitch()->keys(); @@ -457,15 +462,13 @@ MainObject::MainObject(QObject *parent) } if(import_group==NULL) { fprintf(stderr,"rdimport: invalid group specified\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } if(import_cart_number>0) { if(!import_group->cartNumberValid(import_cart_number)) { fprintf(stderr,"rdimport: invalid cart number for group\n"); delete import_group; - delete rda->cmdSwitch(); - exit(256); + exit(2); } } @@ -476,7 +479,7 @@ MainObject::MainObject(QObject *parent) if(!SchedulerCodeExists(import_add_scheduler_codes[i])) { fprintf(stderr,"scheduler code \"%s\" does not exist\n", (const char *)import_add_scheduler_codes[i].utf8()); - exit(256); + exit(2); } } @@ -493,7 +496,7 @@ MainObject::MainObject(QObject *parent) import_segue_level=0; import_segue_length=0; - for(unsigned i=0;i<rda->cmdSwitch()->keys();i++) { + for(unsigned i=0;i<rda->cmdSwitch()->keys()-2;i++) { if(rda->cmdSwitch()->key(i)=="--normalization-level") { n=rda->cmdSwitch()->value(i).toInt(&ok); if(ok&&(n<=0)) { @@ -501,9 +504,9 @@ MainObject::MainObject(QObject *parent) } else { fprintf(stderr,"rdimport: invalid normalization level\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--autotrim-level") { n=rda->cmdSwitch()->value(i).toInt(&ok); @@ -512,9 +515,9 @@ MainObject::MainObject(QObject *parent) } else { fprintf(stderr,"rdimport: invalid autotrim level\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--segue-level") { n=rda->cmdSwitch()->value(i).toInt(&ok); @@ -523,10 +526,10 @@ MainObject::MainObject(QObject *parent) } else { fprintf(stderr,"rdimport: invalid segue level\n"); - delete rda->cmdSwitch(); - exit(256); - } + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); + } if(rda->cmdSwitch()->key(i)=="--segue-length") { n=rda->cmdSwitch()->value(i).toInt(&ok); if(ok&&(n>=0)) { @@ -534,12 +537,19 @@ MainObject::MainObject(QObject *parent) } else { fprintf(stderr,"rdimport: invalid segue length\n"); - delete rda->cmdSwitch(); - exit(256); + exit(2); } + rda->cmdSwitch()->setProcessed(i,true); } if(rda->cmdSwitch()->key(i)=="--single-cart") { import_single_cart=true; + rda->cmdSwitch()->setProcessed(i,true); + } + if((!rda->cmdSwitch()->processed(i))&& + (rda->cmdSwitch()->key(i).left(2)=="--")) { + fprintf(stderr,"rdimport: unknown command option \"%s\"\n", + (const char *)rda->cmdSwitch()->key(i)); + exit(2); } } if(import_to_mono) {