Changeset 998 for trunk/src


Ignore:
Timestamp:
Sep 21, 1999, 1:01:43 PM (26 years ago)
Author:
phaller
Message:

Add: GetFileAttributeExA/W implemented. Time conversion is ugly still

Location:
trunk/src/kernel32
Files:
4 edited

Legend:

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

    r671 r998  
    1 /* $Id: Fileio.cpp,v 1.8 1999-08-24 23:46:36 phaller Exp $ */
     1/* $Id: Fileio.cpp,v 1.9 1999-09-21 11:00:23 phaller Exp $ */
    22
    33/*
     
    2020#include "handlemanager.h"
    2121#include "devio.h"
     22#include "oslibdos.h"
    2223
    2324//******************************************************************************
     
    786787
    787788DWORD WIN32API GetCompressedFileSizeW(LPCWSTR  lpFileName,
    788                                          LPDWORD  lpFileSizeHigh)
     789                                      LPDWORD  lpFileSizeHigh)
    789790{
    790791  LPCTSTR lpAsciiFileName;                             /* converted filename */
     
    804805  return (rc);                                              /* return result */
    805806}
     807
     808
     809/*****************************************************************************
     810 * Name      : BOOL GetFileAttributesExA
     811 * Purpose   :
     812 * Parameters:
     813 * Variables :
     814 * Result    :
     815 * Remark    : KERNEL32.874
     816 * Status    : UNTESTED
     817 *
     818 * Author    : Patrick Haller [Mon, 1998/06/15 08:00]
     819 *****************************************************************************/
     820
     821BOOL WIN32API GetFileAttributesExA(LPCSTR                 lpFileName,
     822                                   GET_FILEEX_INFO_LEVELS fInfoLevelId,
     823                                   LPVOID                 lpFileInformation)
     824{
     825  BOOL rc;
     826
     827  dprintf(("KERNEL32: GetFileAttributesExA(%s,%08xh,%08xh) mostly implemented.\n",
     828           lpFileName,
     829           fInfoLevelId,
     830           lpFileInformation));
     831
     832  if (lpFileName == NULL) return FALSE;
     833  if (lpFileInformation == NULL) return FALSE;
     834
     835  if (fInfoLevelId == GetFileExInfoStandard)
     836  {
     837    LPWIN32_FILE_ATTRIBUTE_DATA lpFad = (LPWIN32_FILE_ATTRIBUTE_DATA) lpFileInformation;
     838
     839    rc = OSLibDosGetFileAttributesEx((LPSTR)lpFileName,
     840                                     fInfoLevelId,
     841                                     lpFileInformation);
     842    return (rc);
     843  }
     844  else
     845  {
     846    dprintf(("KERNEL32: GetFileAttributesExA - invalid info level %d!\n",
     847             fInfoLevelId));
     848    return FALSE;
     849  }
     850}
     851
     852
     853/*****************************************************************************
     854 * Name      : BOOL GetFileAttributesExW
     855 * Purpose   :
     856 * Parameters:
     857 * Variables :
     858 * Result    :
     859 * Remark    : KERNEL32.875
     860 * Status    : UNTESTED
     861 *
     862 * Author    : Patrick Haller [Mon, 1998/06/15 08:00]
     863 *****************************************************************************/
     864
     865BOOL WINAPI GetFileAttributesExW(LPCWSTR                lpFileName,
     866                                 GET_FILEEX_INFO_LEVELS fInfoLevelId,
     867                                 LPVOID                 lpFileInformation)
     868{
     869  LPSTR nameA = HEAP_strdupWtoA( GetProcessHeap(), 0, lpFileName );
     870  BOOL res = GetFileAttributesExA( nameA, fInfoLevelId, lpFileInformation);
     871  HeapFree( GetProcessHeap(), 0, nameA );
     872  return res;
     873}
     874
  • trunk/src/kernel32/KERNEL32.DEF

    r974 r998  
    1 ; $Id: KERNEL32.DEF,v 1.39 1999-09-18 15:59:29 sandervl Exp $
     1; $Id: KERNEL32.DEF,v 1.40 1999-09-21 11:00:23 phaller Exp $
    22
    33;Created by BLAST for IBM's compiler
     
    933933    lstrncmpA                  = _lstrncmpA@12               @785
    934934    lstrncmpW                  = _lstrncmpW@12               @786
    935     lstrncmpiA                 = _lstrncmpiA@12              @887
    936 
    937 
     935
     936    GetFileAttributesExA       = _GetFileAttributesExA@12    @874
     937    GetFileAttributesExW       = _GetFileAttributesExW@12    @875
     938
     939    lstrncmpiA                 = _lstrncmpiA@12              @887
    938940
    939941; ----------------------------------------------------------------------------
  • trunk/src/kernel32/oslibdos.cpp

    r712 r998  
    1 /* $Id: oslibdos.cpp,v 1.3 1999-08-27 16:51:00 sandervl Exp $ */
     1/* $Id: oslibdos.cpp,v 1.4 1999-09-21 11:00:22 phaller Exp $ */
    22
    33/*
     
    163163//******************************************************************************
    164164//******************************************************************************
     165//@@@PH Note: this routine is nothing but a QUICK'N'DIRTY HACK!
     166//@@@PH       this function should be implemented accordingly to NTDLL's
     167//            RtlSecondsSince1980ToTime
     168//            RtlTimeToSecondsSince1980
     169static void iFDATEFTIME2FILETIME(FDATE fdOS2, FTIME ftOS2, LPFILETIME pftWin32)
     170{
     171  float f;
     172  #define facSECOND 2                // as encoded in OS/2
     173  #define facMINUTE 60
     174  #define facHOUR   3600
     175  #define facDAY    86400
     176  #define facMONTH  facDAY * 30      // cough, cough :)
     177  #define facYEAR   facDAY * 365
     178
     179  /* pftWin32 is 100ns based from 01.01.1601 00:00:00 */
     180  f =   (fdOS2.year  +  379) * facYEAR        // 1980 - 1601
     181      + (fdOS2.month - 0   ) * facMONTH
     182      + (fdOS2.day   - 1   ) * facDAY
     183      + (ftOS2.hours       ) * facHOUR
     184      + (ftOS2.minutes     ) * facMINUTE
     185      + (ftOS2.twosecs     ) * facSECOND;
     186
     187  f *= 10000; // convert to 100ns base
     188  pftWin32->dwHighDateTime = (f / (float)(0xffffffff) );
     189  pftWin32->dwLowDateTime  = (f - (float)((float)pftWin32->dwHighDateTime *
     190                                          (float)0xffffffff) );
     191}
     192
     193BOOL OSLibDosGetFileAttributesEx(PSZ   pszName,
     194                                 ULONG ulDummy,
     195                                 PVOID pBuffer)
     196{
     197  APIRET      rc;                                         /* API return code */
     198  FILESTATUS3 fs3;                             /* file information structure */
     199  LPWIN32_FILE_ATTRIBUTE_DATA lpFad = (LPWIN32_FILE_ATTRIBUTE_DATA) pBuffer;
     200
     201  // Note: we only handle standard "GetFileExInfoStandard" requests
     202  rc = DosQueryPathInfo(pszName,               /* query the file information */
     203                        FIL_STANDARD,
     204                        &fs3,
     205                        sizeof(fs3));
     206  if (rc != NO_ERROR)                                    /* check for errors */
     207    return FALSE;                                   /* raise error condition */
     208
     209  // convert structure
     210  lpFad->dwFileAttributes = fs3.attrFile; // directly interchangeable
     211  iFDATEFTIME2FILETIME(fs3.fdateCreation,   fs3.ftimeCreation,   &lpFad->ftCreationTime);
     212  iFDATEFTIME2FILETIME(fs3.fdateLastAccess, fs3.ftimeLastAccess, &lpFad->ftLastAccessTime);
     213  iFDATEFTIME2FILETIME(fs3.fdateLastWrite,  fs3.ftimeLastWrite,  &lpFad->ftLastWriteTime);
     214
     215  /* @@@PH we might add Aurora support ...
     216  lpFad->nFileSizeHigh    = info.nFileSizeHigh;
     217  */
     218  lpFad->nFileSizeHigh    = 0;
     219  lpFad->nFileSizeLow     = fs3.cbFile;
     220
     221  return TRUE;
     222}
  • trunk/src/kernel32/oslibdos.h

    r712 r998  
    1 /* $Id: oslibdos.h,v 1.3 1999-08-27 16:51:00 sandervl Exp $ */
     1/* $Id: oslibdos.h,v 1.4 1999-09-21 11:00:23 phaller Exp $ */
    22
    33/*
     
    1919DWORD OSLibDosQueryMem(LPVOID lpMemAddr, DWORD *lpRangeSize, DWORD *lpAttr);
    2020DWORD OSLibDosSetMem(LPVOID lpMemAddr, DWORD size, DWORD flags);
     21
     22BOOL OSLibDosGetFileAttributesEx(PSZ pszName, ULONG ulDummy, PVOID pBuffer);
    2123
    2224#define OSLIB_NOERROR                   0
Note: See TracChangeset for help on using the changeset viewer.