Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// FILE.C -- Utilities for File handling
//
// Copyright (c) 1989, Microsoft Corporation. All rights reserved.
//
// Purpose:
// This module contains routines that help in file handling. These routines
// have a behaviour which depends upon the Operating System Version.
//
// Revision History:
// 08-Jun-1992 SS Port to DOSX32
// 20-Apr-1989 SB Created
//
// Notes: Created to give OS/2 Version 1.2 filename support.
#include "precomp.h"
#pragma hdrstop
#define bitsin(type) sizeof(type) * 8
// getFileName -- get file name from struct
//
// Purpose: returns filename from file search structure passed to it.
//
// Input: findBuf -- address of pointer to structure
//
// Output: Returns a pointer to filename in the file search structure.
//
// Assumes:
// That the structure of appropriate size is given to it. This means that the
// size is as per --
// find_t : DOS Real Mode
// _finddata_t : FLAT Protect Mode
//
// Notes: The functionality depends upon the OS version and mode
char * getFileName( void *findBuf ) { char *fileName;
fileName = ((struct _finddata_t *) findBuf)->name;
return(fileName); }
// getDateTime -- get file timestamp from struct
//
// Purpose: returns timestamp from the file search structure passed to it.
//
// Input: findBuf -- address of pointer to structure
//
// Output: Returns timestamp of the file in the structure
//
// Assumes:
// That the structure of appropriate size is given to it. This means that the
// size is as per --
// find_t : DOS Real Mode
// _finddata_t : FLAT Protect Mode
//
// Notes:
// The timestamp is an unsigned long value that gives the date and time of last
// change to the file. If the date is high byte then two times of creation of
// two files can be compared by comparing their timestamps. This is easy in the
// DOS struct but becomes complex for the OS/2 structs because the order of date
// and time has been reversed (for some unexplicable reason).
//
// The functionality depends upon the OS version and mode.
time_t getDateTime( const _finddata_t *pfd ) { time_t dateTime;
if( pfd->attrib & _A_SUBDIR ) { // subdir return create date
if (pfd->time_create == -1) { // except on FAT
dateTime = pfd->time_write; } else { dateTime = pfd->time_create; } } else { dateTime = pfd->time_write ; }
return dateTime; }
// putDateTime -- change the timestamp in the struct
//
// Purpose: changes timestamp in the file search structure passed to it.
//
// Input: findBuf -- address of pointer to structure
// lDateTime -- new value of timestamp
//
// Assumes:
// That the structure of appropriate size is given to it. This means that the
// size is as per --
// find_t : DOS Real Mode
// FileFindBuf : OS/2 (upto Ver 1.10) Protect Mode
// _FILEFINDBUF : OS/2 (Ver 1.20 & later) Protect Mode
//
// Notes:
// The timestamp is a time_t value that gives the date and time of last
// change to the file. If the date is high byte then two times of creation of
// two files can be compared by comparing their timestamps. This is easy in the
// DOS struct but becomes complex for the OS/2 structs because the order of date
// and time has been reversed (for some unexplicable reason).
//
// The functionality depends upon the OS version and mode.
//
// Efficient method to get a long with high and low bytes reversed is
// (long)high << 16 | (long)low //high, low being short
void putDateTime( _finddata_t *pfd, time_t lDateTime ) { if (pfd->attrib & _A_SUBDIR) { // return the creation date on directories
pfd->time_create = lDateTime; } else { pfd->time_write = lDateTime; } }
|