00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "ad_hfs.h"
00010
00011 void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
00012 MPI_Datatype datatype, int file_ptr_type,
00013 ADIO_Offset offset, ADIO_Status *status, int *error_code)
00014 {
00015 int err=-1, datatype_size, len;
00016 #ifndef PRINT_ERR_MSG
00017 static char myname[] = "ADIOI_HFS_READCONTIG";
00018 #endif
00019
00020 MPI_Type_size(datatype, &datatype_size);
00021 len = datatype_size * count;
00022
00023 #ifdef SPPUX
00024 fd->fp_sys_posn = -1;
00025
00026 if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
00027 err = pread64(fd->fd_sys, buf, len, offset);
00028 else {
00029 err = pread64(fd->fd_sys, buf, len, fd->fp_ind);
00030 fd->fp_ind += err;
00031 }
00032 #endif
00033
00034 #ifdef HPUX
00035 if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
00036 if (fd->fp_sys_posn != offset)
00037 lseek64(fd->fd_sys, offset, SEEK_SET);
00038 err = read(fd->fd_sys, buf, len);
00039 fd->fp_sys_posn = offset + err;
00040
00041 }
00042 else {
00043 if (fd->fp_sys_posn != fd->fp_ind)
00044 lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
00045 err = read(fd->fd_sys, buf, len);
00046 fd->fp_ind += err;
00047 fd->fp_sys_posn = fd->fp_ind;
00048 }
00049 #endif
00050
00051 #ifdef HAVE_STATUS_SET_BYTES
00052 if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
00053 #endif
00054
00055 #ifdef PRINT_ERR_MSG
00056 *error_code = (err == -1) ? MPI_ERR_UNKNOWN : MPI_SUCCESS;
00057 #else
00058 if (err == -1) {
00059 *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
00060 myname, "I/O Error", "%s", strerror(errno));
00061 ADIOI_Error(fd, *error_code, myname);
00062 }
00063 else *error_code = MPI_SUCCESS;
00064 #endif
00065 }
00066
00067
00068
00069
00070 void ADIOI_HFS_ReadStrided(ADIO_File fd, void *buf, int count,
00071 MPI_Datatype datatype, int file_ptr_type,
00072 ADIO_Offset offset, ADIO_Status *status, int
00073 *error_code)
00074 {
00075 ADIOI_GEN_ReadStrided(fd, buf, count, datatype, file_ptr_type,
00076 offset, status, error_code);
00077 }