-:    0:Source:/home/MPI/testing/mpich2/mpich2/src/mpi/romio/adio/ad_ufs/ad_ufs_open.c
        -:    0:Graph:ad_ufs_open.gcno
        -:    0:Data:ad_ufs_open.gcda
        -:    0:Runs:224
        -:    0:Programs:67
        -:    1:/* -*- Mode: C; c-basic-offset:4 ; -*- */
        -:    2:/* 
        -:    3: *
        -:    4: *   Copyright (C) 1997 University of Chicago. 
        -:    5: *   See COPYRIGHT notice in top-level directory.
        -:    6: */
        -:    7:
        -:    8:#include "ad_ufs.h"
        -:    9:
        -:   10:void ADIOI_UFS_Open(ADIO_File fd, int *error_code)
     5865:   11:{
        -:   12:    int perm, old_mask, amode;
        -:   13:    static char myname[] = "ADIOI_UFS_OPEN";
        -:   14:
     5865:   15:    if (fd->perm == ADIO_PERM_NULL) {
     5865:   16:	old_mask = umask(022);
     5865:   17:	umask(old_mask);
     5865:   18:	perm = old_mask ^ 0666;
        -:   19:    }
    #####:   20:    else perm = fd->perm;
        -:   21:
     5865:   22:    amode = 0;
     5865:   23:    if (fd->access_mode & ADIO_CREATE)
     1818:   24:	amode = amode | O_CREAT;
     5865:   25:    if (fd->access_mode & ADIO_RDONLY)
       35:   26:	amode = amode | O_RDONLY;
     5865:   27:    if (fd->access_mode & ADIO_WRONLY)
        7:   28:	amode = amode | O_WRONLY;
     5865:   29:    if (fd->access_mode & ADIO_RDWR)
     5823:   30:	amode = amode | O_RDWR;
     5865:   31:    if (fd->access_mode & ADIO_EXCL)
        2:   32:	amode = amode | O_EXCL;
        -:   33:
        -:   34:    
        -:   35:#ifdef ADIOI_MPE_LOGGING
        -:   36:    MPE_Log_event( ADIOI_MPE_open_a, 0, NULL );
        -:   37:#endif
     5865:   38:    fd->fd_sys = open(fd->filename, amode, perm);
        -:   39:#ifdef ADIOI_MPE_LOGGING
        -:   40:    MPE_Log_event( ADIOI_MPE_open_b, 0, NULL );
        -:   41:#endif
     5865:   42:    fd->fd_direct = -1;
        -:   43:
     5865:   44:    if ((fd->fd_sys != -1) && (fd->access_mode & ADIO_APPEND)) {
        -:   45:#ifdef ADIOI_MPE_LOGGING
        -:   46:        MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
        -:   47:#endif
    #####:   48:	fd->fp_ind = fd->fp_sys_posn = lseek(fd->fd_sys, 0, SEEK_END);
        -:   49:#ifdef ADIOI_MPE_LOGGING
        -:   50:        MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
        -:   51:#endif
        -:   52:    }
        -:   53:
        -:   54:    /* --BEGIN ERROR HANDLING-- */
     5865:   55:    if (fd->fd_sys == -1) {
       25:   56:	if (errno == ENAMETOOLONG)
    #####:   57:	    *error_code = MPIO_Err_create_code(MPI_SUCCESS,
        -:   58:					       MPIR_ERR_RECOVERABLE, myname,
        -:   59:					       __LINE__, MPI_ERR_BAD_FILE,
        -:   60:					       "**filenamelong",
        -:   61:					       "**filenamelong %s %d",
        -:   62:					       fd->filename,
        -:   63:					       strlen(fd->filename));
       25:   64:	else if (errno == ENOENT)
       24:   65:	    *error_code = MPIO_Err_create_code(MPI_SUCCESS,
        -:   66:					       MPIR_ERR_RECOVERABLE, myname,
        -:   67:					       __LINE__, MPI_ERR_NO_SUCH_FILE,
        -:   68:					       "**filenoexist",
        -:   69:					       "**filenoexist %s",
        -:   70:					       fd->filename);
        1:   71:	else if (errno == ENOTDIR || errno == ELOOP)
    #####:   72:	    *error_code = MPIO_Err_create_code(MPI_SUCCESS,
        -:   73:					       MPIR_ERR_RECOVERABLE,
        -:   74:					       myname, __LINE__,
        -:   75:					       MPI_ERR_BAD_FILE,
        -:   76:					       "**filenamedir",
        -:   77:					       "**filenamedir %s",
        -:   78:					       fd->filename);
        1:   79:	else if (errno == EACCES) {
    #####:   80:	    *error_code = MPIO_Err_create_code(MPI_SUCCESS,
        -:   81:					       MPIR_ERR_RECOVERABLE, myname,
        -:   82:					       __LINE__, MPI_ERR_ACCESS,
        -:   83:					       "**fileaccess",
        -:   84:					       "**fileaccess %s", 
        -:   85:					       fd->filename );
        -:   86:	}
        1:   87:	else if (errno == EROFS) {
        -:   88:	    /* Read only file or file system and write access requested */
    #####:   89:	    *error_code = MPIO_Err_create_code(MPI_SUCCESS,
        -:   90:					       MPIR_ERR_RECOVERABLE, myname,
        -:   91:					       __LINE__, MPI_ERR_READ_ONLY,
        -:   92:					       "**ioneedrd", 0 );
        -:   93:	}
        -:   94:	else {
        1:   95:	    *error_code = MPIO_Err_create_code(MPI_SUCCESS,
        -:   96:					       MPIR_ERR_RECOVERABLE, myname,
        -:   97:					       __LINE__, MPI_ERR_IO, "**io",
        -:   98:					       "**io %s", strerror(errno));
        -:   99:	}
        -:  100:    }
        -:  101:    /* --END ERROR HANDLING-- */
     5840:  102:    else *error_code = MPI_SUCCESS;
     5865:  103:}