forked from Lainports/opnsense-ports
333 lines
9.8 KiB
Text
333 lines
9.8 KiB
Text
--- sql_oracle.c 2021-02-22 16:44:26.489963000 -0500
|
|
+++ sql_oracle.c 2021-02-22 16:51:38.962848000 -0500
|
|
@@ -48,4 +48,5 @@
|
|
#include <math.h>
|
|
#include <stdarg.h>
|
|
+#include <ociapr.h>
|
|
|
|
#include "siod.h"
|
|
@@ -68,32 +69,4 @@
|
|
*/
|
|
|
|
-struct lda_def
|
|
-{short v2_rc;
|
|
- unsigned char fill1[10];
|
|
- unsigned short rc;
|
|
- unsigned char fill2[19];
|
|
- unsigned int ose;
|
|
- unsigned char chk;
|
|
- unsigned char sysparm[26];};
|
|
-
|
|
-struct cda_def
|
|
-{short v2_rc;
|
|
- short ft;
|
|
- unsigned long rpc;
|
|
- short peo;
|
|
- unsigned char fc;
|
|
- unsigned char fill1;
|
|
- unsigned short rc;
|
|
- unsigned char wrn;
|
|
- unsigned char flg;
|
|
- unsigned int cn;
|
|
- unsigned char rid[13];
|
|
- unsigned int ose;
|
|
- unsigned char chk;
|
|
- unsigned char sysparm[26];};
|
|
-
|
|
-struct hda_def
|
|
-{char fill[256];};
|
|
-
|
|
#define ORACLE_ETYPE_CHAR 1
|
|
#define ORACLE_ITYPE_NUMBER 2
|
|
@@ -130,6 +103,6 @@
|
|
in an association data structure returned by l_orlon */
|
|
|
|
-static struct lda_def lda;
|
|
-static struct hda_def hda;
|
|
+static Lda_Def lda; /* As shown in Oracle8 client demos */
|
|
+static ub4 hda[HDA_SIZE/sizeof(ub4)];
|
|
|
|
static long orlon_ok = 0;
|
|
@@ -164,26 +137,26 @@
|
|
struct select *selects;};
|
|
|
|
-static char *errmsg(long code)
|
|
+static const char *errmsg(long code)
|
|
{char *ptr;
|
|
if (errmsg_str0 == NULL)
|
|
- {errmsg_str0 = (char *) malloc(ORACLE_MAX_STRING+1);
|
|
+ {errmsg_str0 = malloc(ORACLE_MAX_STRING+1);
|
|
memset(errmsg_str0,0,ORACLE_MAX_STRING+1);}
|
|
oerhms(&lda,code,errmsg_str0,ORACLE_MAX_STRING);
|
|
- if (ptr = strchr(errmsg_str0,'\n')) *ptr = 0;
|
|
+ if ((ptr = strchr(errmsg_str0,'\n')) == NULL) *ptr = '\0';
|
|
return(errmsg_str0);}
|
|
|
|
-char *cda_errmsg(struct cda_def *cur)
|
|
+static const char *cda_errmsg(const struct cda_def *cur)
|
|
{return(errmsg(cur->rc));}
|
|
|
|
-char *lda_errmsg()
|
|
+static const char *lda_errmsg()
|
|
{return(errmsg(lda.rc));}
|
|
|
|
-LISP ferr(LISP obj,char *format, ...)
|
|
+static void ferr(LISP obj, const char *format, ...) __printflike(2, 3);
|
|
+
|
|
+void ferr(LISP obj, const char *format, ...)
|
|
{va_list restargs;
|
|
- if (errmsg_str1 == NULL)
|
|
- {errmsg_str1 = (char *) malloc((ORACLE_MAX_STRING*3)+1);
|
|
- memset(errmsg_str1,0,(ORACLE_MAX_STRING*3)+1);}
|
|
+ if (errmsg_str1 != NULL) free(errmsg_str1);
|
|
va_start(restargs,format);
|
|
- vsprintf(errmsg_str1,format,restargs);
|
|
+ vasprintf(&errmsg_str1, format, restargs);
|
|
va_end(restargs);
|
|
err(errmsg_str1,obj);}
|
|
@@ -201,5 +174,5 @@
|
|
return(s);}
|
|
|
|
-struct cda_def *allocate_cursor(void)
|
|
+static struct cda_def *allocate_cursor(void)
|
|
{struct cda_def *cur;
|
|
unsigned short rc;
|
|
@@ -208,10 +181,10 @@
|
|
{rc = cur->rc;
|
|
free(cur);
|
|
- ferr(NIL,"%d cursors so far. oopen:\n%s",
|
|
+ ferr(NIL, "%ld cursors so far. oopen:\n%s",
|
|
ncursors,errmsg(rc));}
|
|
++ncursors;
|
|
return(cur);}
|
|
|
|
-void free_cursor(struct cda_def *cur)
|
|
+static void free_cursor(struct cda_def *cur)
|
|
{long result;
|
|
unsigned short rc;
|
|
@@ -221,9 +194,9 @@
|
|
if (result) ferr(NIL,"oclose: %s",errmsg(rc));}
|
|
|
|
-LISP l_orlon(LISP username,LISP password)
|
|
+static LISP l_orlon(LISP username, LISP password)
|
|
{long retval,flag;
|
|
- char *c_username,*c_password;
|
|
- c_username = get_c_string(username);
|
|
- c_password = NNULLP(password) ? get_c_string(password) : NULL;
|
|
+ char *c_username, *c_password; /* Cannot pass const char* to orlon() */
|
|
+ c_username = get_string_data(username);
|
|
+ c_password = NNULLP(password) ? get_string_data(password) : NULL;
|
|
if (orlon_ok)
|
|
/* calling orlon twice will corrupt your process badly. */
|
|
@@ -231,5 +204,5 @@
|
|
else
|
|
{flag = no_interrupt(1);
|
|
- retval = orlon(&lda,&hda,
|
|
+ retval = orlon(&lda, (void *)&hda,
|
|
c_username,strlen(c_username),
|
|
c_password,(c_password) ? strlen(c_password) : -1,
|
|
@@ -242,5 +215,5 @@
|
|
return(NIL);}
|
|
|
|
-LISP l_ologof(void)
|
|
+static LISP l_ologof(void)
|
|
{long flag;
|
|
flag = no_interrupt(1);
|
|
@@ -254,25 +227,25 @@
|
|
return(NIL);}
|
|
|
|
-void freeloc(void ** x)
|
|
+static void freeloc(void ** x)
|
|
{if (*x)
|
|
{free(*x);
|
|
*x = NULL;}}
|
|
|
|
-void release_statement(struct cstatement *c)
|
|
+static void release_statement(struct cstatement *c)
|
|
{long j;
|
|
if (c->params)
|
|
{for(j = 1;j <= c->nparams;++j)
|
|
- freeloc(&c->params[j-1].buf);
|
|
- freeloc(&c->params);}
|
|
+ freeloc((void **)&c->params[j-1].buf);
|
|
+ freeloc((void **)&c->params);}
|
|
if (c->selects)
|
|
{for(j = 1; j <= c->nselects; ++j)
|
|
- {freeloc(&c->selects[j-1].colnam);
|
|
- freeloc(&c->selects[j-1].buf);}
|
|
- freeloc(&c->selects);}
|
|
+ {freeloc((void **)&c->selects[j-1].colnam);
|
|
+ freeloc((void **)&c->selects[j-1].buf);}
|
|
+ freeloc((void **)&c->selects);}
|
|
if (c->cursor)
|
|
free_cursor(c->cursor);
|
|
c->cursor = NULL;}
|
|
|
|
-void prepare_statement(char *sql_str,struct cstatement *c)
|
|
+static void prepare_statement(char *sql_str,struct cstatement *c)
|
|
/* assumptions:
|
|
nparams gives range of params from :1 to :nparams
|
|
@@ -282,5 +255,5 @@
|
|
short colnamlen;
|
|
char colnam[ORACLE_MAX_STRING+1];
|
|
- char *err;
|
|
+ const char *err;
|
|
c->cursor = allocate_cursor();
|
|
if (osql3(c->cursor,sql_str,-1))
|
|
@@ -315,5 +288,5 @@
|
|
{err = cda_errmsg(c->cursor);
|
|
release_statement(c);
|
|
- ferr(NIL,"obndrn %d: %s",j,err);}}}
|
|
+ ferr(NIL, "obndrn %ld: %s", j, err);}}}
|
|
else
|
|
c->params = NULL;
|
|
@@ -336,5 +309,5 @@
|
|
{err = cda_errmsg(c->cursor);
|
|
release_statement(c);
|
|
- ferr(NIL,"odsc %d: %s",j,err);}
|
|
+ ferr(NIL, "odsc %ld: %s", j, err);}
|
|
c->nselects = j-1;}
|
|
else
|
|
@@ -348,6 +321,6 @@
|
|
c->selects[j-1].etype = ORACLE_ETYPE_FLOAT;
|
|
c->selects[j-1].buflen = sizeof(double);
|
|
- c->selects[j-1].buf = (double *) malloc(c->selects[j-1].buflen);
|
|
- *((double *)c->selects[j-1].buf) = 0.0;
|
|
+ c->selects[j-1].buf = malloc(c->selects[j-1].buflen);
|
|
+ *((double *)(void *)c->selects[j-1].buf) = 0.0;
|
|
break;
|
|
case ORACLE_ETYPE_DATE:
|
|
@@ -355,10 +328,10 @@
|
|
c->selects[j-1].etype = ORACLE_ETYPE_DATE;
|
|
c->selects[j-1].buflen = sizeof(struct oracle_date);
|
|
- c->selects[j-1].buf = (char *) malloc(c->selects[j-1].buflen);
|
|
+ c->selects[j-1].buf = malloc(c->selects[j-1].buflen);
|
|
break;
|
|
default:
|
|
c->selects[j-1].etype = ORACLE_ETYPE_STRING;
|
|
c->selects[j-1].buflen = ORACLE_MAX_STRING;
|
|
- c->selects[j-1].buf = (char *) malloc(c->selects[j-1].buflen+1);
|
|
+ c->selects[j-1].buf = malloc(c->selects[j-1].buflen+1);
|
|
c->selects[j-1].buf[0] = 0;}
|
|
if (odefin(c->cursor,j,
|
|
@@ -372,5 +345,5 @@
|
|
{err = cda_errmsg(c->cursor);
|
|
release_statement(c);
|
|
- ferr(NIL,"odefin %d: %s",j,err);}}}
|
|
+ ferr(NIL, "odefin %ld: %s", j, err);}}}
|
|
if (c->nselects == 0)
|
|
{free(c->selects);
|
|
@@ -379,5 +352,5 @@
|
|
c->selects = NULL;}
|
|
|
|
-LISP oracle_sql_prepare(LISP str)
|
|
+static LISP oracle_sql_prepare(LISP str)
|
|
{long iflag;
|
|
LISP result;
|
|
@@ -385,8 +358,8 @@
|
|
iflag = no_interrupt(1);
|
|
result = extcons(sizeof(struct cstatement),extra_tc_statement);
|
|
- c = (struct cstatement *) result->storage_as.string.data;
|
|
+ c = (struct cstatement *)(void *)result->storage_as.string.data;
|
|
c->nparams = 0;
|
|
c->nselects = -1;
|
|
- prepare_statement(get_c_string(str),c);
|
|
+ prepare_statement(get_string_data(str), c);
|
|
no_interrupt(iflag);
|
|
return(result);}
|
|
@@ -397,10 +370,10 @@
|
|
(st->storage_as.string.dim != extra_tc_statement))
|
|
err("not a statement",st);
|
|
- c = (struct cstatement *)st->storage_as.string.data;
|
|
+ c = (struct cstatement *)(void *)st->storage_as.string.data;
|
|
if (!c->cursor)
|
|
err("statement has been released",st);
|
|
return(c);}
|
|
|
|
-LISP oracle_sql_release(LISP s)
|
|
+static LISP oracle_sql_release(LISP s)
|
|
{long iflag;
|
|
iflag = no_interrupt(1);
|
|
@@ -409,5 +382,5 @@
|
|
return(NIL);}
|
|
|
|
-LISP oracle_execute(LISP s)
|
|
+static LISP oracle_execute(LISP s)
|
|
{long iflag;
|
|
struct cstatement *c;
|
|
@@ -419,8 +392,8 @@
|
|
return(NIL);}
|
|
|
|
-LISP oracle_nselects(LISP s)
|
|
+static LISP oracle_nselects(LISP s)
|
|
{return(flocons((get_cstatement(s))->nselects));}
|
|
|
|
-LISP oracle_select_column_name(LISP s,LISP n)
|
|
+static LISP oracle_select_column_name(LISP s,LISP n)
|
|
{long j;
|
|
struct cstatement *c;
|
|
@@ -431,5 +404,5 @@
|
|
return(rintern(c->selects[j].colnam));}
|
|
|
|
-char *oracle_date_to_string(struct oracle_date *d)
|
|
+static const char *oracle_date_to_string(const struct oracle_date *d)
|
|
/* make it look like the string returned by RDB SQL Services */
|
|
{static char buff[100];
|
|
@@ -440,9 +413,9 @@
|
|
return(buff);}
|
|
|
|
-LISP oracle_select_column_value(LISP s,LISP n)
|
|
+static LISP oracle_select_column_value(LISP s,LISP n)
|
|
{long j;
|
|
struct cstatement *c;
|
|
struct select *sel;
|
|
- char *str;
|
|
+ const char *str;
|
|
j = get_c_long(n);
|
|
c = get_cstatement(s);
|
|
@@ -454,7 +427,7 @@
|
|
switch(sel->etype)
|
|
{case ORACLE_ETYPE_FLOAT:
|
|
- return(flocons(*((double *)sel->buf)));
|
|
+ return(flocons(*((double *)(void *)sel->buf)));
|
|
case ORACLE_ETYPE_DATE:
|
|
- str = oracle_date_to_string(sel->buf);
|
|
+ str = oracle_date_to_string((void *)sel->buf);
|
|
return(strcons(strlen(str),str));
|
|
case ORACLE_ETYPE_STRING:
|
|
@@ -463,5 +436,5 @@
|
|
return(errswitch());}}
|
|
|
|
-LISP oracle_fetch(LISP s)
|
|
+static LISP oracle_fetch(LISP s)
|
|
{long iflag;
|
|
struct cstatement *c;
|
|
@@ -478,5 +451,5 @@
|
|
static void extra_gc_free(LISP ptr)
|
|
{struct cstatement *c;
|
|
- c = (struct cstatement *) ptr->storage_as.string.data;
|
|
+ c = (struct cstatement *)(void *)ptr->storage_as.string.data;
|
|
release_statement(c);
|
|
free(c);}
|
|
@@ -487,8 +460,8 @@
|
|
switch(ptr->storage_as.string.dim)
|
|
{case extra_tc_statement:
|
|
- c = (struct cstatement *) ptr->storage_as.string.data;
|
|
+ c = (struct cstatement *)(void *)ptr->storage_as.string.data;
|
|
if (c->cursor)
|
|
sprintf(buff,"#{SQL STATEMENT %p cursor %d}",
|
|
- c,c->cursor->cn);
|
|
+ c,c->cursor->rcs3 /* Is rcs3 really the cursor ID? XXX */);
|
|
else
|
|
sprintf(buff,"#{SQL STATEMENT %p released}",c);
|
|
@@ -498,4 +471,6 @@
|
|
errswitch();}}
|
|
|
|
+void init_sql_oracle(void); /* Our sole exported symbol */
|
|
+
|
|
void init_sql_oracle(void)
|
|
{long j;
|
|
@@ -515,3 +490,2 @@
|
|
put_st("Enhancements (C) Copyright 1994 Mitech Corporation.\n");
|
|
init_sql_oracle_version();}
|
|
-
|