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_write_T.c

    r15743 r27435  
    1313  if (f == (FILE *) NULL) return (FALSE);
    1414 
    15   status = fseek (f, 0, SEEK_END);  /* write table to end of file! */
     15  status = fseeko (f, 0LL, SEEK_END);  /* write table to end of file! */
    1616  status = gfits_fwrite_table (f, table);
    1717
     
    2323int gfits_fwrite_table (FILE *f, FTable *table) {
    2424 
    25   int Nbytes;
     25  off_t Nbytes;
    2626 
    27   Nbytes = fwrite (table[0].buffer, sizeof(char), table[0].size, f);
     27  Nbytes = fwrite (table[0].buffer, sizeof(char), table[0].datasize, f);
    2828 
    29   if (Nbytes != table[0].size) return (FALSE);
     29  if (Nbytes != table[0].datasize) return (FALSE);
    3030  return (TRUE);
    3131}       
     
    3434int gfits_fwrite_vtable (FILE *f, VTable *table) {
    3535 
    36   int i, Nx, Ny, Npad, offset, start;
    37   int Nbytes, *row, Nrow;
     36  off_t i, Nx, Ny, Npad, offset, start;
     37  off_t Nbytes, *row, Nrow;
    3838  char *pad;
    3939
    4040  Nrow = table[0].Nrow;
    4141  row = table[0].row;
    42   gfits_scan (table[0].header, "NAXIS1", "%d", 1, &Nx);
    43   gfits_scan (table[0].header, "NAXIS2", "%d", 1, &Ny);
     42  gfits_scan (table[0].header, "NAXIS1", "%lld", 1, (long long *) &Nx);
     43  gfits_scan (table[0].header, "NAXIS2", "%lld", 1, (long long *) &Ny);
    4444
    4545  /* file pointer is at beginning of desired table data */
    46   start = ftell (f);
     46  start = ftello (f);
    4747 
    4848  for (i = 0; i < Nrow; i++) {
    4949    offset = start + Nx*row[i];
    50     fseek (f, offset, SEEK_SET);
     50    fseeko (f, offset, SEEK_SET);
    5151    Nbytes = fwrite (table[0].buffer[i], sizeof (char), Nx, f);
    5252    if (Nbytes != Nx) { return (FALSE); }
    5353  }
    5454 
    55   Npad = table[0].size - Nx*Ny;
     55  Npad = table[0].datasize - Nx*Ny;
    5656  ALLOCATE (pad, char, Npad);
    5757  bzero (pad, Npad);
    5858
    5959  offset = start + Nx*Ny;
    60   fseek (f, offset, SEEK_SET);
     60  fseeko (f, offset, SEEK_SET);
    6161  Nbytes = fwrite (pad, sizeof (char), Npad, f);
    6262  if (Nbytes != Npad) { return (FALSE); }
     
    7171
    7272/*********************** fits read ftable data ***********************************/
    73 int gfits_fwrite_ftable_range (FILE *f, FTable *ftable, int start, int Nrows, int Ndisk, int Ntotal) {
     73int gfits_fwrite_ftable_range (FILE *f, FTable *ftable, off_t start, off_t Nrows, off_t Ndisk, off_t Ntotal) {
    7474
    75   int Nbytes, Nwrite, Nskip, Nx, Npad;
     75  off_t Nbytes, Nwrite, Nskip, Nx, Npad;
    7676  char *pad;
    7777
     
    7979 
    8080  /* modify vtable to represent full disk table */
    81   gfits_modify (ftable[0].header, "NAXIS2", "%d", 1, Ntotal);
     81  gfits_modify (ftable[0].header, "NAXIS2", "%lld", 1, (long long) Ntotal);
    8282  ftable[0].header[0].Naxis[1] = Ntotal;
    8383
    8484  Nx = ftable[0].header[0].Naxis[0]; // final output table size on disk
    85   ftable[0].size = gfits_data_size (ftable[0].header);
     85  ftable[0].datasize = gfits_data_size (ftable[0].header);
    8686
    8787  Nskip = start * Nx;
     
    9595
    9696  // cursor must be at start of the table (after table header)
    97   fseek (f, Nskip, SEEK_CUR);
     97  fseeko (f, Nskip, SEEK_CUR);
    9898  Nwrite = fwrite (ftable[0].buffer, sizeof (char), Nbytes, f);
    9999  if (Nwrite != Nbytes) {
     
    102102
    103103  if (Ntotal >= Ndisk) {
    104     Npad = ftable[0].size - Nx*Ntotal;
     104    Npad = ftable[0].datasize - Nx*Ntotal;
    105105    ALLOCATE (pad, char, Npad);
    106106    bzero (pad, Npad);
Note: See TracChangeset for help on using the changeset viewer.