Changeset 4008 for trunk/src


Ignore:
Timestamp:
Aug 14, 2000, 10:10:16 AM (25 years ago)
Author:
sandervl
Message:

fixed sharing violation bug in OsLibCreateFile

Location:
trunk/src/kernel32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/hmfile.cpp

    r4001 r4008  
    1 /* $Id: hmfile.cpp,v 1.17 2000-08-12 09:51:54 sandervl Exp $ */
     1/* $Id: hmfile.cpp,v 1.18 2000-08-14 08:10:10 sandervl Exp $ */
    22
    33/*
     
    66 * Copyright 1999-2000 Sander van Leeuwen
    77 *
    8  * Notes: (#define SHARE_WORKAROUND)
    9  *    - Temporary workaround for differences in share mode between
    10  *      OS/2 & NT (for opening the same file multiple times):
    11  *      NT: CreateFile with FILE_SHARE_READ
    12  *          CreateFile with FILE_SHARE_READ | FILE_SHARE_WRITE
    13  *          -> 2nd CreateFile overrides share flags of first one
    14  *          -> CreateFile with GENERIC_WRITE is now allowed
    15  *      OS2: DosOpen with OPEN_SHARE_DENYWRITE
    16  *           DosOpen with OPEN_SHARE_DENYNONE
    17  *           -> sharing violation; can't change share flags while
    18  *              handle returned by 1st DosOpen isn't closed
    19  *      --> 'Solution': always open files in FILE_SHARE_DENYNONE mode
    20  *          (several installation programs depend on this behaviour)
    21  *   
    22  *    - Only for CreateFile; might also be necessary for OpenFile, but I haven't
    23  *      seen any apps that require it (yet).
    248 *
    259 * Project Odin Software License can be found in LICENSE.TXT
  • trunk/src/kernel32/oslibdos.cpp

    r3999 r4008  
    1 /* $Id: oslibdos.cpp,v 1.38 2000-08-12 07:32:19 sandervl Exp $ */
     1/* $Id: oslibdos.cpp,v 1.39 2000-08-14 08:10:16 sandervl Exp $ */
    22/*
    33 * Wrappers for OS/2 Dos* API
     
    761761   //       FILE_FLAG_POSIX_SEMANTICS_W are not supported
    762762
    763    if(fuShare == 0)
     763   //TODO: FILE_SHARE_DELETE
     764   if((fuShare & (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) == 0 )
    764765        openMode |= OPEN_SHARE_DENYREADWRITE;
    765766   else
    766    if(fuShare == (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W))
     767   if((fuShare & (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) == (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W))
    767768        openMode |= OPEN_SHARE_DENYNONE;
    768769   else
     
    799800   while(retry < 2)
    800801   {
     802        dprintf(("DosOpen %s openFlag=%x openMode=%x", lpszFile, openFlag, openMode));
    801803        rc = DosOpen((PSZ)lpszFile,
    802804                      &hFile,
Note: See TracChangeset for help on using the changeset viewer.