Make C file for create type

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Make C file for create type

Louise Catherine
Hallo,
I found a problem making new data type kata,expecially
when make the C file ,can anyone help me solve it.

This error occur when I'm compiling the C file :
/usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../crt1.o(.text+0x18):
In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to
`main'
collect2: ld returned 1 exit status

Here it's my code :
file3.c
-------
#include "postgres.h"

typedef struct kata
{
  char kt[30];
} kata;

kata *input_kata(char *str);
char *output_kata(kata * kata);

kata *
input_kata(char *str)
{
    char kt[30];
    kata *result;

    if (sscanf(str, "( %s )", &kt) !=1)
    {
        printf ("error\n");
        return NULL;
    }

    result = (kata *) malloc(sizeof(kata));
    strcpy(result->kt,kt);
    return result;
}

char *
output_kata(kata * kata)
{
        char kt[30];
        char *result;

        strcpy(kt,kata->kt);

        if (strcmp(kt,NULL))
                return NULL;

        result = (char *) malloc(60);
        sprintf(result, "(%s)", kata->kt);
        return result;
}

kata.sql
--------
CREATE FUNCTION input_kata(cstring)
   RETURNS kata
   AS '_OBJWD_/file3'
   LANGUAGE C IMMUTABLE STRICT;

CREATE FUNCTION output_kata(kata)
   RETURNS cstring
   AS '_OBJWD_/file3'
   LANGUAGE C IMMUTABLE STRICT;

CREATE TYPE kata (
    INPUT = input_kata,
    OUTPUT = output_kata
)




               
____________________________________________________
Start your day with Yahoo! - make it your home page
http://www.yahoo.com/r/hs 
 

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [hidden email] so that your
       message can get through to the mailing list cleanly
Reply | Threaded
Open this post in threaded view
|

Re: Make C file for create type

Richard Huxton
Louise Catherine wrote:

> Hallo,
> I found a problem making new data type kata,expecially
> when make the C file ,can anyone help me solve it.
>
> This error occur when I'm compiling the C file :
> /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../crt1.o(.text+0x18):
> In function `_start':
> ../sysdeps/i386/elf/start.S:98: undefined reference to
> `main'
> collect2: ld returned 1 exit status

You don't have a main() function. This is the function that gets called
when you run an executable. Looking at your code, it seems like you want
to produce a library rather than a standalone program.

This might help:
  http://www.tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Also, read the section on C-language functions in the manuals.

Also, you're clearly missing bound-checking on your various copy
operations, and I think you're supposed to use palloc() rather than
malloc() if this is supposed to sit inside PostgreSQL.

Bear in mind it's been 10 years since I wrote any C though, so use your
own judgement on my advice.

--
   Richard Huxton
   Archonet Ltd

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster