From fab62285412aaafdfc4c81e9b581fb57f9d59c99 Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Mon, 19 Jul 2004 20:08:20 +0000 Subject: [PATCH] re PR java/16472 (jartool.c uses ftruncate, nonexistant on mingw32) 2004-07-11 Bryce McKinlay PR java/16472 * configure.ac: Check for ftruncate() and _chsize(). * jartool.c (main): Use _chsize if ftruncate not available. * configure, config.h.in: Rebuilt. From-SVN: r84929 --- fastjar/ChangeLog | 7 +++ fastjar/config.h.in | 6 +++ fastjar/configure | 104 +++++++++++++++++++++++++++++++++++++++++++ fastjar/configure.ac | 2 + fastjar/jartool.c | 8 ++++ 5 files changed, 127 insertions(+) diff --git a/fastjar/ChangeLog b/fastjar/ChangeLog index e7b86595a8d..2b54f3bde3c 100644 --- a/fastjar/ChangeLog +++ b/fastjar/ChangeLog @@ -1,3 +1,10 @@ +2004-07-11 Bryce McKinlay + + PR 16472 + * configure.ac: Check for ftruncate() and _chsize(). + * jartool.c (main): Use _chsize if ftruncate not available. + * configure, config.h.in: Rebuilt. + 2004-07-09 Richard Sandiford * jartool.c (find_entry, looks_like_dir): Remove inline spec. diff --git a/fastjar/config.h.in b/fastjar/config.h.in index 173a13533a1..84efea0e5fc 100644 --- a/fastjar/config.h.in +++ b/fastjar/config.h.in @@ -10,6 +10,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H @@ -57,6 +60,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to 1 if you have the `_chsize' function. */ +#undef HAVE__CHSIZE + /* Define if the host machine stores words of multi-word integers in big-endian order. */ #undef HOST_WORDS_BIG_ENDIAN diff --git a/fastjar/configure b/fastjar/configure index a379ca60b79..2b3bfb7cca3 100755 --- a/fastjar/configure +++ b/fastjar/configure @@ -4150,6 +4150,110 @@ fi done + + +for ac_func in ftruncate _chsize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6 if test "${ac_cv_type_off_t+set}" = set; then diff --git a/fastjar/configure.ac b/fastjar/configure.ac index 635836fd882..fa3ecf4ac0e 100644 --- a/fastjar/configure.ac +++ b/fastjar/configure.ac @@ -27,6 +27,8 @@ AC_HEADER_STDC AC_STRUCT_TM AC_CHECK_HEADERS(fcntl.h unistd.h sys/param.h stdlib.h limits.h) +AC_CHECK_FUNCS(ftruncate _chsize) + dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_OFF_T AC_STRUCT_TM diff --git a/fastjar/jartool.c b/fastjar/jartool.c index 8d223f6cbf0..d57794dea92 100644 --- a/fastjar/jartool.c +++ b/fastjar/jartool.c @@ -573,9 +573,17 @@ int main(int argc, char **argv){ create_central_header(jarfd); +#if ! (HAVE_FTRUNCATE || HAVE__CHSIZE) + #error neither ftruncate() or _chsize() available +#endif /* Check if the file shrunk when we updated it. */ if (action == ACTION_UPDATE) +#if HAVE_FTRUNCATE ftruncate (jarfd, lseek (jarfd, 0, SEEK_CUR)); +#endif +#if HAVE__CHSIZE + _chsize (jarfd, lseek (jarfd, 0, SEEK_CUR)); +#endif if (jarfd != STDIN_FILENO && close(jarfd) != 0) { fprintf(stderr, "%s: error closing jar archive: %s\n", -- 2.30.2