C LIBRARY EXTENSION SEGFAULT - Mailing list pgsql-interfaces
From | James M Doherty |
---|---|
Subject | C LIBRARY EXTENSION SEGFAULT |
Date | |
Msg-id | !&!AAAAAAAAAAAYAAAAAAAAABioBXOkXDdPrWVPQrlJnUPCgAAAEAAAAKlz1QMYo/JCvboljr+mRQgBAAAAAA==@jdoherty.net Whole thread Raw |
Responses |
Re: C LIBRARY EXTENSION SEGFAULT
(Tom Lane <tgl@sss.pgh.pa.us>)
|
List | pgsql-interfaces |
Hopefully someone can help with this; I have an extension library which basically adds some common financial functions from gnumeric. This has worked just fine for a couple of years on a 32 bit machine running 8.1.0. and still does. I have recently built a new dual core 64 bit gentoo system with 8.1.0 installed. The library in question compiles and links just fine. I install it in /usr/lib. When I execute the create or replace function call that also succeeds however when I execute the command .. for example: select * from eomonth('10/22/2006',0); 1. Is there anything special I should have done when building postgres ? PG_CONFIG OUTPUT: BINDIR = /usr/local/pgsql/bin DOCDIR = /usr/local/pgsql/doc INCLUDEDIR = /usr/local/pgsql/include PKGINCLUDEDIR = /usr/local/pgsql/include INCLUDEDIR-SERVER = /usr/local/pgsql/include/server LIBDIR = /usr/local/pgsql/lib PKGLIBDIR = /usr/local/pgsql/lib LOCALEDIR = MANDIR = /usr/local/pgsql/man SHAREDIR = /usr/local/pgsql/share SYSCONFDIR = /usr/local/pgsql/etc PGXS = /usr/local/pgsql/lib/pgxs/src/makefiles/pgxs.mk CONFIGURE = '--enable-thread-safety' '--with-perl' '--with-pam' '--with-python' '--enable-depend' '--with-gnu-ld' CC = gcc CPPFLAGS = -D_GNU_SOURCE CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing CFLAGS_SL = -fpic LDFLAGS = -Wl,-rpath,/usr/local/pgsql/lib LDFLAGS_SL = LIBS = -lpgport -lpam -lz -lreadline -lcrypt -lresolv -lnsl -ldl -lm -lbsd VERSION = PostgreSQL 8.1.4 which should return the end of month for argument one I get a seg fault: ********************************* FAULT MESSAGE IN LOG FILE ******************************** Nov 21 05:10:49 gideon postmaster[12461]: segfault at 0000000000000000 rip 00002b3af2c2f3b9 rsp 00007fffb8914398 error 4 CODE FOR EOMONTH:***************************** SNIPPIT *************************************** PG_FUNCTION_INFO_V1(eomonth); Datum eomonth(PG_FUNCTION_ARGS) { text *date = PG_GETARG_TEXT_P(0); int months = PG_GETARG_INT32(1); GDate sDate; int serialDate; int tmp = months; char mySDate[12]; char *pyear= NULL; char *pmonth = NULL; char *pday = NULL; /* NOW FOR DATE VARS USEDWITH parse_date */ char *pdate = NULL; char pbuf[255]; struct tm tm; text *myRDate = (text *) palloc(VARHDRSZ + 12); VARATT_SIZEP(myRDate) = VARHDRSZ + 12; g_date_clear(&sDate,1); memset(pbuf,'\0',sizeof(pbuf)); /*initialize buffer */ memcpy(pbuf,VARDATA(date),VARSIZE(date)-VARHDRSZ);/* copy input string to buffer */ pdate = parse_date(pbuf,&tm); /*call parse date and see if we know about format*/ g_date_set_parse(&sDate,pdate);/* now set the GDate object sDate with pdate buf*/ if(g_date_valid(&sDate)) /* is the date we set valid */ { /* * now figure the eomonth calc */ if(months > 0) { g_date_add_months(&sDate,months); } if( months < 0) { g_date_subtract_months(&sDate,-months); } /* * Now this is the real calculation */ g_date_set_day(&sDate,g_date_get_days_in_month( g_date_get_month(&sDate), g_date_get_year(&sDate))); sprintf(VARDATA(myRDate),"%d/%d/%d", g_date_get_month(&sDate), g_date_get_day(&sDate), g_date_get_year(&sDate)); /* elog(NOTICE,"EOMONTH(%s)",VARDATA(myRDate)); */ /* serialDate = datetime_g_to_serial(&sDate); PG_RETURN_INT32(serialDate); */ pfree(myRDate); PG_RETURN_TEXT_P(myRDate); } else { elog(ERROR,"EOMONTH date invalid%s ",VARDATA(date)); } } James M Doherty Principal D. V. (Deus Volantis) An IRISH Proverb "There is no success without discipline" Phil 3: 13 - 15 ("Press On") JMD CONSULTING 411 Thunderbay Dr Georgetown, TX 78626 A reputation is something others give you, HONOR is something you give yourself. Una reputación es algo que otras le dan, El HONOR es algo que usted se da.
pgsql-interfaces by date: