Received: from web12503.mail.yahoo.com (web12503.mail.yahoo.com [216.136.173.195]) by postgresql.org (8.11.3/8.11.1) with SMTP id f3FLRvu30499 for ; Sun, 15 Apr 2001 17:27:57 -0400 (EDT) (envelope-from lonnie_cumberland@yahoo.com) Message-ID: <20010415212755.2676.qmail@web12503.mail.yahoo.com> Received: from [141.217.140.65] by web12503.mail.yahoo.com; Sun, 15 Apr 2001 14:27:55 PDT Date: Sun, 15 Apr 2001 14:27:55 -0700 (PDT) From: Lonnie Cumberland Subject: Now for the VARDATA, VARSIZE, and VARHDRSZ stuff To: Peter Eisentraut Cc: pgsql-interfaces@postgresql.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Archive-Number: 200104/48 X-Sequence-Number: 1431 Hello All, That fixed the problem I think as I am no longer getting the loading errors and the functions appear to be being called. I now have a simple question about the use of these VARDATA() VARSIZE() and VARHDRSZ() wrappers I tried to make the modifications using the manual for reference, but there seems to be little information related to these VAR???() wrappers and my simple routine went off into never-never land. I have a simple function that used to work with individual pointers. My original simple routine: ------------------------------------------------------------------------------ void public_to_enc(char *public_userid, char *enc_userid ) { char ch[3]; int i,j; char buff[5]; int sp=0; // Clear out the public_userid place strcpy(enc_userid,""); while(*public_userid!='\0') { ch[0]=*public_userid; ch[1]=*(public_userid+1); i=atoi(ch); j=i; sp++; // printf("48 sect --- i=%d\n",i); if((i>=1)&&(i<=10)) { i+=47; } else // printf("65 sect --- i=%d\n",i); if((i>=11)&&(i<=36)) { i+=54; } else // printf("97 sect --- i=%d\n",i); if((i>=37)&&(i<=62)) { i+=60; } else printf("public_enc: ERROR !!!!\n\n"); sprintf(buff,"%c",i); // Add the value to our string strcat(enc_userid,buff); public_userid+=2; } } ------------------------------------------------------------------------------ and my new modified routine of the above: ------------------------------------------------------------------------------ text * encode(text *enc_userid) { int32 new_text_size = VARSIZE(enc_userid) * 2 - VARHDRSZ; text *new_text = (text *) palloc(new_text_size); // Clear out the public_userid place memset((void *) new_text, 0, new_text_size); VARSIZE(new_text) = new_text_size; // range values // (0 - 9) ---- dec 48 - 57 ascii // (A - Z) ---- dec 65 - 90 ascii // (a - z) ---- dec 97 - 122 ascii char ch; int i,j; char buff[5]; int sp=0; while(VARDATA(enc_userid)!='\0') { ch=VARDATA(enc_userid); i=ch; j=i; sp++; // printf("48 sect --- i=%d\n",i); if((i>=48)&&(i<=57)) { i-=47; } // printf("65 sect --- i=%d\n",i); else if((i>=65)&&(i<=90)) { i-=54; } else // printf("97 sect --- i=%d\n",i); if((i>=97)&&(i<=122)) { i-=60; } else printf("public encoder: ERROR !!!!\n\n"); sprintf(buff,"%02d",i); // Add the value to our string strcat(VARDATA(new_text),VARDATA(buff)); enc_userid++; } // Add the value to our string strcat(VARDATA(new_text),VARDATA("\0")); return (new_text); } ------------------------------------------------------------------------------- The problem is that I do not think that I have converted the second version over correctly and would like to know if someone could take a look to see what might be wrong. Also, I just wanted to say that I really appreciate all of the help that you you have given me to get started using this interface with PostgreSQL. Best Regards, Lonnie --- Peter Eisentraut wrote: > Lonnie Cumberland writes: > > > trdata=# select concat_text('a','d'); > > ERROR: Load of file /test/trfuncs.so failed: /test/trfuncs.so: undefined > > symbol: MemoryContextAlloc__FP17MemoryContextDataUi > > Name mangling at its finest. You need to put extern "C" around all > #include's of PostgreSQL header files as well. > > -- > Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter > __________________________________________________ Do You Yahoo!? Get email at your own domain with Yahoo! Mail. http://personal.mail.yahoo.com/