IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 24, 2010, 11:22:25 AM (16 years ago)
Author:
eugene
Message:

large update merging in changes for Ohana to support large files

Location:
trunk/Ohana
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana

  • trunk/Ohana/src/libfits/table/F_read_T.c

    r15751 r27435  
    1919int gfits_fread_ftable (FILE *f, FTable *table, char *extname) {
    2020
    21   int j, found, Nbytes;
     21  int j, found;
     22  off_t Nbytes;
    2223  Header *header;
    2324  char tname[80];
    2425
    2526  header = table[0].header;
    26   fseek (f, 0, SEEK_SET);
     27  fseeko (f, 0, SEEK_SET);
    2728
    2829  found = FALSE;
     
    4243    /* skip to next header */
    4344    Nbytes = gfits_data_size (header);
    44     fseek (f, Nbytes, SEEK_CUR);
     45    fseeko (f, Nbytes, SEEK_CUR);
    4546    gfits_free_header (header);
    4647  }
     
    5152int gfits_fread_ftable_data (FILE *f, FTable *table) {
    5253
    53   int Nbytes, Nread;
     54  off_t Nbytes, Nread;
    5455  char string[128];
    5556
     
    6364    perror (string);
    6465    if (Nread < gfits_data_min_size (table[0].header)) {
    65       fprintf (stderr, "error: fits read error in %s, read %d, need %d\n", __func__, Nread, gfits_data_min_size (table[0].header));
     66      fprintf (stderr, "error: fits read error in %s, read %lld, need %lld\n", __func__, (long long) Nread, (long long) gfits_data_min_size (table[0].header));
    6667      gfits_free_table  (table);
    6768      return (FALSE);
     
    6970    fprintf (stderr, "warning: file missing pad\n");
    7071  }
    71   table[0].size = Nbytes;
     72  table[0].datasize = Nbytes;
    7273  return (TRUE);
    7374}       
    7475
    7576/*********************** fits read ftable data ***********************************/
    76 int gfits_fread_ftable_range (FILE *f, FTable *table, int start, int Nrows) {
    77 
    78   int Nbytes, Nread, Nskip, Nx, Ny;
     77int gfits_fread_ftable_range (FILE *f, FTable *table, off_t start, off_t Nrows) {
     78
     79  off_t Nbytes, Nread, Nskip, Nx, Ny;
    7980
    8081  /* find disk table size */
     
    9394  ALLOCATE (table[0].buffer, char, MAX (Nbytes, 1));
    9495
    95   fseek (f, Nskip, SEEK_CUR);
     96  fseeko (f, Nskip, SEEK_CUR);
    9697
    9798  Nread = fread (table[0].buffer, sizeof (char), Nbytes, f);
     
    108109  /* modify structure and header to match actual read rows Ny */
    109110  table[0].header[0].Naxis[1] = Nrows;
    110   gfits_modify (table[0].header, "NAXIS2",  "%d", 1, Nrows);
    111   table[0].size = gfits_data_size (table[0].header);
     111  gfits_modify (table[0].header, "NAXIS2",  "%lld", 1, (long long) Nrows);
     112  table[0].datasize = gfits_data_size (table[0].header);
    112113
    113114  return (TRUE);
     
    115116
    116117/*********************** fits read ftable data ***********************************/
    117 int gfits_fread_vtable_range (FILE *f, VTable *table, int start, int Nrows) {
    118 
    119   int i, Nbytes, Nread, Nskip, Nx, Ny;
     118int gfits_fread_vtable_range (FILE *f, VTable *table, off_t start, off_t Nrows) {
     119
     120  off_t i, Nbytes, Nread, Nskip, Nx, Ny;
    120121  char *buffer;
    121122
     
    123124  Nx = table[0].header[0].Naxis[0];
    124125  Ny = table[0].header[0].Naxis[1];
    125   table[0].size = gfits_data_size (table[0].header);
    126   table[0].pad = table[0].size - Nx*Ny;
     126  table[0].datasize = gfits_data_size (table[0].header);
     127  table[0].pad = table[0].datasize - Nx*Ny;
    127128
    128129  if (start < 0) return (FALSE);
     
    133134  ALLOCATE (buffer, char, MAX (Nbytes, 1));
    134135
    135   fseek (f, Nskip, SEEK_CUR);
     136  fseeko (f, Nskip, SEEK_CUR);
    136137  Nread = fread (buffer, sizeof (char), Nbytes, f);
    137138  if (Nread != Nbytes) {
     
    141142  }
    142143
    143   ALLOCATE (table[0].row, int, MAX (Nrows, 1));
     144  ALLOCATE (table[0].row, off_t, MAX (Nrows, 1));
    144145  ALLOCATE (table[0].buffer, char *, MAX (Nrows, 1));
    145146  for (i = 0; i < Nrows; i++) {
     
    154155
    155156/*********************** fits read virtual table ***********************************/
    156 int gfits_fread_vtable (FILE *f, VTable *table, char *extname, int Nrow, int *row) {
    157 
    158   int i, j, Nbytes, Nread;
    159   int start, Nx, Ny, offset;
     157int gfits_fread_vtable (FILE *f, VTable *table, char *extname, off_t Nrow, off_t *row) {
     158
     159  off_t i, j;
     160  off_t Nbytes, Nread;
     161  off_t start, Nx, Ny, offset;
    160162  Header *header;
    161163  char tname[80];
    162164
    163165  header = table[0].header;
    164   fseek (f, 0, SEEK_SET);
     166  fseeko (f, 0, SEEK_SET);
    165167
    166168  for (j = -1; TRUE; j++) {
     
    176178    if (strcmp (tname, extname)) {
    177179      /* skip to next header */
    178       fseek (f, Nbytes, SEEK_CUR);
     180      fseeko (f, Nbytes, SEEK_CUR);
    179181      gfits_free_header (header);
    180182      continue;
     
    182184
    183185    /* file pointer is at beginning of desired table data */
    184     start = ftell (f);
    185     gfits_scan (header, "NAXIS1", "%d", 1, &Nx);
    186     gfits_scan (header, "NAXIS2", "%d", 1, &Ny);
     186    start = ftello (f);
     187    gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx);
     188    gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny);
    187189    for (i = 0; i < Nrow; i++) {
    188190      if (row[i] > Ny) { return (FALSE); }
     
    193195      ALLOCATE (table[0].buffer[i], char, MAX (1, Nx));
    194196      offset = start + Nx*row[i];
    195       fseek (f, offset, SEEK_SET);
     197      fseeko (f, offset, SEEK_SET);
    196198      Nread = fread (table[0].buffer[i], sizeof (char), Nx, f);
    197199      if (Nread != Nx) {
     
    202204
    203205    table[0].Nrow  = Nrow;
    204     ALLOCATE (table[0].row, int, MAX (1, Nrow));   
     206    ALLOCATE (table[0].row, off_t, MAX (1, Nrow));   
    205207    for (i = 0; i < Nrow; i++) table[0].row[i] = row[i];
    206     table[0].size  = gfits_data_size (table[0].header);
    207     table[0].pad    = table[0].size - Nx*Ny;
     208    table[0].datasize = gfits_data_size (table[0].header);
     209    table[0].pad      = table[0].datasize - Nx*Ny;
    208210    return (TRUE);
    209211  }
     
    212214int gfits_fread_header_extname (FILE *f, Header *header, char *extname) {
    213215
    214   int Nbytes;
     216  off_t Nbytes;
    215217  char current[80];
    216218
    217   fseek (f, 0, SEEK_SET);
     219  fseeko (f, 0, SEEK_SET);
    218220  gfits_fread_header (f, header);
    219221
     
    221223
    222224  Nbytes = gfits_data_size (header);
    223   fseek (f, Nbytes, SEEK_CUR);
     225  fseeko (f, Nbytes, SEEK_CUR);
    224226
    225227  while (gfits_fread_header (f, header)) {
     
    227229    if (!strcmp (current, extname)) return (TRUE);
    228230    Nbytes = gfits_data_size (header);
    229     fseek (f, Nbytes, SEEK_CUR);
     231    fseeko (f, Nbytes, SEEK_CUR);
    230232  }
    231233  return (FALSE);
Note: See TracChangeset for help on using the changeset viewer.