root/ompi/mca/io/romio321/romio/adio/ad_ntfs/ad_ntfs_open.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ADIOI_NTFS_Open

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
   2 /* 
   3  *
   4  *
   5  *   Copyright (C) 1997 University of Chicago. 
   6  *   See COPYRIGHT notice in top-level directory.
   7  */
   8 
   9 #include "ad_ntfs.h"
  10 
  11 void ADIOI_NTFS_Open(ADIO_File fd, int *error_code)
  12 {
  13     int err;
  14     int cmode, amode, attrib;
  15     static char myname[] = "ADIOI_NTFS_Open";
  16 
  17     amode = 0;
  18     cmode = OPEN_EXISTING;
  19 #ifdef USE_WIN_THREADED_IO
  20     attrib = FILE_FLAG_OVERLAPPED;
  21 #else
  22     attrib = FILE_ATTRIBUTE_NORMAL;
  23 #endif
  24 
  25     if (fd->access_mode & ADIO_CREATE)
  26     {
  27         cmode = OPEN_ALWAYS;
  28     }
  29     if (fd->access_mode & ADIO_EXCL)
  30     {
  31         cmode = CREATE_NEW;
  32     }
  33 
  34     if (fd->access_mode & ADIO_RDONLY)
  35     {
  36         amode = GENERIC_READ;
  37     }
  38     if (fd->access_mode & ADIO_WRONLY)
  39     {
  40         amode = GENERIC_WRITE;
  41     }
  42     if (fd->access_mode & ADIO_RDWR)
  43     {
  44         amode = GENERIC_READ | GENERIC_WRITE;
  45     }
  46 
  47     if (fd->access_mode & ADIO_DELETE_ON_CLOSE)
  48     {
  49         attrib = attrib | FILE_FLAG_DELETE_ON_CLOSE;
  50     }
  51     if (fd->access_mode & ADIO_SEQUENTIAL)
  52     {
  53         attrib = attrib | FILE_FLAG_SEQUENTIAL_SCAN;
  54     }
  55     else
  56     {
  57         attrib = attrib | FILE_FLAG_RANDOM_ACCESS;
  58     }
  59 
  60     fd->fd_sys = CreateFile(fd->filename, 
  61         amode,
  62         FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 
  63         NULL, 
  64         cmode, 
  65         attrib, 
  66         NULL);
  67     fd->fd_direct = -1;
  68 
  69     if ((fd->fd_sys != INVALID_HANDLE_VALUE) && (fd->access_mode & ADIO_APPEND))
  70     {
  71         fd->fp_ind = fd->fp_sys_posn = SetFilePointer(fd->fd_sys, 0, NULL, FILE_END);
  72         if (fd->fp_ind == INVALID_SET_FILE_POINTER)
  73         {
  74         char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
  75             err = GetLastError();
  76         ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
  77             if (err != NO_ERROR)
  78             {
  79                 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
  80                     myname, __LINE__, MPI_ERR_IO,
  81                     "**io", "**io %s", errMsg);
  82                 return;
  83             }
  84         }
  85     }
  86 
  87     /* --BEGIN ERROR HANDLING-- */
  88     if (fd->fd_sys == INVALID_HANDLE_VALUE)
  89     {
  90     char errMsg[ADIOI_NTFS_ERR_MSG_MAX];
  91         err = GetLastError();
  92     ADIOI_NTFS_Strerror(err, errMsg, ADIOI_NTFS_ERR_MSG_MAX);
  93         *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
  94                                            myname, __LINE__, MPI_ERR_IO,
  95                                            "**io",
  96                                            "**io %s", errMsg);
  97         return;
  98     }
  99     /* --END ERROR HANDLING-- */
 100     *error_code = MPI_SUCCESS;
 101 }

/* [<][>][^][v][top][bottom][index][help] */