- (dtucker) [configure.ac] Bug #1171: Don't use printf("%lld", longlong)

since not all platforms support it.  Instead, use internal equivalent while
   computing LLONG_MIN and LLONG_MAX.  Remove special case for alpha-dec-osf*
   as it's no longer required.  Tested by Bernhard Simon, ok djm@
This commit is contained in:
Darren Tucker 2006-03-13 19:06:51 +11:00
parent f35014af79
commit d1450dbe2a
2 changed files with 44 additions and 17 deletions

View File

@ -1,3 +1,9 @@
20060313
- (dtucker) [configure.ac] Bug #1171: Don't use printf("%lld", longlong)
since not all platforms support it. Instead, use internal equivalent while
computing LLONG_MIN and LLONG_MAX. Remove special case for alpha-dec-osf*
as it's no longer required. Tested by Bernhard Simon, ok djm@
20060304
- (dtucker) [contrib/cygwin/ssh-host-config] Require use of lastlog as a
file rather than directory, required as Cygwin will be importing lastlog(1).
@ -3892,4 +3898,4 @@
- (djm) Trim deprecated options from INSTALL. Mention UsePAM
- (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu
$Id: ChangeLog,v 1.4138 2006/03/03 22:00:19 dtucker Exp $
$Id: ChangeLog,v 1.4139 2006/03/13 08:06:51 dtucker Exp $

View File

@ -1,4 +1,4 @@
# $Id: configure.ac,v 1.332 2006/02/26 01:31:49 dtucker Exp $
# $Id: configure.ac,v 1.333 2006/03/13 08:06:51 dtucker Exp $
#
# Copyright (c) 1999-2004 Damien Miller
#
@ -15,7 +15,7 @@
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
AC_INIT(OpenSSH, Portable, openssh-unix-dev@mindrot.org)
AC_REVISION($Revision: 1.332 $)
AC_REVISION($Revision: 1.333 $)
AC_CONFIG_SRCDIR([ssh.c])
AC_CONFIG_HEADER(config.h)
@ -2132,6 +2132,34 @@ if test -z "$have_llong_max"; then
#define __USE_ISOC99
#include <limits.h>
#define DATA "conftest.llminmax"
#define my_abs(a) ((a) < 0 ? ((a) * -1) : (a))
/*
* printf in libc on some platforms (eg old Tru64) does not understand %lld so
* we do this the hard way.
*/
static int
fprint_ll(FILE *f, long long n)
{
unsigned int i;
int l[sizeof(long long) * 8];
if (n < 0)
if (fprintf(f, "-") < 0)
return -1;
for (i = 0; n != 0; i++) {
l[i] = my_abs(n % 10);
n /= 10;
}
do {
if (fprintf(f, "%d", l[--i]) < 0)
return -1;
} while (i != 0);
if (fprintf(f, " ") < 0)
return -1;
return 0;
}
int main(void) {
FILE *f;
long long i, llmin, llmax = 0;
@ -2153,14 +2181,18 @@ int main(void) {
/* Sanity check */
if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax
|| llmax - 1 > llmax) {
|| llmax - 1 > llmax || llmin == llmax || llmin == 0
|| llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) {
fprintf(f, "unknown unknown\n");
exit(2);
}
if (fprintf(f ,"%lld %lld", llmin, llmax) < 0)
if (fprint_ll(f, llmin) < 0)
exit(3);
if (fprint_ll(f, llmax) < 0)
exit(4);
if (fclose(f) < 0)
exit(5);
exit(0);
}
]])],
@ -2168,17 +2200,6 @@ int main(void) {
llong_min=`$AWK '{print $1}' conftest.llminmax`
llong_max=`$AWK '{print $2}' conftest.llminmax`
# snprintf on some Tru64s doesn't understand "%lld"
case "$host" in
alpha-dec-osf*)
if test "x$ac_cv_sizeof_long_long_int" = "x8" &&
test "x$llong_max" = "xld"; then
llong_min="-9223372036854775808"
llong_max="9223372036854775807"
fi
;;
esac
AC_MSG_RESULT($llong_max)
AC_DEFINE_UNQUOTED(LLONG_MAX, [${llong_max}LL],
[max value of long long calculated by configure])