I'll port the profiling stuff to this; I'm already mostly through its revised build (as we agreed).
Danny
On Sun, 2006-11-12 at 12:51 +0000, Pedro Alves wrote:
> Hi all,
>
> While porting gdbserver I stumbled on yet again having to provide write
> and read functions
> as wrappers around ReadFile and WriteFile.
> This is about the fourth time I do in a short period, so, I've put those
> functions
> in libmingwex.a (*), to make this the last time. While I was at it, I
> added also fdopen,
> implemented in terms of the wide version found in coredll.dll, and also
> added open and lseek.
>
> Keep in mind that file descriptors in WinCE are really disguised
> HANDLEs, so doing a:
> write (1, "msg", 3);
> Won't work.
>
> You need to do:
> write ((int)fileno(stdout), "msg", 3);
>
> (*) -lmingwex is added by default by the compiler driver, you don't need
> to do anything.
>
> Cheers,
> Pedro Alves
>
> P.S.: I missed some things in the first patch, which I fixed on the second.
>
> (patch 1)
>
> src/mingw/ChangeLog.mingw32ce:
>
> 2006-11-11 Pedro Alves <[EMAIL PROTECTED]>
>
> * mingwex/Makefile.in (WINCE_DISTFILES): Add fdopen.c, read.c, write.c,
> open.c and lseek.c.
> (WINCE_OBJS): Add fdopen.o, read.o, write.o, open.o and lseek.o.
> * mingwex/wince/open.c: New file.
> * mingwex/wince/lseek.c: New file.
> * mingwex/wince/fdopen.c: New file.
> * mingwex/wince/read.c: New file.
> * mingwex/wince/write.c: New file.
>
> (patch 2)
>
> src/mingw/ChangeLog.mingw32ce:
>
> 2006-11-11 Pedro Alves <[EMAIL PROTECTED]>
>
> * mingwex/wince/open.c (open): Rename to _open.
> * mingwex/wince/lseek.c (lseek): Rename to _lseek.
> * mingwex/wince/fdopen.c (fdopen): Rename to _fdopen.
> * mingwex/wince/read.c (read): Rename to _read.
> * mingwex/wince/write.c (write): Rename to _write.
> * include/fcntl.h: Enable file.
> * include/io.h (_open, open, lseek, _lseek,
> read, _read, write, _write): Unhide.
> * include/stdio.h (fdopen, _fdopen): Unhide.
> * include/unistd.h: Enable file.
> * moldname.def.in (open, lseek, read, write): Unhide.
>
> plain text document attachment (posix.diff)
> Index: Makefile.in
> ===================================================================
> --- Makefile.in (revision 750)
> +++ Makefile.in (working copy)
> @@ -85,7 +85,7 @@ COMPLEX_DISTFILES = \
>
> WINCE_DISTFILES = \
> asctime.c freopen.c gmtime.c localtime.c mktime.c strftime.c time.c \
> - tempnam.c unlink.c wcsftime.c
> + tempnam.c unlink.c wcsftime.c fdopen.c read.c write.c open.c lseek.c
>
> CC = @CC@
> # FIXME: Which is it, CC or CC_FOR_TARGET?
> @@ -185,7 +185,7 @@ COMPLEX_OBJS = \
> ctan.o ctanf.o ctanl.o ctanh.o ctanhf.o ctanhl.o
> WINCE_OBJS = \
> asctime.o freopen.o gmtime.o localtime.o mktime.o strftime.o time.o \
> - tempnam.o unlink.o wcsftime.o
> + tempnam.o unlink.o wcsftime.o fdopen.o read.o write.o open.o lseek.o
>
> ifneq (,$(findstring wince,$(target_alias)))
> LIB_OBJS = $(WINCE_OBJS)
> Index: wince/open.c
> ===================================================================
> --- wince/open.c (revision 0)
> +++ wince/open.c (revision 0)
> @@ -0,0 +1,74 @@
> +#include <windows.h>
> +#include <unistd.h>
> +#include <fcntl.h>
> +
> +int
> +open (const char *path, int oflag, ...)
> +{
> + wchar_t wpath[MAX_PATH];
> + DWORD fileaccess;
> + DWORD fileshare;
> + DWORD filecreate;
> + DWORD fileattrib;
> + HANDLE hnd;
> +
> + size_t path_len = strlen (path);
> + if (path_len >= MAX_PATH)
> + return -1;
> +
> + switch (oflag & (O_RDONLY | O_WRONLY | O_RDWR))
> + {
> + case O_RDONLY:
> + fileaccess = GENERIC_READ;
> + break;
> + case O_WRONLY:
> + fileaccess = GENERIC_WRITE;
> + break;
> + case O_RDWR:
> + fileaccess = GENERIC_READ | GENERIC_WRITE;
> + break;
> + default:
> + return -1;
> + }
> +
> + switch (oflag & (O_CREAT | O_EXCL | O_TRUNC))
> + {
> + case 0:
> + case O_EXCL: /* ignore EXCL w/o CREAT */
> + filecreate = OPEN_EXISTING;
> + break;
> + case O_CREAT:
> + filecreate = OPEN_ALWAYS;
> + break;
> + case O_CREAT | O_EXCL:
> + case O_CREAT | O_TRUNC | O_EXCL:
> + filecreate = CREATE_NEW;
> + break;
> +
> + case O_TRUNC:
> + case O_TRUNC | O_EXCL: /* ignore EXCL w/o CREAT */
> + filecreate = TRUNCATE_EXISTING;
> + break;
> + case O_CREAT | O_TRUNC:
> + filecreate = CREATE_ALWAYS;
> + break;
> + default:
> + /* this can't happen ... all cases are covered */
> + return -1;
> + }
> +
> + mbstowcs (wpath, path, path_len + 1);
> +
> + fileshare = FILE_SHARE_READ | FILE_SHARE_WRITE;
> + fileattrib = FILE_ATTRIBUTE_NORMAL;
> +
> + hnd = CreateFileW (wpath, fileaccess, fileshare, NULL, filecreate,
> + fileattrib, NULL);
> + if (hnd == INVALID_HANDLE_VALUE)
> + return -1;
> +
> + if (oflag & O_APPEND)
> + SetFilePointer (hnd, 0, NULL, FILE_END);
> +
> + return (int) hnd;
> +}
> Index: wince/lseek.c
> ===================================================================
> --- wince/lseek.c (revision 0)
> +++ wince/lseek.c (revision 0)
> @@ -0,0 +1,21 @@
> +#include <windows.h>
> +#include <unistd.h>
> +
> +long
> +lseek (int fildes, long offset, int whence)
> +{
> + DWORD mode = 0;
> + switch (whence)
> + {
> + case SEEK_SET:
> + mode = FILE_BEGIN;
> + break;
> + case SEEK_CUR:
> + mode = FILE_CURRENT;
> + break;
> + case SEEK_END:
> + mode = FILE_END;
> + break;
> + }
> + return (long) SetFilePointer ((HANDLE) fildes, offset, NULL, mode);
> +}
>
> Property changes on: wince/lseek.c
> ___________________________________________________________________
> Name: svn:eol-style
> + native
>
> Index: wince/fdopen.c
> ===================================================================
> --- wince/fdopen.c (revision 0)
> +++ wince/fdopen.c (revision 0)
> @@ -0,0 +1,17 @@
> +#include <stdio.h>
> +#include <string.h>
> +
> +#define MAX_MODE 64
> +
> +FILE *
> +fdopen (int fildes, const char *mode)
> +{
> + FILE *f;
> + wchar_t wmode[MAX_MODE];
> + size_t sizem = strlen (mode) + 1;
> + if (sizem > MAX_MODE)
> + return NULL;
> + mbstowcs (wmode, mode, sizem);
> + f = _wfdopen (fildes, wmode);
> + return f;
> +}
>
> Property changes on: wince/fdopen.c
> ___________________________________________________________________
> Name: svn:eol-style
> + native
>
> Index: wince/read.c
> ===================================================================
> --- wince/read.c (revision 0)
> +++ wince/read.c (revision 0)
> @@ -0,0 +1,13 @@
> +#include <windows.h>
> +#include <unistd.h>
> +
> +int
> +read (int fildes, void *buf, unsigned int bufsize)
> +{
> + DWORD NumberOfBytesRead;
> + if (bufsize > 0x7fffffff)
> + bufsize = 0x7fffffff;
> + if (!ReadFile ((HANDLE) fildes, buf, bufsize, &NumberOfBytesRead, NULL))
> + return -1;
> + return (int) NumberOfBytesRead;
> +}
>
> Property changes on: wince/read.c
> ___________________________________________________________________
> Name: svn:eol-style
> + native
>
> Index: wince/write.c
> ===================================================================
> --- wince/write.c (revision 0)
> +++ wince/write.c (revision 0)
> @@ -0,0 +1,13 @@
> +#include <windows.h>
> +#include <unistd.h>
> +
> +int
> +write (int fildes, const void *buf, unsigned int bufsize)
> +{
> + DWORD NumberOfBytesWritten;
> + if (bufsize > 0x7fffffff)
> + bufsize = 0x7fffffff;
> + if (!WriteFile ((HANDLE) fildes, buf, bufsize, &NumberOfBytesWritten,
> NULL))
> + return -1;
> + return (int) NumberOfBytesWritten;
> +}
>
> Property changes on: wince/write.c
> ___________________________________________________________________
> Name: svn:eol-style
> + native
>
> plain text document attachment (posix2.diff)
> Index: mingwex/wince/open.c
> ===================================================================
> --- mingwex/wince/open.c (revision 784)
> +++ mingwex/wince/open.c (working copy)
> @@ -3,7 +3,7 @@
> #include <fcntl.h>
>
> int
> -open (const char *path, int oflag, ...)
> +_open (const char *path, int oflag, ...)
> {
> wchar_t wpath[MAX_PATH];
> DWORD fileaccess;
> Index: mingwex/wince/lseek.c
> ===================================================================
> --- mingwex/wince/lseek.c (revision 784)
> +++ mingwex/wince/lseek.c (working copy)
> @@ -2,7 +2,7 @@
> #include <unistd.h>
>
> long
> -lseek (int fildes, long offset, int whence)
> +_lseek (int fildes, long offset, int whence)
> {
> DWORD mode = 0;
> switch (whence)
> Index: mingwex/wince/fdopen.c
> ===================================================================
> --- mingwex/wince/fdopen.c (revision 784)
> +++ mingwex/wince/fdopen.c (working copy)
> @@ -4,7 +4,7 @@
> #define MAX_MODE 64
>
> FILE *
> -fdopen (int fildes, const char *mode)
> +_fdopen (int fildes, const char *mode)
> {
> FILE *f;
> wchar_t wmode[MAX_MODE];
> Index: mingwex/wince/read.c
> ===================================================================
> --- mingwex/wince/read.c (revision 784)
> +++ mingwex/wince/read.c (working copy)
> @@ -2,7 +2,7 @@
> #include <unistd.h>
>
> int
> -read (int fildes, void *buf, unsigned int bufsize)
> +_read (int fildes, void *buf, unsigned int bufsize)
> {
> DWORD NumberOfBytesRead;
> if (bufsize > 0x7fffffff)
> Index: mingwex/wince/write.c
> ===================================================================
> --- mingwex/wince/write.c (revision 784)
> +++ mingwex/wince/write.c (working copy)
> @@ -2,7 +2,7 @@
> #include <unistd.h>
>
> int
> -write (int fildes, const void *buf, unsigned int bufsize)
> +_write (int fildes, const void *buf, unsigned int bufsize)
> {
> DWORD NumberOfBytesWritten;
> if (bufsize > 0x7fffffff)
> Index: include/fcntl.h
> ===================================================================
> --- include/fcntl.h (revision 750)
> +++ include/fcntl.h (working copy)
> @@ -8,10 +8,6 @@
> * in sys/stat.h (ick).
> *
> */
> -#ifdef __COREDLL__
> -# include_next <fcntl.h>
> -#else /* __COREDLL__ */
> -
> #ifndef _FCNTL_H_
> #define _FCNTL_H_
>
> @@ -71,5 +67,3 @@
> #endif /* Not _NO_OLDNAMES */
>
> #endif /* Not _FCNTL_H_ */
> -
> -#endif /* Not __COREDLL__ */
> Index: include/io.h
> ===================================================================
> --- include/io.h (revision 750)
> +++ include/io.h (working copy)
> @@ -200,10 +200,11 @@
> #endif
>
> #ifndef __COREDLL__
> -
> _CRTIMP int __cdecl _access (const char*, int);
> _CRTIMP int __cdecl _chsize (int, long);
> +#endif /* __COREDLL__ */
> _CRTIMP int __cdecl _close (int);
> +#ifndef __COREDLL__
> _CRTIMP int __cdecl _commit(int);
>
> /* NOTE: The only significant bit in unPermissions appears to be bit 7
> (0x80),
> @@ -227,15 +228,19 @@
>
> /* LK_... locking commands defined in sys/locking.h. */
> _CRTIMP int __cdecl _locking (int, int, long);
> +#endif /* __COREDLL__ */
>
> _CRTIMP long __cdecl _lseek (int, long, int);
>
> /* Optional third argument is unsigned unPermissions. */
> _CRTIMP int __cdecl _open (const char*, int, ...);
>
> +#ifndef __COREDLL__
> _CRTIMP int __cdecl _open_osfhandle (long, int);
> _CRTIMP int __cdecl _pipe (int *, unsigned int, int);
> +#endif /* __COREDLL__ */
> _CRTIMP int __cdecl _read (int, void*, unsigned int);
> +#ifndef __COREDLL__
> _CRTIMP int __cdecl _setmode (int, int);
>
> /* SH_... flags for nShFlags defined in share.h
> @@ -247,9 +252,7 @@
> _CRTIMP int __cdecl _umask (int);
> #endif /* __COREDLL__ */
> _CRTIMP int __cdecl _unlink (const char*);
> -#ifndef __COREDLL__
> _CRTIMP int __cdecl _write (int, const void*, unsigned int);
> -#endif /* __COREDLL__ */
>
> /* Wide character versions. Also declared in wchar.h. */
> /* Not in crtdll.dll */
> @@ -284,25 +287,27 @@
> #ifndef __COREDLL__
> _CRTIMP int __cdecl access (const char*, int);
> _CRTIMP int __cdecl chsize (int, long );
> +#endif /* __COREDLL__ */
> _CRTIMP int __cdecl close (int);
> +#ifndef __COREDLL__
> _CRTIMP int __cdecl creat (const char*, int);
> _CRTIMP int __cdecl dup (int);
> _CRTIMP int __cdecl dup2 (int, int);
> _CRTIMP int __cdecl eof (int);
> _CRTIMP long __cdecl filelength (int);
> _CRTIMP int __cdecl isatty (int);
> +#endif /* __COREDLL__ */
> _CRTIMP long __cdecl lseek (int, long, int);
> _CRTIMP int __cdecl open (const char*, int, ...);
> _CRTIMP int __cdecl read (int, void*, unsigned int);
> +#ifndef __COREDLL__
> _CRTIMP int __cdecl setmode (int, int);
> _CRTIMP int __cdecl sopen (const char*, int, int, ...);
> _CRTIMP long __cdecl tell (int);
> _CRTIMP int __cdecl umask (int);
> #endif /* __COREDLL__ */
> _CRTIMP int __cdecl unlink (const char*);
> -#ifndef __COREDLL__
> _CRTIMP int __cdecl write (int, const void*, unsigned int);
> -#endif /* __COREDLL__ */
> #endif /* _UWIN */
>
> /* Wide character versions. Also declared in wchar.h. */
> Index: include/stdio.h
> ===================================================================
> --- include/stdio.h (revision 750)
> +++ include/stdio.h (working copy)
> @@ -419,7 +419,9 @@
> #ifndef __COREDLL__
> _CRTIMP int __cdecl _fgetchar (void);
> _CRTIMP int __cdecl _fputchar (int);
> +#endif
> _CRTIMP FILE* __cdecl _fdopen (int, const char*);
> +#ifndef __COREDLL__
> _CRTIMP FILE* __cdecl _fsopen(const char*, const char*, int);
> _CRTIMP int __cdecl _fileno (FILE*);
> #endif
> @@ -431,10 +433,10 @@
> #endif
>
> #ifndef _NO_OLDNAMES
> +_CRTIMP FILE* __cdecl fdopen (int, const char*);
> #ifndef __COREDLL__
> _CRTIMP int __cdecl fgetchar (void);
> _CRTIMP int __cdecl fputchar (int);
> -_CRTIMP FILE* __cdecl fdopen (int, const char*);
> _CRTIMP int __cdecl fileno (FILE*);
> #else
> _CRTIMP void* __cdecl fileno (FILE*);
> Index: include/unistd.h
> ===================================================================
> --- include/unistd.h (revision 750)
> +++ include/unistd.h (working copy)
> @@ -4,11 +4,6 @@
> * unistd.h maps (roughly) to io.h
> */
>
> -#ifdef __COREDLL__
> -/* No such file on Windows CE. */
> -# include_next <unistd.h>
> -#else /* __COREDLL__ */
> -
> #ifndef _UNISTD_H
> #define _UNISTD_H
>
> @@ -36,5 +31,3 @@
> #endif
>
> #endif /* _UNISTD_H */
> -
> -#endif /* __COREDLL__ */
> Index: moldname.def.in
> ===================================================================
> --- moldname.def.in (revision 750)
> +++ moldname.def.in (working copy)
> @@ -29,7 +29,9 @@
> chdir
> chmod
> chsize
> +#endif /* __COREDLL__ */
> close
> +#ifndef __COREDLL__
> creat
> cwait
> #endif /* __COREDLL__ */
> @@ -83,21 +85,25 @@
> kbhit
> lfind
> lsearch
> +#endif /* __COREDLL__ */
> lseek
> -#endif /* __COREDLL__ */
> ltoa
> memccpy
> memicmp
> #ifndef __COREDLL__
> mkdir
> mktemp
> +#endif /* __COREDLL__ */
> open
> +#ifndef __COREDLL__
> pclose
> popen
> putch
> putenv
> putw
> +#endif /* __COREDLL__ */
> read
> +#ifndef __COREDLL__
> rmdir
> rmtmp
> searchenv
> @@ -160,9 +166,7 @@
> #if (__MSVCRT__)
> wpopen
> #endif
> -#ifndef __COREDLL__
> write
> -#endif /* __COREDLL__ */
> ; non-ANSI functions declared in math.h
> j0
> j1
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________ Cegcc-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/cegcc-devel
--
Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info
signature.asc
Description: This is a digitally signed message part
------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________ Cegcc-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/cegcc-devel
