Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 723 → Rev 727

/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;