00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "ad_hfs.h"
00010
00011 void ADIOI_HFS_WriteContig(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_WRITECONTIG";
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 if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
00026 err = pwrite64(fd->fd_sys, buf, len, offset);
00027 else {
00028 err = pwrite64(fd->fd_sys, buf, len, fd->fp_ind);
00029 fd->fp_ind += err;
00030 }
00031 #endif
00032
00033 #ifdef HPUX
00034 if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
00035 if (fd->fp_sys_posn != offset)
00036 lseek64(fd->fd_sys, offset, SEEK_SET);
00037 err = write(fd->fd_sys, buf, len);
00038 fd->fp_sys_posn = offset + err;
00039
00040 }
00041 else {
00042 if (fd->fp_sys_posn != fd->fp_ind)
00043 lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
00044 err = write(fd->fd_sys, buf, len);
00045 fd->fp_ind += err;
00046 fd->fp_sys_posn = fd->fp_ind;
00047 }
00048 #endif
00049
00050 #ifdef HAVE_STATUS_SET_BYTES
00051 if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
00052 #endif
00053
00054 #ifdef PRINT_ERR_MSG
00055 *error_code = (err == -1) ? MPI_ERR_UNKNOWN : MPI_SUCCESS;
00056 #else
00057 if (err == -1) {
00058 *error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
00059 myname, "I/O Error", "%s", strerror(errno));
00060 ADIOI_Error(fd, *error_code, myname);
00061 }
00062 else *error_code = MPI_SUCCESS;
00063 #endif
00064 }
00065
00066
00067 void ADIOI_HFS_WriteStrided(ADIO_File fd, void *buf, int count,
00068 MPI_Datatype datatype, int file_ptr_type,
00069 ADIO_Offset offset, ADIO_Status *status, int
00070 *error_code)
00071 {
00072 ADIOI_GEN_WriteStrided(fd, buf, count, datatype, file_ptr_type,
00073 offset, status, error_code);
00074 }