From: | "Felix E(dot) Klee" <felix(dot)klee(at)inka(dot)de> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Exception Handling in C-Language Functions? |
Date: | 2005-05-21 09:39:31 |
Message-ID: | 87zmuoq5nw.wl%felix.klee@inka.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
I have the created a C-Language function (code is below). Now, I
wonder: How do I handle exceptions, for example if malloc cannot assign
the necessary memory? Do "palloc" and "pfree" handle such a case
cleanly? Should I simply use an "assert"?
#include "postgres.h"
#include <string.h>
#include <stdlib.h>
#include "fmgr.h"
#include "libinn.h"
PG_FUNCTION_INFO_V1(ffiinews_uwildmat);
/* Wrapper for INN's function uwildmat. Needs parameters in UTF-8. */
Datum ffiinews_uwildmat(PG_FUNCTION_ARGS) {
VarChar *text = PG_GETARG_VARCHAR_P(0);
VarChar *pattern = PG_GETARG_VARCHAR_P(1);
int text_len = VARSIZE(text)-VARHDRSZ;
int pattern_len = VARSIZE(pattern)-VARHDRSZ;
char *tmp_text = (char *)malloc(text_len+1);
if (tmp_text == NULL)
; /* What now? */
char *tmp_pattern = (char *)malloc(pattern_len+1);
if (tmp_pattern == NULL)
; /* What now? */
strncpy(tmp_text, VARDATA(text), text_len);
tmp_text[text_len] = '\0';
strncpy(tmp_pattern, VARDATA(pattern), pattern_len);
tmp_pattern[pattern_len] = '\0';
bool matches = uwildmat(tmp_text, tmp_pattern);
free(tmp_pattern);
free(tmp_text);
PG_RETURN_BOOL(matches);
}
--
Felix E. Klee
From | Date | Subject | |
---|---|---|---|
Next Message | Neil Conway | 2005-05-21 10:13:13 | Re: Exception Handling in C-Language Functions? |
Previous Message | Steve Crawford | 2005-05-20 23:43:07 | Re: Finding IP of front end |