[PATCH] Cygwin specific changes to allow 64bit file access [was Re: [PATCH] lseek64r.c: Change off64_t to __off64_t]

J. Johnston jjohnstn@redhat.com
Fri Mar 7 16:32:00 GMT 2003


A couple of comments.

You should be using _off64_t instead of __off64_t for the lseek64r.c code
so as to be consistent with its callers and to support multiple platforms.

Why are you #ifdefing out the prototypes of the 64-bit functions?

-- Jeff J.

Corinna Vinschen wrote:
> On Fri, Mar 07, 2003 at 10:53:28AM +0100, Corinna Vinschen wrote:
> 
>>the following patch changes the usage of the datatype off64_t in
>>reent/lseek64_r.c to __off64_t.  [...]
> 
> 
> This path overrides the previous one.  It makes (hopefully) all necessary
> changes to newlib which will allow Cygwin to switch to 64bit file access
> at one point.  It also fixes two compile time problems (including the one
> from the patch before) which are a result of using the "external" types
> off64_t and fpos64_t instead of __off64_t and _fpo64_t in newlib internal
> source files.
> 
> Note that this patch just *enables* to change Cygwin to 64bit file access.
> The necessary changes to Cygwin itself aren't made yet, though.
> 
> Corinna
> 
> 2003-03-07  Corinna Vinschen  <corinna@vinschen.de>
> 
> 	* configure.host: Define stdio64_dir for Cygwin.
> 	* libc/include/stdio.h: Change definition of fpos_t to fulfill
> 	Cygwin 64bit file access requirements.
> 	Drop definition of f*64() functions when compiled for Cygwin.
> 	* libc/include/sys/config.h: Define __LARGE64_FILES for Cygwin.
> 	* libc/reent/lseek64r.c: Use __off64_t instead of off64_t.
> 	* libc/stdio64/local64.h: Use _fpos64_t instead of fpos64_t.
> 
> Index: configure.host
> ===================================================================
> RCS file: /cvs/src/src/newlib/configure.host,v
> retrieving revision 1.46
> diff -p -u -r1.46 configure.host
> --- configure.host	20 Feb 2003 19:14:11 -0000	1.46
> +++ configure.host	7 Mar 2003 14:13:03 -0000
> @@ -288,6 +288,7 @@ case "${host}" in
>    *-*-cygwin*)
>  	sys_dir=cygwin
>  	posix_dir=posix
> +	stdio64_dir=stdio64
>  	;;
>    *-*-netware*)
>  	signal_dir=
> Index: libc/include/stdio.h
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/include/stdio.h,v
> retrieving revision 1.19
> diff -p -u -r1.19 stdio.h
> --- libc/include/stdio.h	23 Jul 2002 19:40:45 -0000	1.19
> +++ libc/include/stdio.h	7 Mar 2003 14:13:06 -0000
> @@ -47,12 +47,20 @@
>  
>  _BEGIN_STD_C
>  
> -typedef _fpos_t fpos_t;
>  typedef __FILE FILE;
>  
> +#ifdef __CYGWIN__
> +#ifdef __CYGWIN_USE_BIG_TYPES__
> +typedef _fpos64_t fpos_t;
> +#else
> +typedef _fpos_t fpos_t;
> +#endif
> +#else
> +typedef _fpos_t fpos_t;
>  #ifdef __LARGE64_FILES
>  typedef _fpos64_t fpos64_t;
>  #endif
> +#endif /* !__CYGWIN__ */
>  
>  #include <sys/stdio.h>
>  
> @@ -287,6 +295,7 @@ ssize_t _EXFUN(__getdelim, (char **, siz
>  ssize_t _EXFUN(__getline, (char **, size_t *, FILE *));
>  
>  #ifdef __LARGE64_FILES
> +#ifndef __CYGWIN__
>  FILE *  _EXFUN(fopen64, (const char *, const char *));
>  _off64_t _EXFUN(ftello64, (FILE *));
>  _off64_t _EXFUN(fseeko64, (FILE *, _off64_t, int));
> @@ -300,6 +309,7 @@ _off64_t _EXFUN(_fseeko64_r, (struct _re
>  int     _EXFUN(_fgetpos64_r, (struct _reent *, FILE *, _fpos64_t *));
>  int     _EXFUN(_fsetpos64_r, (struct _reent *, FILE *, const _fpos64_t *));
>  FILE *  _EXFUN(_tmpfile64_r, (struct _reent *));
> +#endif /* !__CYGWIN__ */
>  #endif /* __LARGE64_FILES */
>   
>  /*
> Index: libc/include/sys/config.h
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/include/sys/config.h,v
> retrieving revision 1.35
> diff -p -u -r1.35 config.h
> --- libc/include/sys/config.h	16 Dec 2002 22:35:32 -0000	1.35
> +++ libc/include/sys/config.h	7 Mar 2003 14:13:06 -0000
> @@ -151,6 +151,7 @@
>  #if defined(__CYGWIN32__) || defined(__CYGWIN__)
>  #define __FILENAME_MAX__ (260 - 1 /* NUL */)
>  #define _READ_WRITE_RETURN_TYPE _ssize_t
> +#define __LARGE64_FILES 1
>  #if defined(__INSIDE_CYGWIN__) || defined(_COMPILING_NEWLIB)
>  #define __IMPORT
>  #else
> Index: libc/reent/lseek64r.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/reent/lseek64r.c,v
> retrieving revision 1.2
> diff -p -u -r1.2 lseek64r.c
> --- libc/reent/lseek64r.c	26 Aug 2002 18:56:06 -0000	1.2
> +++ libc/reent/lseek64r.c	7 Mar 2003 14:13:06 -0000
> @@ -48,17 +48,17 @@ DESCRIPTION
>          with large file support.
>  */
>  
> -off64_t
> +__off64_t
>  _lseek64_r (ptr, fd, pos, whence)
>       struct _reent *ptr;
>       int fd;
> -     off64_t pos;
> +     __off64_t pos;
>       int whence;
>  {
> -  off64_t ret;
> +  __off64_t ret;
>  
>    errno = 0;
> -  if ((ret = _lseek64 (fd, pos, whence)) == (off64_t) -1 && errno != 0)
> +  if ((ret = _lseek64 (fd, pos, whence)) == (__off64_t) -1 && errno != 0)
>      ptr->_errno = errno;
>    return ret;
>  }
> Index: libc/stdio64/local64.h
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/stdio64/local64.h,v
> retrieving revision 1.1
> diff -p -u -r1.1 local64.h
> --- libc/stdio64/local64.h	17 Jul 2002 23:25:44 -0000	1.1
> +++ libc/stdio64/local64.h	7 Mar 2003 14:13:07 -0000
> @@ -6,8 +6,8 @@
>  #include "local.h"
>  
>  #ifdef __LARGE64_FILES
> -extern fpos64_t _EXFUN(__sseek64,(void *, fpos64_t, int));
> -extern fpos64_t _EXFUN(__sseek64_error,(void *, fpos64_t, int));
> +extern _fpos64_t _EXFUN(__sseek64,(void *, _fpos64_t, int));
> +extern _fpos64_t _EXFUN(__sseek64_error,(void *, _fpos64_t, int));
>  extern _READ_WRITE_RETURN_TYPE _EXFUN(__swrite64,(void *, char const *, int));
>  #endif
>  
> 




More information about the Newlib mailing list