IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 15748


Ignore:
Timestamp:
Dec 6, 2007, 3:41:36 PM (18 years ago)
Author:
eugene
Message:

fix mem leaks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/libdvo/src/dvo_catalog_split.c

    r15744 r15748  
    6565    }
    6666  }             
     67  free (tmpfilt);
    6768  free (primary);
    6869  return (TRUE);
     
    101102int dvo_catalog_open_subcat (Catalog *catalog, Catalog **Subcat, Header *header, char *name, int VERBOSE) {
    102103
    103   int status;
     104  int Nskip, status;
    104105  char *path, string[80];
    105106  Catalog *subcat;
    106   Matrix matrix;
    107107
    108108  /* in split mode, we need to init & open the corresponding measure file (even if we do not read
     
    117117
    118118  /* get split filename from main header (paths relative to cpt file) */
    119   if (!gfits_scan (&catalog[0].header, name,  "%s", 1, string)) return (DVO_CAT_OPEN_FAIL);
     119  if (!gfits_scan (&catalog[0].header, name,  "%s", 1, string)) {
     120    free (path);
     121    return (DVO_CAT_OPEN_FAIL);
     122  }
    120123  ALLOCATE (subcat[0].filename, char, strlen(path) + strlen(string) + 2);
    121124  sprintf (subcat[0].filename, "%s/%s", path, string);
     125  free (path);
    122126
    123127  /* lock & open catalog file */
     
    139143    return (DVO_CAT_OPEN_FAIL);
    140144  }
    141   /* matrix should be empty : XXX skip the matrix data? */
    142   if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
    143     if (VERBOSE) fprintf (stderr, "can't read primary matrix for %s\n", name);
    144     return (DVO_CAT_OPEN_FAIL);
    145   }
    146   gfits_free_matrix (&matrix);
     145  Nskip = gfits_data_size (&subcat[0].header);
     146  fseek (subcat[0].f, Nskip, SEEK_CUR);
     147
    147148  /* read Measure table header */
    148149  if (!gfits_fread_header (subcat[0].f, header)) {
    149150    if (VERBOSE) fprintf (stderr, "can't read %s PHU header\n", name);
     151    gfits_free_header (&subcat[0].header);
    150152    return (DVO_CAT_OPEN_FAIL);
    151153  }
     
    155157int dvo_catalog_load_split (Catalog *catalog, int VERBOSE) {
    156158
    157   int Nitems, Nexpect, Naverage, Nmeasure, Nmissing, Nsecfilt, status;
    158   char *path, string[80];
     159  int Nbytes, Nitems, Nexpect, Naverage, Nmeasure, Nmissing, Nsecfilt, status;
    159160  Header header;
    160   Matrix matrix;
    161161  FTable ftable;
    162162  SecFilt *primary;
     
    168168  primary = NULL;
    169169
    170   /* needed to find the split files below */
    171   path = pathname (catalog[0].filename);
    172 
    173170  /* get the components from the header - these duplicate information in the split files (NAXIS2) */
    174171  if (!gfits_scan (&catalog[0].header, "NSTARS",   "%d", 1, &Naverage)) return (FALSE);
     
    196193  if (catalog[0].catflags & LOAD_AVES) {
    197194    /* move pointer past header -- must be already read (load_catalog) */
    198     fseek (catalog[0].f, catalog[0].header.size, SEEK_SET);
    199     /* matrix should be empty : XXX should we drop this step and skip the data? */
    200     if (!gfits_fread_matrix (catalog[0].f, &matrix, &catalog[0].header)) {
    201       if (VERBOSE) fprintf (stderr, "can't read primary matrix");
    202       return (FALSE);
    203     }
     195    Nbytes = catalog[0].header.size + gfits_data_size (&catalog[0].header);
     196    fseek (catalog[0].f, Nbytes, SEEK_SET);
    204197    /* read Average table header */
    205     if (!gfits_fread_header (catalog[0].f, &header)) {
     198    if (!gfits_fread_header (catalog[0].f, &header)) { 
    206199      if (VERBOSE) fprintf (stderr, "can't read table average header");
    207200      return (FALSE);
    208201    }
    209202    /* read Average table data : format is irrelevant here */
    210     if (!gfits_fread_ftable_data (catalog[0].f, &ftable)) {
     203    if (!gfits_fread_ftable_data (catalog[0].f, &ftable)) { 
    211204      if (VERBOSE) fprintf (stderr, "can't read table average data");
    212205      return (FALSE);
     
    257250    catalog[0].Nmeas_off = catalog[0].Nmeas_disk;
    258251  }
    259   gfits_free_header (ftable.header);
     252  gfits_free_header (&header);
    260253
    261254  /*** Missing Table ***/
     
    335328int dvo_catalog_load_segment_split (Catalog *catalog, int VERBOSE, int start, int Nrows) {
    336329
    337   int Naverage, Nsecfilt, Nexpect, Nitems, Nmeasure, Nmissing;
     330  int Nbytes, Naverage, Nsecfilt, Nexpect, Nitems, Nmeasure, Nmissing;
    338331  Header header;
    339   Matrix matrix;
    340332  FTable ftable;
    341333  SecFilt *primary;
     
    351343
    352344    /*** load the Average data ***/
    353     /* move pointer past header -- must be already read (load_catalog) */
    354     fseek (catalog[0].f, catalog[0].header.size, SEEK_SET);
    355     /* matrix should be empty : XXX should we drop this step and skip the data? */
    356     if (!gfits_fread_matrix (catalog[0].f, &matrix, &catalog[0].header)) {
    357       if (VERBOSE) fprintf (stderr, "can't read primary matrix");
    358       return (FALSE);
    359     }
     345    /* move pointer past header and matrix -- must be already read (load_catalog) */
     346    Nbytes = catalog[0].header.size + gfits_data_size (&catalog[0].header);
     347    fseek (catalog[0].f, Nbytes, SEEK_SET);
    360348    /* read Average table header */
    361349    if (!gfits_fread_header (catalog[0].f, &header)) {
     
    385373
    386374    /* move pointer past header -- must be already read (load_catalog) */
    387     fseek (subcat[0].f, subcat[0].header.size, SEEK_SET);
    388     /* matrix should be empty : XXX should we drop this step and skip the data? */
    389     if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
    390       if (VERBOSE) fprintf (stderr, "can't read primary matrix");
    391       return (FALSE);
    392     }
     375    Nbytes = subcat[0].header.size + gfits_data_size (&subcat[0].header);
     376    fseek (subcat[0].f, Nbytes, SEEK_SET);
     377
    393378    /* read Secfilt table header */
    394379    if (!gfits_fread_header (subcat[0].f, &header)) {
     
    416401    }
    417402    gfits_free_header (&header);
    418     gfits_free_matrix (&matrix);
    419403  }
    420404
     
    425409
    426410    /* move pointer past header -- must be already read (load_catalog) */
    427     fseek (subcat[0].f, subcat[0].header.size, SEEK_SET);
    428     /* matrix should be empty : XXX should we drop this step and skip the data? */
    429     if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
    430       if (VERBOSE) fprintf (stderr, "can't read primary matrix");
    431       return (FALSE);
    432     }
     411    Nbytes = subcat[0].header.size + gfits_data_size (&subcat[0].header);
     412    fseek (subcat[0].f, Nbytes, SEEK_SET);
     413
    433414    /* read Measure table header */
    434415    if (!gfits_fread_header (subcat[0].f, &header)) {
     
    448429    }
    449430    gfits_free_header (&header);
    450     gfits_free_matrix (&matrix);
    451431    catalog[0].Nmeasure = Nmeasure;
    452432    catalog[0].Nmeas_off = start;
     
    459439
    460440    /* move pointer past header -- must be already read (load_catalog) */
    461     fseek (subcat[0].f, subcat[0].header.size, SEEK_SET);
    462     /* matrix should be empty : XXX should we drop this step and skip the data? */
    463     if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
    464       if (VERBOSE) fprintf (stderr, "can't read primary matrix");
    465       return (FALSE);
    466     }
     441    Nbytes = subcat[0].header.size + gfits_data_size (&subcat[0].header);
     442    fseek (subcat[0].f, Nbytes, SEEK_SET);
     443
    467444    /* read Missing table header */
    468445    if (!gfits_fread_header (subcat[0].f, &header)) {
     
    482459    }
    483460    gfits_free_header (&header);
    484     gfits_free_matrix (&matrix);
    485461    catalog[0].Nmissing = Nmissing;
    486462    catalog[0].Nmiss_off = start;
     
    549525    assert (Nrows >= 0);
    550526    assert (first >= 0);
    551     assert (first < catalog[0].Naverage);
     527    assert (first <= catalog[0].Naverage);
    552528    assert (catalog[0].Naves_disk >= catalog[0].Naves_off);
    553529
     
    586562    assert (Nrows >= 0);
    587563    assert (first >= 0);
    588     assert (first < catalog[0].Nmeasure);
     564    assert (first <= catalog[0].Nmeasure);
    589565    assert (catalog[0].Nmeas_disk >= catalog[0].Nmeas_off);
    590566
     
    637613    assert (Nrows >= 0);
    638614    assert (first >= 0);
    639     assert (first < Nitems);
     615    assert (first <= Nitems);
    640616    assert (catalog[0].Nsecf_disk >= catalog[0].Nsecf_off);
    641617    // XXX check these for consistency...
     
    731707    assert (Nrows >= 0);
    732708    assert (first >= 0);
    733     assert (first < catalog[0].Naverage);
     709    assert (first <= catalog[0].Naverage);
    734710    assert (catalog[0].Naves_disk >= catalog[0].Naves_off);
    735711
     
    768744    assert (Nrows >= 0);
    769745    assert (first >= 0);
    770     assert (first < catalog[0].Nmeasure);
     746    assert (first <= catalog[0].Nmeasure);
    771747    assert (catalog[0].Nmeas_disk >= catalog[0].Nmeas_off);
    772748
     
    823799    assert (Nrows >= 0);
    824800    assert (first >= 0);
    825     assert (first < Nitems);
     801    assert (first <= Nitems);
    826802    assert (catalog[0].Nmeas_disk >= catalog[0].Nmeas_off);
    827803
Note: See TracChangeset for help on using the changeset viewer.