Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7793c6e

Browse files
author
Michael Meskes
committed
Cleaned up ecpglib and renamed functions that do not need to be exported.
Created export list for ecpglib.
1 parent c4a6c2f commit 7793c6e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1749
-1650
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2256,5 +2256,8 @@ Tue, 02 Oct 2007 11:32:25 +0200
22562256
Wed, 03 Oct 2007 10:48:39 +0200
22572257

22582258
- Hopefully fixed some stuff that causes Windows builds to fail.
2259+
- Cleaned up ecpglib and renamed functions that do not need to be
2260+
exported.
2261+
- Created export list for ecpglib.
22592262
- Set ecpg library version to 6.0.
22602263
- Set ecpg version to 4.4.

src/interfaces/ecpg/compatlib/informix.c

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.49 2007/08/14 10:01:52 meskes Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.50 2007/10/03 11:11:11 meskes Exp $ */
22

33
#include <stdlib.h>
44
#include <string.h>
@@ -7,14 +7,15 @@
77
#include <ctype.h>
88
#include <limits.h>
99

10+
#define POSTGRES_ECPG_INTERNAL
1011
#include <ecpgtype.h>
1112
#include <ecpg_informix.h>
1213
#include <pgtypes_error.h>
1314
#include <pgtypes_date.h>
1415
#include <pgtypes_numeric.h>
1516
#include <sqltypes.h>
16-
17-
char *ECPGalloc(long, int);
17+
#include <sqlca.h>
18+
#include <ecpgerrno.h>
1819

1920
static int
2021
deccall2(decimal *arg1, decimal *arg2, int (*ptr) (numeric *, numeric *))
@@ -667,7 +668,7 @@ static struct
667668
* initialize the struct, which holds the different forms
668669
* of the long value
669670
*/
670-
static void
671+
static int
671672
initValue(long lng_val)
672673
{
673674
int i,
@@ -701,7 +702,8 @@ initValue(long lng_val)
701702
value.remaining = value.digits;
702703

703704
/* convert the long to string */
704-
value.val_string = (char *) malloc(value.digits + 1);
705+
if ((value.val_string = (char *) malloc(value.digits + 1)) == NULL)
706+
return -1;
705707
dig = value.val;
706708
for (i = value.digits, j = 0; i > 0; i--, j++)
707709
{
@@ -710,6 +712,7 @@ initValue(long lng_val)
710712
l /= 10;
711713
}
712714
value.val_string[value.digits] = '\0';
715+
return 0;
713716
}
714717

715718
/* return the position oft the right-most dot in some string */
@@ -755,7 +758,11 @@ rfmtlong(long lng_val, char *fmt, char *outbuf)
755758
temp = (char *) malloc(fmt_len + 1);
756759

757760
/* put all info about the long in a struct */
758-
initValue(lng_val);
761+
if (!temp || initValue(lng_val) == -1)
762+
{
763+
errno = ENOMEM;
764+
return -1;
765+
}
759766

760767
/* '<' is the only format, where we have to align left */
761768
if (strchr(fmt, (int) '<'))
@@ -991,11 +998,25 @@ ECPG_informix_set_var(int number, void *pointer, int lineno)
991998
}
992999

9931000
/* a new one has to be added */
994-
ptr = (struct var_list *) ECPGalloc(sizeof(struct var_list), lineno);
995-
ptr->number = number;
996-
ptr->pointer = pointer;
997-
ptr->next = ivlist;
998-
ivlist = ptr;
1001+
ptr = (struct var_list *) calloc(1L, sizeof(struct var_list));
1002+
if (!ptr)
1003+
{
1004+
struct sqlca_t *sqlca = ECPGget_sqlca();
1005+
1006+
sqlca->sqlcode = ECPG_OUT_OF_MEMORY;
1007+
strncpy(sqlca->sqlstate, "YE001", sizeof("YE001"));
1008+
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc), "Out of memory in line %d.", lineno);
1009+
sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc);
1010+
/* free all memory we have allocated for the user */
1011+
ECPGfree_auto_mem();
1012+
}
1013+
else
1014+
{
1015+
ptr->number = number;
1016+
ptr->pointer = pointer;
1017+
ptr->next = ivlist;
1018+
ivlist = ptr;
1019+
}
9991020
}
10001021

10011022
void *

src/interfaces/ecpg/ecpglib/Makefile

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Copyright (c) 1994, Regents of the University of California
66
#
7-
# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.48 2007/09/27 19:53:44 tgl Exp $
7+
# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.49 2007/10/03 11:11:12 meskes Exp $
88
#
99
#-------------------------------------------------------------------------
1010

@@ -31,6 +31,7 @@ OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
3131
# thread.c is needed only for non-WIN32 implementation of path.c
3232
ifneq ($(PORTNAME), win32)
3333
OBJS += thread.o
34+
DLL_DEFFILE=libecpgdll.def
3435
endif
3536

3637
SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq) -lm $(PTHREAD_LIBS)
@@ -58,6 +59,52 @@ path.o: path.c $(top_builddir)/src/port/pg_config_paths.h
5859
$(top_builddir)/src/port/pg_config_paths.h:
5960
$(MAKE) -C $(top_builddir)/src/port pg_config_paths.h
6061

62+
# We need several not-quite-identical variants of .DEF files to build libecpg
63+
# DLLs for Windows. These are made from the single source file exports.txt.
64+
# Since we can't assume that Windows boxes will have sed, the .DEF files are
65+
# always built and included in distribution tarballs.
66+
67+
.PHONY: def-files
68+
def-files: $(srcdir)/libecpgdll.def $(srcdir)/blibecpgdll.def
69+
70+
$(srcdir)/libecpgdll.def: exports.txt
71+
echo '; DEF file for MS VC++' > $@
72+
echo 'LIBRARY LIBECPG' >> $@
73+
echo 'EXPORTS' >> $@
74+
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' < $< >> $@
75+
76+
$(srcdir)/blibecpgdll.def: exports.txt
77+
echo '; DEF file for Borland C++ Builder' > $@
78+
echo 'LIBRARY BLIBECPG' >> $@
79+
echo 'EXPORTS' >> $@
80+
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ _\1@ \2/' < $< >> $@
81+
echo '' >> $@
82+
echo '; Aliases for MS compatible names' >> $@
83+
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1= _\1/' < $< | sed 's/ *$$//' >> $@
84+
85+
# Where possible, restrict the symbols exported by the library to just the
86+
# official list, so as to avoid unintentional ABI changes.
87+
88+
ifeq ($(PORTNAME), darwin)
89+
$(shlib): exports.list
90+
91+
exports.list: exports.txt
92+
$(AWK) '/^[^#]/ {printf "_%s\n",$$1}' $< >$@
93+
94+
exported_symbols_list = -exported_symbols_list exports.list
95+
endif
96+
97+
ifeq ($(PORTNAME), linux)
98+
$(shlib): exports.list
99+
100+
exports.list: exports.txt
101+
echo '{ global:' >$@
102+
$(AWK) '/^[^#]/ {printf "%s;\n",$$1}' $< >>$@
103+
echo ' local: *; };' >>$@
104+
105+
exported_symbols_list = -Wl,--version-script=exports.list
106+
endif
107+
61108
install: all installdirs install-lib
62109

63110
installdirs:
@@ -66,4 +113,4 @@ installdirs:
66113
uninstall: uninstall-lib
67114

68115
clean distclean maintainer-clean: clean-lib
69-
rm -f $(OBJS) path.c snprintf.c strlcpy.c thread.c
116+
rm -f $(OBJS) path.c snprintf.c strlcpy.c thread.c exports.list

0 commit comments

Comments
 (0)