--- sql_oracle.c 2014-03-25 04:10:42.000000000 -0400 +++ sql_oracle.c 2021-02-17 11:09:57.584010000 -0500 @@ -48,4 +48,5 @@ #include #include +#include #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,5 +137,5 @@ struct select *selects;}; -static char *errmsg(long code) +static const char *errmsg(long code) {char *ptr; if (errmsg_str0 == NULL) @@ -170,20 +143,19 @@ 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, ...) {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);} + {errmsg_str1 = malloc((ORACLE_MAX_STRING*3)+1);} va_start(restargs,format); - vsprintf(errmsg_str1,format,restargs); + vsnprintf(errmsg_str1, ORACLE_MAX_STRING * 3 + 1, format,restargs); va_end(restargs); err(errmsg_str1,obj);} @@ -201,5 +173,5 @@ return(s);} -struct cda_def *allocate_cursor(void) +static struct cda_def *allocate_cursor(void) {struct cda_def *cur; unsigned short rc; @@ -213,5 +185,5 @@ return(cur);} -void free_cursor(struct cda_def *cur) +static void free_cursor(struct cda_def *cur) {long result; unsigned short rc; @@ -221,9 +193,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 +203,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 +214,5 @@ return(NIL);} -LISP l_ologof(void) +static LISP l_ologof(void) {long flag; flag = no_interrupt(1); @@ -254,25 +226,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 +254,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)) @@ -348,6 +320,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 +327,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, @@ -379,5 +351,5 @@ c->selects = NULL;} -LISP oracle_sql_prepare(LISP str) +static LISP oracle_sql_prepare(LISP str) {long iflag; LISP result; @@ -385,8 +357,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 +369,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 +381,5 @@ return(NIL);} -LISP oracle_execute(LISP s) +static LISP oracle_execute(LISP s) {long iflag; struct cstatement *c; @@ -419,8 +391,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 +403,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 +412,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 +426,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 +435,5 @@ return(errswitch());}} -LISP oracle_fetch(LISP s) +static LISP oracle_fetch(LISP s) {long iflag; struct cstatement *c; @@ -478,5 +450,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 +459,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 +470,6 @@ errswitch();}} +void init_sql_oracle(void); /* Our sole exported symbol */ + void init_sql_oracle(void) {long j;