/programs/develop/open watcom/trunk/clib/h/kolibri.h |
---|
99,18 → 99,63 |
#endif |
#pragma pack(push, 1) |
typedef struct |
{ |
char sec; |
char min; |
char hour; |
char rsv; |
}detime_t; |
#pragma pack(pop) |
#pragma pack(push, 1) |
typedef struct |
{ |
char day; |
char month; |
short year; |
}dedate_t; |
#pragma pack(pop) |
#pragma pack(push, 1) |
typedef struct |
{ unsigned attr; |
unsigned flags; |
union |
{ |
detime_t ctime; |
unsigned cr_time; |
}; |
union |
{ |
dedate_t cdate; |
unsigned cr_date; |
}; |
union |
{ |
detime_t atime; |
unsigned acc_time; |
}; |
union |
{ |
dedate_t adate; |
unsigned acc_date; |
}; |
union |
{ |
detime_t mtime; |
unsigned mod_time; |
}; |
union |
{ |
dedate_t mdate; |
unsigned mod_date; |
}; |
unsigned size; |
unsigned size_high; |
} FILEINFO; |
#pragma pack(pop) |
unsigned init_heap(void); |
118,7 → 163,8 |
unsigned user_free(void *); |
int create_file(const char *name); |
int get_fileinfo(const char *name,FILEINFO* pinfo); |
int set_file_size(const char *name, unsigned size); |
int get_fileinfo(const char *name,FILEINFO *info); |
int read_file (const char *name,void *buff, unsigned offset, unsigned count,unsigned *reads); |
int write_file(const char *name,const void *buff,unsigned offset,unsigned count,unsigned *writes); |
159,6 → 205,22 |
parm [EAX] value [EAX] \ |
modify [ EBX ]; |
#pragma aux set_file_size = \ |
"push 0" \ |
"push 0" \ |
"mov [esp+1], eax" \ |
"push 0" \ |
"push 0" \ |
"push 0" \ |
"push ebx" \ |
"push 4" \ |
"mov ebx, esp" \ |
"mov eax, 70" \ |
"int 0x40" \ |
"add esp, 28" \ |
parm [EAX] [EBX] value [EAX] \ |
modify [ EBX ]; |
#pragma aux get_fileinfo = \ |
"push 0" \ |
"push 0" \ |
/programs/develop/open watcom/trunk/clib/handleio/chsizklbr.c |
---|
0,0 → 1,82 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#include "variety.h" |
#include <windows.h> |
#include <unistd.h> |
#include "iomode.h" |
#include "fileacc.h" |
#include "rtcheck.h" |
#include "seterrno.h" |
#include "lseek.h" |
#include "kolibri.h" |
typedef struct |
{ |
char *name; |
unsigned int offset; |
}__file_handle; |
_WCRTLINK int chsize( int hid, long size ) |
{ |
long curOffset; |
long rc; |
__file_handle *fh; |
__handle_check( hid, -1 ); |
fh = (__file_handle*) __getOSHandle( hid ); |
_AccessFileH( hid ); |
curOffset = __lseek( hid, 0L, SEEK_CUR ); /* get current offset */ |
rc = set_file_size(fh->name, size); |
if(rc !=0 ) |
{ |
_ReleaseFileH( hid ); |
if(rc==8) |
__set_errno( ENOSPC ); |
else |
__set_errno( EACCES ); |
return -1; |
}; |
if( curOffset > size ) curOffset = size; |
curOffset = __lseek( hid, curOffset, SEEK_SET ); |
_ReleaseFileH( hid ); |
if( curOffset == -1 ) { |
__set_errno(ENOSPC); |
return( -1 ); |
} |
return( 0 ); |
} |
/programs/develop/open watcom/trunk/clib/handleio/fstat.c |
---|
0,0 → 1,135 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: OS/2 implementation of fstat(). |
* |
****************************************************************************/ |
#include "variety.h" |
#include "widechar.h" |
#include <stddef.h> |
#include <stdio.h> |
#include <io.h> |
#include <time.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <errno.h> |
#include <direct.h> |
#include "iomode.h" |
#include "rtcheck.h" |
#include "seterrno.h" |
#include "kolibri.h" |
typedef struct |
{ |
char *name; |
unsigned int offset; |
}__file_handle; |
static unsigned short at2mode( int attr ) |
/***************************************/ |
{ |
register unsigned short mode; |
if( attr & 0x10 ) { |
mode = S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH; |
} else { |
mode = S_IFREG; |
} |
mode |= S_IRUSR | S_IRGRP | S_IROTH; |
if( !(attr & (0x04 | 0x01 ) ) ) { |
mode |= S_IWUSR | S_IWGRP | S_IWOTH; |
} |
return( mode ); |
} |
#ifdef __WIDECHAR__ |
_WCRTLINK int _wfstat( int handle, struct _stat *buf ) |
#else |
_WCRTLINK int fstat( int handle, struct stat *buf ) |
#endif |
{ |
__file_handle *fh; |
FILEINFO info; |
int err; |
struct tm time; |
__handle_check( handle, -1 ); |
fh = (__file_handle*) __getOSHandle(handle); |
err = get_fileinfo(fh->name,&info); |
if(err) |
return (-1); |
buf->st_mode = at2mode(info.attr); |
time.tm_sec = info.ctime.sec; |
time.tm_min = info.ctime.min; |
time.tm_hour = info.ctime.hour; |
time.tm_mday = info.cdate.day; |
time.tm_mon = info.cdate.month; |
time.tm_year = info.cdate.year - 1900; |
time.tm_isdst = -1; |
buf->st_ctime = mktime(&time); |
time.tm_sec = info.atime.sec; |
time.tm_min = info.atime.min; |
time.tm_hour = info.atime.hour; |
time.tm_mday = info.adate.day; |
time.tm_mon = info.adate.month; |
time.tm_year = info.adate.year - 1900; |
time.tm_isdst = -1; |
buf->st_atime = mktime(&time); |
time.tm_sec = info.mtime.sec; |
time.tm_min = info.mtime.min; |
time.tm_hour = info.mtime.hour; |
time.tm_mday = info.mdate.day; |
time.tm_mon = info.mdate.month; |
time.tm_year = info.mdate.year - 1900; |
time.tm_isdst = -1; |
buf->st_mtime = mktime(&time); |
buf->st_size = info.size; |
buf->st_dev = buf->st_rdev = 0; |
buf->st_attr = info.attr; |
buf->st_nlink = 1; |
buf->st_ino = handle; |
buf->st_uid = buf->st_gid = 0; |
buf->st_btime = buf->st_mtime; |
buf->st_archivedID = 0; |
buf->st_updatedID = 0; |
buf->st_inheritedRightsMask = 0; |
buf->st_originatingNameSpace = 0; |
return( 0 ); |
}; |
/programs/develop/open watcom/trunk/clib/handleio/openklbr.c |
---|
68,6 → 68,10 |
char* buff; |
char c; |
buff = (char*)lib_malloc(strlen(path)+2); |
strcpy(buff, path); |
if(*path == '/') |
{ |
buff = (char*)lib_malloc(strlen(path)+1); |
127,6 → 131,7 |
}; |
}; |
buff[len]= '\0'; |
return buff; |
}; |
171,10 → 176,19 |
path = getfullpath(name); |
if(err=get_fileinfo(path,&info)) |
err=get_fileinfo(path,&info); |
if( mode & O_EXCL && mode & O_CREAT ) |
{ |
// printf("failed getfileinfo %s\n\r", path); |
if( !err) |
{ |
__set_errno( EEXIST ); |
return (HANDLE)-1; |
}; |
} |
if(err) |
{ |
if(mode & O_CREAT) |
err=create_file(path); |
184,9 → 198,12 |
return (HANDLE)-1; |
}; |
}; |
if( mode & O_TRUNC ) |
set_file_size(path, 0); |
if ( !(handle=(__file_handle*)lib_malloc(sizeof( __file_handle) ))) |
{ lib_free(path); |
{ |
lib_free(path); |
return (HANDLE)-1; |
}; |
211,9 → 228,8 |
return( -1 ); |
} |
rwmode = mode; |
rwmode = mode & ( O_RDONLY | O_WRONLY | O_RDWR | O_NOINHERIT ); |
/*** Open the file ***/ |
handle = __openFileHandle( name, mode); |
225,11 → 241,11 |
} |
// Now use the slot we got. |
__setOSHandle( hid, handle ); // JBS 99/11/01 |
iomode_flags = 0; |
if( rwmode == O_RDWR ) iomode_flags |= _READ | _WRITE; |
else if( rwmode == O_RDONLY) iomode_flags |= _READ; |
else if( rwmode == O_WRONLY) iomode_flags |= _WRITE; |
/programs/develop/open watcom/trunk/clib/handleio/oshdl.c |
---|
0,0 → 1,54 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#include "variety.h" |
#include <errno.h> |
#include <unistd.h> |
#include "iomode.h" |
#include "rtcheck.h" |
#include "seterrno.h" |
// Note: there are no OS handles under anything other than Win32 |
_WCRTLINK long _get_osfhandle( int posix_handle ) |
{ |
long os_handle; |
__handle_check( posix_handle, -1 ); |
os_handle = (long) __getOSHandle( posix_handle ); |
return( os_handle ); |
} |
_WCRTLINK int _os_handle( int posix_handle ) |
{ |
return( (int) _get_osfhandle( posix_handle ) ); |
} |
/programs/develop/open watcom/trunk/clib/handleio/qread.c |
---|
46,6 → 46,8 |
int __qread( int handle, void *buffer, unsigned len ) |
{ |
int err; |
__file_handle *fh; |
unsigned amount_read=0; |
52,13 → 54,11 |
__handle_check( handle, -1 ); |
fh = (__file_handle*) __getOSHandle( handle ); |
if(read_file(fh->name,buffer,fh->offset,len,&amount_read)) |
{ |
err = read_file(fh->name,buffer,fh->offset,len,&amount_read); |
fh->offset+=amount_read; |
if(err) |
if ( amount_read == 0) |
return (-1); |
} |
fh->offset+=amount_read; |
return( amount_read ); |
}; |
/programs/develop/open watcom/trunk/clib/handleio/read.c |
---|
41,6 → 41,7 |
#include "rtdata.h" |
#include "seterrno.h" |
#include "lseek.h" |
#include "kolibri.h" |
typedef struct |
{ |
48,9 → 49,6 |
unsigned int offset; |
}__file_handle; |
int _stdcall read_file (const char *name,char *buff,unsigned offset, unsigned count,unsigned *reads); |
_WCRTLINK int read( int handle, void *buf, unsigned len ) |
{ |
unsigned read_len, total_len; |
60,8 → 58,11 |
BOOL rc; |
HANDLE h; |
unsigned amount_read; |
int err; |
__file_handle *fh; |
__handle_check( handle, -1 ); |
__ChkTTYIOMode( handle ); |
iomode_flags = __GetIOMode( handle ); |
82,14 → 83,15 |
if( iomode_flags & _BINARY ) /* if binary mode */ |
{ |
if(read_file(fh->name,buffer,fh->offset,len,&amount_read)) |
{ |
err=read_file(fh->name,buffer,fh->offset,len,&amount_read); |
fh->offset+=amount_read; |
total_len = amount_read; |
if(err) |
if ( amount_read == 0) |
return (-1); |
} |
fh->offset+=amount_read; |
total_len = amount_read; |
} |
else |
{ |
total_len = 0; |
96,13 → 98,12 |
read_len = len; |
do |
{ |
if(read_file(fh->name,buffer,fh->offset,len,&amount_read)) |
{ |
err=read_file(fh->name,buffer,fh->offset,len,&amount_read); |
fh->offset+=amount_read; |
if( amount_read == 0 ) |
{ /* EOF */ |
break; |
} |
} |
break; /* EOF */ |
reduce_idx = 0; |
finish_idx = reduce_idx; |
for( ; reduce_idx < amount_read; ++reduce_idx ) |
/programs/develop/open watcom/trunk/clib/handleio/setmd.c |
---|
0,0 → 1,91 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <errno.h> |
#if defined(__NT__) |
// #include <windows.h> |
#endif |
#include <unistd.h> |
#include "fcntl.h" |
#include "dos.h" |
#include "dosfunc.h" |
#include "fileacc.h" |
#include "rtcheck.h" |
#include "rtdata.h" |
#include "iomode.h" |
#include "seterrno.h" |
_WCRTLINK int setmode( int handle, int mode ) |
{ |
unsigned iomode_flags; |
unsigned old_mode; |
__stream_link *link; |
FILE *fp; |
__handle_check( handle, -1 ); |
iomode_flags = __GetIOMode( handle ); |
if( iomode_flags == 0 ) { |
__set_errno( EBADF ); |
return( -1 ); |
} |
old_mode = (iomode_flags & _BINARY) ? O_BINARY : O_TEXT; |
if( mode != old_mode ) { |
if( mode == O_BINARY || mode == O_TEXT ) { |
iomode_flags &= ~ _BINARY; |
if( mode == O_BINARY ) { |
iomode_flags |= _BINARY; |
} |
__SetIOMode( handle, iomode_flags ); |
_AccessFileH( handle ); |
for( link = _RWD_ostream; link != NULL; link = link->next ) { |
fp = link->stream; |
if( fp->_flag != 0 ) { /* if file is open */ |
if( fileno( fp ) == handle ) { |
fp->_flag &= ~ _BINARY; |
if( mode == O_BINARY ) { |
fp->_flag |= _BINARY; |
} |
break; |
} |
} |
} |
_ReleaseFileH( handle ); |
} else { |
__set_errno( EINVAL ); |
old_mode = -1; |
} |
} |
return( old_mode ); |
} |
/programs/develop/open watcom/trunk/clib/handleio/write.c |
---|
44,6 → 44,7 |
#include "rtdata.h" |
#include "seterrno.h" |
#include "lseek.h" |
#include "kolibri.h" |
/* |
The _lwrite function writes data to the specified file. |
142,8 → 143,6 |
unsigned int offset; |
}__file_handle; |
int _stdcall write_file (const char *name,const void* buff,unsigned offset, unsigned count,unsigned *reads); |
static int os_write( int handle, const void *buffer, unsigned len, unsigned *amt ) |
/********************************************************************************/ |
{ |
154,12 → 153,9 |
fh = (__file_handle*) __getOSHandle( handle ); |
if(write_file(fh->name,buffer,fh->offset,len,amt)) |
{ |
rc = __set_errno_nt(); |
}; |
rc = write_file(fh->name,buffer,fh->offset,len,amt); |
fh->offset+= *amt; |
if( *amt != len ) |
{ |
rc = ENOSPC; |