Now for the VARDATA, VARSIZE, and VARHDRSZ stuff

From: Lonnie Cumberland <lonnie_cumberland(at)yahoo(dot)com>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: pgsql-interfaces(at)postgresql(dot)org
Subject: Now for the VARDATA, VARSIZE, and VARHDRSZ stuff
Date: 2001-04-15 21:27:55
Message-ID: 20010415212755.2676.qmail@web12503.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-interfaces pgsql-sql

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 <peter_e(at)gmx(dot)net> 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(at)gmx(dot)net http://funkturm.homeip.net/~peter
>

__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/

In response to

Responses

Browse pgsql-interfaces by date

  From Date Subject
Next Message N@ta$ 2001-04-15 23:44:04 DBD and DBI::Pg
Previous Message Peter Eisentraut 2001-04-15 19:52:30 Re: Re: [SQL] g++ not working for postgresql extension languages?

Browse pgsql-sql by date

  From Date Subject
Next Message Albert REINER 2001-04-15 21:52:57 RULE ... TO table.column
Previous Message Peter Eisentraut 2001-04-15 19:52:30 Re: Re: [SQL] g++ not working for postgresql extension languages?