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 > Cegcc-devel@lists.sourceforge.net > 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 Cegcc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cegcc-devel