Improve the OpenSolaris port: support for FILE structures, and a few

additional defines to activate libc features.
This commit is contained in:
Sam Hocevar 2010-01-20 07:59:01 +00:00 committed by sam
parent 3d3b3008e7
commit 55339f7d8a
5 changed files with 31 additions and 8 deletions

View File

@ -92,33 +92,45 @@ AC_DEFINE_UNQUOTED(RECV_T, $ac_v_recv_t, [Define to the recv() return type])
AC_MSG_CHECKING([for _IO_read_ptr and _IO_read_end in FILE (glibc-style)])
AC_TRY_COMPILE([#include <stdio.h>],
[FILE *fp; fp->_IO_read_ptr++; fp->_IO_read_end++],
[ac_cv_have_file_io_read_ptr=yes],
[ac_cv_have_file_io_read_ptr=no])
AC_MSG_RESULT($ac_cv_have_file_io_read_ptr)
if test "$ac_cv_have_file_io_read_ptr" != "no"; then
[ac_cv_have_glibc_file=yes],
[ac_cv_have_glibc_file=no])
AC_MSG_RESULT($ac_cv_have_glibc_file)
if test "$ac_cv_have_glibc_file" != "no"; then
AC_DEFINE(HAVE_GLIBC_FILE, 1, [Define to 1 if FILE has glibc-style members])
fi
AC_MSG_CHECKING([for _bf._base, _r and _p in FILE (FreeBSD-style)])
AC_TRY_COMPILE([#include <stdio.h>],
[FILE *fp; fp->_bf._base++; fp->_r++; fp->_p++],
[ac_cv_have_file_bf_base=yes],
[ac_cv_have_file_bf_base=no])
AC_MSG_RESULT($ac_cv_have_file_bf_base)
if test "$ac_cv_have_file_bf_base" != "no"; then
[ac_cv_have_freebsd_file=yes],
[ac_cv_have_freebsd_file=no])
AC_MSG_RESULT($ac_cv_have_freebsd_file)
if test "$ac_cv_have_freebsd_file" != "no"; then
AC_DEFINE(HAVE_FREEBSD_FILE, 1, [Define to 1 if FILE has FreeBSD-style members])
fi
AC_MSG_CHECKING([for _base, _cnt and _ptr in FILE (Solaris-style)])
AC_TRY_COMPILE([#include <stdio.h>],
[FILE *fp; fp->_base++; fp->_cnt++; fp->_ptr++],
[ac_cv_have_solaris_file=yes],
[ac_cv_have_solaris_file=no])
AC_MSG_RESULT($ac_cv_have_solaris_file)
if test "$ac_cv_have_solaris_file" != "no"; then
AC_DEFINE(HAVE_SOLARIS_FILE, 1, [Define to 1 if FILE has Solaris-style members])
fi
dnl On HP-UX, fpos64_t == int64_t, but on Linux it's a compound object.
AC_MSG_CHECKING(how to access fpos64_t x)
ac_v_fpos64_t="unknown"
AC_TRY_COMPILE(
[#define _LARGEFILE64_SOURCE
#define _LARGEFILE_SOURCE
#include <stdio.h>],
[fpos64_t x; long long int y = x.__pos;],
[ac_v_fpos64_t="(x).__pos"])
AC_TRY_COMPILE(
[#define _LARGEFILE64_SOURCE
#define _LARGEFILE_SOURCE
#include <stdio.h>],
[fpos64_t x; long long int y = (long long int)x;],
[ac_v_fpos64_t="(x)"])

View File

@ -82,6 +82,7 @@
/* #undef HAVE_SIG_T */
#define HAVE_SOCKET 1
/* #undef HAVE_SOCKLEN_T */
/* #undef HAVE_SOLARIS_FILE */
#define HAVE_STDINT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRINGS_H 1

View File

@ -24,6 +24,8 @@
#define _GNU_SOURCE
/* Use this to get lseek64() on glibc systems */
#define _LARGEFILE64_SOURCE
/* Use this to get off64_t() on Solaris systems */
#define _LARGEFILE_SOURCE
/* Use this to get proper prototypes on HP-UX systems */
#define _XOPEN_SOURCE_EXTENDED
#define _INCLUDE_POSIX_SOURCE

View File

@ -20,6 +20,8 @@
#define _GNU_SOURCE
/* Needed for struct sigaction on HP-UX */
#define _INCLUDE_POSIX_SOURCE
/* Needed for struct sigaction on OpenSolaris */
#define __EXTENSIONS__
#if defined HAVE_STDINT_H
# include <stdint.h>

View File

@ -170,6 +170,8 @@ static inline uint8_t *get_stream_ptr(FILE *stream)
return (uint8_t *)stream->_IO_read_ptr;
#elif defined HAVE_FREEBSD_FILE
return (uint8_t *)stream->_p;
#elif defined HAVE_SOLARIS_FILE
return (uint8_t *)stream->_ptr;
#else
(void)stream;
return NULL;
@ -183,6 +185,8 @@ static inline int get_stream_off(FILE *stream)
- (uint8_t *)stream->_IO_read_base);
#elif defined HAVE_FREEBSD_FILE
return (int)((uint8_t *)stream->_p - (uint8_t *)stream->_bf._base);
#elif defined HAVE_SOLARIS_FILE
return (int)((uint8_t *)stream->_ptr - (uint8_t *)stream->_base);
#else
(void)stream;
return 0;
@ -196,6 +200,8 @@ static inline int get_stream_cnt(FILE *stream)
- (uint8_t *)stream->_IO_read_ptr);
#elif defined HAVE_FREEBSD_FILE
return stream->_r;
#elif defined HAVE_SOLARIS_FILE
return stream->_cnt;
#else
(void)stream;
return 0;