Commit 9394d391 authored by Peter Eisentraut's avatar Peter Eisentraut

Add configure checks for strtoll, strtoull (or strto[u]q). Disable

'long long int' portions of ecpg if the type or these functions don't
exist.
parent 2d248d65
This diff is collapsed.
...@@ -1072,6 +1072,10 @@ fi ...@@ -1072,6 +1072,10 @@ fi
AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT) AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT)
AC_CHECK_FUNCS([strtoll strtoq], [break])
AC_CHECK_FUNCS([strtoull strtouq], [break])
dnl Determine memory alignment requirements for the basic C datatypes. dnl Determine memory alignment requirements for the basic C datatypes.
PGAC_CHECK_ALIGNOF(short) PGAC_CHECK_ALIGNOF(short)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* or in config.h afterwards. Of course, if you edit config.h, then your * or in config.h afterwards. Of course, if you edit config.h, then your
* changes will be overwritten the next time you run configure. * changes will be overwritten the next time you run configure.
* *
* $Id: config.h.in,v 1.147 2000/11/06 22:18:10 petere Exp $ * $Id: config.h.in,v 1.148 2000/11/20 15:56:13 petere Exp $
*/ */
#ifndef CONFIG_H #ifndef CONFIG_H
...@@ -601,12 +601,29 @@ extern void srandom(unsigned int seed); ...@@ -601,12 +601,29 @@ extern void srandom(unsigned int seed);
/* Define if C++ compiler accepts "#include <string>" */ /* Define if C++ compiler accepts "#include <string>" */
#undef HAVE_CXX_STRING_HEADER #undef HAVE_CXX_STRING_HEADER
/* Define if a system lib (-ldl) has dlopen() (needed for AIX) */ /* Define if you have the dlopen function */
#undef HAVE_DLOPEN #undef HAVE_DLOPEN
/* Define if you have the optreset variable */ /* Define if you have the optreset variable */
#undef HAVE_INT_OPTRESET #undef HAVE_INT_OPTRESET
#undef HAVE_STRTOLL
#undef HAVE_STRTOQ
#if defined(HAVE_LONG_LONG_INT_64) && !defined(HAVE_STRTOLL) && defined(HAVE_STRTOQ)
# define strtoll strtoq
# define HAVE_STRTOLL 1
#endif
#undef HAVE_STRTOULL
#undef HAVE_STRTOUQ
#if defined(HAVE_LONG_LONG_INT_64) && !defined(HAVE_STRTOULL) && defined(HAVE_STRTOUQ)
# define strtoull strtouq
# define HAVE_STRTOULL 1
#endif
/* /*
*------------------------------------------------------------------------ *------------------------------------------------------------------------
* Part 4: pull in system-specific declarations. * Part 4: pull in system-specific declarations.
......
#include "config.h"
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
...@@ -60,12 +62,14 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno, ...@@ -60,12 +62,14 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
case ECPGt_unsigned_long: case ECPGt_unsigned_long:
((long *) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field); ((long *) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
break; break;
#ifdef HAVE_LONG_LONG_INT_64
case ECPGt_long_long: case ECPGt_long_long:
((long long int*) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field); ((long long int*) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
break; break;
case ECPGt_unsigned_long_long: case ECPGt_unsigned_long_long:
((unsigned long long int*) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field); ((unsigned long long int*) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
break; break;
#endif /* HAVE_LONG_LONG_INT_64 */
case ECPGt_NO_INDICATOR: case ECPGt_NO_INDICATOR:
if (PQgetisnull(results, act_tuple, act_field)) if (PQgetisnull(results, act_tuple, act_field))
{ {
...@@ -154,10 +158,12 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno, ...@@ -154,10 +158,12 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
} }
break; break;
#ifdef HAVE_LONG_LONG_INT_64
# ifdef HAVE_STRTOLL
case ECPGt_long_long: case ECPGt_long_long:
if (pval) if (pval)
{ {
((long long int *) var)[act_tuple] = strtoull(pval, &scan_length, 10); ((long long int *) var)[act_tuple] = strtoll(pval, &scan_length, 10);
if ((isarray && *scan_length != ',' && *scan_length != '}') if ((isarray && *scan_length != ',' && *scan_length != '}')
|| (!isarray && *scan_length != '\0')) /* Garbage left */ || (!isarray && *scan_length != '\0')) /* Garbage left */
{ {
...@@ -169,7 +175,8 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno, ...@@ -169,7 +175,8 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
((long long int *) var)[act_tuple] = 0LL; ((long long int *) var)[act_tuple] = 0LL;
break; break;
# endif /* HAVE_STRTOLL */
# ifdef HAVE_STRTOULL
case ECPGt_unsigned_long_long: case ECPGt_unsigned_long_long:
if (pval) if (pval)
{ {
...@@ -185,6 +192,8 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno, ...@@ -185,6 +192,8 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
((unsigned long long int *) var)[act_tuple] = 0LL; ((unsigned long long int *) var)[act_tuple] = 0LL;
break; break;
# endif /* HAVE_STRTOULL */
#endif /* HAVE_LONG_LONG_INT_64 */
case ECPGt_float: case ECPGt_float:
case ECPGt_double: case ECPGt_double:
......
#include "config.h"
#include "ecpgtype.h" #include "ecpgtype.h"
#include "ecpglib.h" #include "ecpglib.h"
#include "ecpgerrno.h" #include "ecpgerrno.h"
...@@ -81,12 +83,14 @@ get_int_item(int lineno, void *var, enum ECPGttype vartype, int value) ...@@ -81,12 +83,14 @@ get_int_item(int lineno, void *var, enum ECPGttype vartype, int value)
case ECPGt_unsigned_long: case ECPGt_unsigned_long:
*(unsigned long *) var = (unsigned long) value; *(unsigned long *) var = (unsigned long) value;
break; break;
#ifdef HAVE_LONG_LONG_INT_64
case ECPGt_long_long: case ECPGt_long_long:
*(long long int *) var = (long long int) value; *(long long int *) var = (long long int) value;
break; break;
case ECPGt_unsigned_long_long: case ECPGt_unsigned_long_long:
*(unsigned long long int *) var = (unsigned long long int) value; *(unsigned long long int *) var = (unsigned long long int) value;
break; break;
#endif /* HAVE_LONG_LONG_INT_64 */
case ECPGt_float: case ECPGt_float:
*(float *) var = (float) value; *(float *) var = (float) value;
break; break;
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
/* Taken over as part of PostgreSQL by Michael Meskes <meskes@postgresql.org> /* Taken over as part of PostgreSQL by Michael Meskes <meskes@postgresql.org>
on Feb. 5th, 1998 */ on Feb. 5th, 1998 */
#include "config.h"
#include <stdio.h> #include <stdio.h>
#include <locale.h> #include <locale.h>
...@@ -414,11 +416,13 @@ ECPGexecute(struct statement * stmt) ...@@ -414,11 +416,13 @@ ECPGexecute(struct statement * stmt)
if (*(long *) var->ind_value < 0L) if (*(long *) var->ind_value < 0L)
strcpy(buff, "null"); strcpy(buff, "null");
break; break;
#ifdef HAVE_LONG_LONG_INT_64
case ECPGt_long_long: case ECPGt_long_long:
case ECPGt_unsigned_long_long: case ECPGt_unsigned_long_long:
if (*(long long int*) var->ind_value < 0LL) if (*(long long int*) var->ind_value < 0LL)
strcpy(buff, "null"); strcpy(buff, "null");
break; break;
#endif /* HAVE_LONG_LONG_INT_64 */
default: default:
break; break;
} }
...@@ -542,7 +546,7 @@ ECPGexecute(struct statement * stmt) ...@@ -542,7 +546,7 @@ ECPGexecute(struct statement * stmt)
tobeinserted = mallocedval; tobeinserted = mallocedval;
break; break;
#ifdef HAVE_LONG_LONG_INT_64
case ECPGt_long_long: case ECPGt_long_long:
if (!(mallocedval = ecpg_alloc(var->arrsize * 25, stmt->lineno))) if (!(mallocedval = ecpg_alloc(var->arrsize * 25, stmt->lineno)))
return false; return false;
...@@ -580,7 +584,7 @@ ECPGexecute(struct statement * stmt) ...@@ -580,7 +584,7 @@ ECPGexecute(struct statement * stmt)
tobeinserted = mallocedval; tobeinserted = mallocedval;
break; break;
#endif /* HAVE_LONG_LONG_INT_64 */
case ECPGt_float: case ECPGt_float:
if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno))) if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
return false; return false;
...@@ -1003,7 +1007,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...) ...@@ -1003,7 +1007,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
* *
* Copyright (c) 2000, Christof Petig <christof.petig@wtal.de> * Copyright (c) 2000, Christof Petig <christof.petig@wtal.de>
* *
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.13 2000/10/29 09:44:58 meskes Exp $ * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.14 2000/11/20 15:56:14 petere Exp $
*/ */
PGconn *ECPG_internal_get_connection(char *name); PGconn *ECPG_internal_get_connection(char *name);
......
#include "config.h"
#include <stdlib.h> #include <stdlib.h>
#include "ecpgtype.h" #include "ecpgtype.h"
#include "ecpglib.h" #include "ecpglib.h"
...@@ -29,10 +31,12 @@ ECPGtype_name(enum ECPGttype typ) ...@@ -29,10 +31,12 @@ ECPGtype_name(enum ECPGttype typ)
return "long"; return "long";
case ECPGt_unsigned_long: case ECPGt_unsigned_long:
return "unsigned long"; return "unsigned long";
#ifdef HAVE_LONG_LONG_INT_64
case ECPGt_long_long: case ECPGt_long_long:
return "long long"; return "long long";
case ECPGt_unsigned_long_long: case ECPGt_unsigned_long_long:
return "unsigned long long"; return "unsigned long long";
#endif /* HAVE_LONG_LONG_INT_64 */
case ECPGt_float: case ECPGt_float:
return "float"; return "float";
case ECPGt_double: case ECPGt_double:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment