Changeset 8421


Ignore:
Timestamp:
May 18, 2009, 4:05:56 PM (12 years ago)
Author:
charles
Message:

(trunk daemon) #2028: transmission-remote's exit code should be nonzero on failure

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/remote.c

    r8414 r8421  
    114114{
    115115    tr_getopt_usage( MY_NAME, getUsage( ), opts );
    116     exit( 0 );
    117116}
    118117
     
    127126        fprintf( stderr, "Not a number: \"%s\"\n", arg );
    128127        showUsage( );
     128        exit( EXIT_FAILURE );
    129129    }
    130130    return num;
     
    303303};
    304304
    305 static void
     305static int
    306306readargs( int           argc,
    307307          const char ** argv )
    308308{
    309     int          c;
    310     int          addingTorrents = 0;
     309    int c;
     310    int addingTorrents = 0;
     311    int status = EXIT_SUCCESS;
     312    char id[4096];
    311313    const char * optarg;
    312     char         id[4096];
    313314
    314315    *id = '\0';
     
    344345                    fprintf( stderr, "Unknown option: %s\n", optarg );
    345346                    addArg = FALSE;
     347                    status |= EXIT_FAILURE;
    346348                }
    347349                break;
     
    608610                fprintf( stderr, "invalid option\n" );
    609611                showUsage( );
     612                status |= EXIT_FAILURE;
    610613                break;
    611614
     
    625628        tr_bencFree( &top );
    626629    }
     630
     631    return status;
    627632}
    628633
     
    12531258}
    12541259
    1255 static void
     1260static int
    12561261processResponse( const char * host,
    12571262                 int          port,
     
    12601265{
    12611266    tr_benc top;
     1267    int status = EXIT_SUCCESS;
    12621268
    12631269    if( debug )
     
    12661272
    12671273    if( tr_jsonParse( response, len, &top, NULL ) )
     1274    {
    12681275        tr_nerr( MY_NAME, "Unable to parse response \"%*.*s\"", (int)len,
    12691276                 (int)len, (char*)response );
     1277        status |= EXIT_FAILURE;
     1278    }
    12701279    else
    12711280    {
     
    12921301
    12931302            default:
    1294                 if( tr_bencDictFindStr( &top, "result", &str ) )
     1303                if( !tr_bencDictFindStr( &top, "result", &str ) )
     1304                    status |= EXIT_FAILURE;
     1305                else {
    12951306                    printf( "%s:%d responded: \"%s\"\n", host, port, str );
     1307                    if( strcmp( str, "success") )
     1308                        status |= EXIT_FAILURE;
     1309                }
    12961310        }
    12971311
    12981312        tr_bencFree( &top );
    12991313    }
     1314
     1315    return status;
    13001316}
    13011317
     
    13521368   
    13531369
    1354 static void
     1370static int
    13551371processRequests( const char *  host,
    13561372                 int           port,
     
    13621378    struct evbuffer * buf = evbuffer_new( );
    13631379    char * url = tr_strdup_printf( "http://%s:%d/transmission/rpc", host, port );
     1380    int status = EXIT_SUCCESS;
    13641381
    13651382    for( i=0; i<reqCount; ++i )
     
    13791396            fprintf( stderr, "posting:\n--------\n%s\n--------\n", reqs[i] );
    13801397        if( ( res = curl_easy_perform( curl ) ) )
     1398        {
    13811399            tr_nerr( MY_NAME, "(%s:%d) %s", host, port, curl_easy_strerror( res ) );
     1400            status |= EXIT_FAILURE;
     1401        }
    13821402        else {
    13831403            long response;
     
    13851405            switch( response ) {
    13861406                case 200:
    1387                     processResponse( host, port, EVBUFFER_DATA(buf), EVBUFFER_LENGTH(buf) );
     1407                    status |= processResponse( host, port, EVBUFFER_DATA(buf), EVBUFFER_LENGTH(buf) );
    13881408                    break;
    13891409                case 409:
     
    13971417                default:
    13981418                    fprintf( stderr, "Unexpected response: %s\n", (char*)EVBUFFER_DATA(buf) );
     1419                    status |= EXIT_FAILURE;
    13991420                    break;
    14001421            }
     
    14071428    if( curl != NULL )
    14081429        curl_easy_cleanup( curl );
     1430    return status;
    14091431}
    14101432
     
    14161438    int    port = DEFAULT_PORT;
    14171439    char * host = NULL;
    1418 
    1419     if( argc < 2 )
     1440    int    exit_status = EXIT_SUCCESS;
     1441
     1442    if( argc < 2 ) {
    14201443        showUsage( );
     1444        return EXIT_FAILURE;
     1445    }
    14211446
    14221447    getHostAndPort( &argc, argv, &host, &port );
     
    14241449        host = tr_strdup( DEFAULT_HOST );
    14251450
    1426     readargs( argc, (const char**)argv );
     1451    exit_status |= readargs( argc, (const char**)argv );
    14271452    if( reqCount )
    1428         processRequests( host, port, (const char**)reqs, reqCount );
    1429     else
     1453        exit_status = processRequests( host, port, (const char**)reqs, reqCount );
     1454    else {
    14301455        showUsage( );
    1431 
    1432     for( i = 0; i < reqCount; ++i )
     1456        return EXIT_FAILURE;
     1457    }
     1458       
     1459
     1460    for( i=0; i<reqCount; ++i )
    14331461        tr_free( reqs[i] );
    14341462
    14351463    tr_free( host );
    1436     return 0;
    1437 }
    1438 
     1464    return exit_status;
     1465}
     1466
Note: See TracChangeset for help on using the changeset viewer.