IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 1, 2008, 8:46:17 AM (18 years ago)
Author:
Paul Price
Message:

Need to check the return value of system() to avoid compiler warning
on some systems. Also got rid of a buffer overrun bug.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppSim/src/ppSimSequence.c

    r17617 r18849  
    11# include "ppSimSequence.h"
    22# include <sys/stat.h>
     3
     4// XXX Memory leaks in string variables
    35
    46int main (int argc, char **argv) {
     
    68    bool status;
    79    int argNum;
    8     char line[1024];
    910    unsigned int nFail;
    1011
     
    1213
    1314    char *dbname = NULL;
    14     if ((argNum = psArgumentGet (argc, argv, "-dbname"))) { 
     15    if ((argNum = psArgumentGet (argc, argv, "-dbname"))) {
    1516        psArgumentRemove(argNum, &argc, argv);
    16         dbname = psStringCopy (argv[argNum]);
     17        dbname = psStringCopy (argv[argNum]);
    1718        psArgumentRemove(argNum, &argc, argv);
    1819    }
    1920
    2021    char *path = NULL;
    21     if ((argNum = psArgumentGet (argc, argv, "-path"))) { 
     22    if ((argNum = psArgumentGet (argc, argv, "-path"))) {
    2223        psArgumentRemove(argNum, &argc, argv);
    23         path = psStringCopy (argv[argNum]);
     24        path = psStringCopy (argv[argNum]);
    2425        psArgumentRemove(argNum, &argc, argv);
    25         sprintf (line, "mkdir -p %s", path);
    26         system (line);
     26        psString line = NULL;           // Line to execute
     27        psStringAppend("mkdir -p %s", path);
     28        if (!system(line)) {
     29            psWarning("Unable to create directory %s", path);
     30        }
     31        psFree(line);
    2732    }
    2833
    2934    char *workdir = NULL;
    30     if ((argNum = psArgumentGet (argc, argv, "-workdir"))) { 
     35    if ((argNum = psArgumentGet (argc, argv, "-workdir"))) {
    3136        psArgumentRemove(argNum, &argc, argv);
    32         workdir = psStringCopy (argv[argNum]);
     37        workdir = psStringCopy (argv[argNum]);
    3338        psArgumentRemove(argNum, &argc, argv);
    3439    }
    3540
    3641    char *dvodb = NULL;
    37     if ((argNum = psArgumentGet (argc, argv, "-dvodb"))) { 
     42    if ((argNum = psArgumentGet (argc, argv, "-dvodb"))) {
    3843        psArgumentRemove(argNum, &argc, argv);
    39         dvodb = psStringCopy (argv[argNum]);
     44        dvodb = psStringCopy (argv[argNum]);
    4045        psArgumentRemove(argNum, &argc, argv);
    4146    }
    4247
    4348    char *tess_id = NULL;
    44     if ((argNum = psArgumentGet (argc, argv, "-tess_id"))) { 
     49    if ((argNum = psArgumentGet (argc, argv, "-tess_id"))) {
    4550        psArgumentRemove(argNum, &argc, argv);
    46         tess_id = psStringCopy (argv[argNum]);
     51        tess_id = psStringCopy (argv[argNum]);
    4752        psArgumentRemove(argNum, &argc, argv);
    4853    }
    4954
    5055    char *basename = NULL;
    51     if ((argNum = psArgumentGet (argc, argv, "-basename"))) { 
     56    if ((argNum = psArgumentGet (argc, argv, "-basename"))) {
    5257        psArgumentRemove(argNum, &argc, argv);
    53         basename = psStringCopy (argv[argNum]);
     58        basename = psStringCopy (argv[argNum]);
    5459        psArgumentRemove(argNum, &argc, argv);
    5560    } else {
    56         basename = psStringCopy ("simtest");
     61        basename = psStringCopy ("simtest");
    5762    }
    5863
    5964    char *label = NULL;
    60     if ((argNum = psArgumentGet (argc, argv, "-label"))) { 
     65    if ((argNum = psArgumentGet (argc, argv, "-label"))) {
    6166        psArgumentRemove(argNum, &argc, argv);
    62         label = psStringCopy (argv[argNum]);
     67        label = psStringCopy (argv[argNum]);
    6368        psArgumentRemove(argNum, &argc, argv);
    6469    }
    6570
    6671    if (argc != 4) {
    67         fprintf (stderr, "USAGE: ppSimSequence (sequence) (simulate) (inject) [options]\n");
    68         fprintf (stderr, "generates a set of simulated data defined by the sequence file\n");
    69         fprintf (stderr, " (sequence) : a mdc-file describing the desired image sequences\n");
    70         fprintf (stderr, " (simulate) : an output file with commands to generate the images\n");
    71         fprintf (stderr, " (inject)   : an output file with commands to inject the images into the pipeline\n");
    72         fprintf (stderr, "options:\n");
    73         fprintf (stderr, " -dbname (dbname)\n");
    74         fprintf (stderr, " -path (path)\n");
    75         fprintf (stderr, " -workdir (workdir)\n");
    76         fprintf (stderr, " -basename (basename)\n");
    77         fprintf (stderr, " -label (label)\n");
    78         fprintf (stderr, " -dvodb (dvodb)\n");
    79         fprintf (stderr, " -tess_id (tess_id)\n");
    80         exit (2);
     72        fprintf (stderr, "USAGE: ppSimSequence (sequence) (simulate) (inject) [options]\n");
     73        fprintf (stderr, "generates a set of simulated data defined by the sequence file\n");
     74        fprintf (stderr, " (sequence) : a mdc-file describing the desired image sequences\n");
     75        fprintf (stderr, " (simulate) : an output file with commands to generate the images\n");
     76        fprintf (stderr, " (inject)   : an output file with commands to inject the images into the pipeline\n");
     77        fprintf (stderr, "options:\n");
     78        fprintf (stderr, " -dbname (dbname)\n");
     79        fprintf (stderr, " -path (path)\n");
     80        fprintf (stderr, " -workdir (workdir)\n");
     81        fprintf (stderr, " -basename (basename)\n");
     82        fprintf (stderr, " -label (label)\n");
     83        fprintf (stderr, " -dvodb (dvodb)\n");
     84        fprintf (stderr, " -tess_id (tess_id)\n");
     85        exit (2);
    8186    }
    8287
     
    8489    psMetadata *config = psMetadataConfigRead (NULL, &nFail, argv[1], false);
    8590    if (!config) {
    86         psLogMsg ("ppSimSequence", PS_LOG_WARN, "unable to read sequence description from %s", argv[1]);
    87         exit (1);
     91        psLogMsg ("ppSimSequence", PS_LOG_WARN, "unable to read sequence description from %s", argv[1]);
     92        exit (1);
    8893    }
    89    
     94
    9095    FILE *simfile = fopen (argv[2], "w");
    9196    if (!simfile) {
    92         psLogMsg ("ppSimSequence", PS_LOG_WARN, "unable to open %s for output", argv[2]);
    93         exit (1);
     97        psLogMsg ("ppSimSequence", PS_LOG_WARN, "unable to open %s for output", argv[2]);
     98        exit (1);
    9499    }
    95        
     100
    96101    FILE *inject = fopen (argv[3], "w");
    97102    if (!inject) {
    98         psLogMsg ("ppSimSequence", PS_LOG_WARN, "unable to open %s for output", argv[3]);
    99         exit (1);
     103        psLogMsg ("ppSimSequence", PS_LOG_WARN, "unable to open %s for output", argv[3]);
     104        exit (1);
    100105    }
    101106
     
    114119    psMetadataItem *item = psMetadataLookup (config, "SEQUENCE");
    115120    if (item == NULL) {
    116         psLogMsg ("ppSimSequence", PS_LOG_WARN, "missing SEQUENCE description");
    117         exit (1);
     121        psLogMsg ("ppSimSequence", PS_LOG_WARN, "missing SEQUENCE description");
     122        exit (1);
    118123    }
    119124
    120125    psArray *sequences = NULL;
    121126    if (item->type == PS_DATA_METADATA) {
    122         sequences = psArrayAlloc(1);
    123         sequences->data[0] = psMemIncrRefCounter (item->data.V);
     127        sequences = psArrayAlloc(1);
     128        sequences->data[0] = psMemIncrRefCounter (item->data.V);
    124129    } else {
    125         if (item->type != PS_DATA_METADATA_MULTI)  {
    126             psLogMsg ("ppSimSequence", PS_LOG_WARN, "SEQUENCE is not MULTI or METADATA");
    127             exit (1);
    128         }
    129         sequences = psListToArray (item->data.list);
     130        if (item->type != PS_DATA_METADATA_MULTI)  {
     131            psLogMsg ("ppSimSequence", PS_LOG_WARN, "SEQUENCE is not MULTI or METADATA");
     132            exit (1);
     133        }
     134        sequences = psListToArray (item->data.list);
    130135    }
    131136
    132137    for (int i = 0; i < sequences->n; i++) {
    133138
    134         // XXX this is not obvious: the entry on the list is a metadata item
    135         // containing the psMetadata :: why is this not just a metadata?
    136         psMetadataItem *item = sequences->data[i];
    137         psMetadata *sequence = item->data.V;
    138         // double check item type?
    139      
    140         // determine the sequence type
    141         char *type = psMetadataLookupStr (&status, sequence, "OBSTYPE");
    142         if (!status) {
    143             psLogMsg ("ppSimSequence", PS_LOG_WARN, "SEQUENCE %d is missing a type", i);
    144             exit (1);
    145         }
     139        // XXX this is not obvious: the entry on the list is a metadata item
     140        // containing the psMetadata :: why is this not just a metadata?
     141        psMetadataItem *item = sequences->data[i];
     142        psMetadata *sequence = item->data.V;
     143        // double check item type?
    146144
    147         if (!strcasecmp (type, "BIAS")) {
    148             ppSimSequenceBias (simfile, inject, sequence, i, rng, path, basename, injectCommand);
    149             continue;
    150         }
    151         if (!strcasecmp (type, "DARK")) {
    152             ppSimSequenceDark (simfile, inject, sequence, i, rng, path, basename, injectCommand);
    153             continue;
    154         }
    155         if (!strcasecmp (type, "FLAT")) {
    156             ppSimSequenceFlat (simfile, inject, sequence, i, rng, path, basename, injectCommand);
    157             continue;
    158         }
    159         if (!strcasecmp (type, "OBJECT")) {
    160             ppSimSequenceObject (simfile, inject, sequence, i, rng, path, basename, injectCommand);
    161             continue;
    162         }
     145        // determine the sequence type
     146        char *type = psMetadataLookupStr (&status, sequence, "OBSTYPE");
     147        if (!status) {
     148            psLogMsg ("ppSimSequence", PS_LOG_WARN, "SEQUENCE %d is missing a type", i);
     149            exit (1);
     150        }
    163151
    164         psLogMsg ("ppSimSequence", PS_LOG_WARN, "SEQUENCE %d has an unknown type: %s", i, type);
    165         exit (1);
     152        if (!strcasecmp (type, "BIAS")) {
     153            ppSimSequenceBias (simfile, inject, sequence, i, rng, path, basename, injectCommand);
     154            continue;
     155        }
     156        if (!strcasecmp (type, "DARK")) {
     157            ppSimSequenceDark (simfile, inject, sequence, i, rng, path, basename, injectCommand);
     158            continue;
     159        }
     160        if (!strcasecmp (type, "FLAT")) {
     161            ppSimSequenceFlat (simfile, inject, sequence, i, rng, path, basename, injectCommand);
     162            continue;
     163        }
     164        if (!strcasecmp (type, "OBJECT")) {
     165            ppSimSequenceObject (simfile, inject, sequence, i, rng, path, basename, injectCommand);
     166            continue;
     167        }
     168
     169        psLogMsg ("ppSimSequence", PS_LOG_WARN, "SEQUENCE %d has an unknown type: %s", i, type);
     170        exit (1);
    166171    }
    167172
Note: See TracChangeset for help on using the changeset viewer.