mirror of https://github.com/sipwise/kamailio.git
98 lines
2.1 KiB
98 lines
2.1 KiB
#include "orasel.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void __attribute__((noreturn)) donegood(const char *msg)
|
|
{
|
|
OCITerminate(OCI_DEFAULT);
|
|
if (msg && !outmode.emp)
|
|
printf("%s\n", msg);
|
|
exit(0);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void __attribute__((noreturn)) errxit(const char *msg)
|
|
{
|
|
OCITerminate(OCI_DEFAULT);
|
|
fprintf(stderr, "ERROR: %s\n", msg);
|
|
exit(1);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void __attribute__((noreturn)) oraxit(sword status, const con_t* con)
|
|
{
|
|
const char *p = NULL;
|
|
char buf[512];
|
|
sword ecd;
|
|
|
|
switch (status) {
|
|
case OCI_SUCCESS_WITH_INFO:
|
|
case OCI_ERROR:
|
|
ecd = 0;
|
|
if(OCIErrorGet(con->errhp, 1, NULL, &ecd, (OraText*)buf,
|
|
sizeof(buf), OCI_HTYPE_ERROR) != OCI_SUCCESS)
|
|
{
|
|
snprintf(buf, sizeof(buf), "unknown ORAERR %u", ecd);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
snprintf(buf, sizeof(buf), "unknown status %u", status);
|
|
break;
|
|
|
|
case OCI_SUCCESS:
|
|
p = "success";
|
|
break;
|
|
|
|
case OCI_NEED_DATA:
|
|
p = "need data";
|
|
break;
|
|
|
|
case OCI_NO_DATA:
|
|
p = "no data";
|
|
break;
|
|
|
|
case OCI_INVALID_HANDLE:
|
|
p = "invalid handle";
|
|
break;
|
|
|
|
case OCI_STILL_EXECUTING: /* ORA-3123 */
|
|
p = "executing";
|
|
break;
|
|
|
|
case OCI_CONTINUE:
|
|
p = "continue";
|
|
break;
|
|
}
|
|
if (p) {
|
|
snprintf(buf, sizeof(buf), "logic error (%s)", p);
|
|
}
|
|
errxit(buf);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
static void __attribute__((noreturn)) nomem(void)
|
|
{
|
|
errxit("no enough memory");
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void* safe_malloc(size_t sz)
|
|
{
|
|
void *p = malloc(sz);
|
|
if (!p) nomem();
|
|
return p;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
Str* str_alloc(const char *s, size_t len)
|
|
{
|
|
Str* ps = (Str*)safe_malloc(sizeof(Str) + len + 1);
|
|
ps->len = len;
|
|
memcpy(ps->s, s, len);
|
|
ps->s[len] = '\0';
|
|
return ps;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|