sqlda->sqln = number;
stmtd = (char*)malloc(strlen(stmt)+1);
- strncpy(stmtd,stmt,strlen(stmt)+1);
+ bstrncpy(stmtd,stmt,strlen(stmt)+1);
EXEC SQL PREPARE s1 from :stmtd;
- if (INGcheck() < 0 ) {
+ if (INGcheck() < 0) {
free(stmtd);
free(sqlda);
return -1;
}
EXEC SQL DESCRIBE s1 into :sqlda;
- if (INGcheck() < 0 ) {
+ if (INGcheck() < 0) {
free(stmtd);
free(sqlda);
return -1;
}
number = sqlda->sqld;
- free(stmtd); free(sqlda);
+ free(stmtd);
+ free(sqlda);
return number;
}
sqlda->sqln = numCols;
stmtd = (char *)malloc(strlen(stmt)+1);
- strncpy(stmtd,stmt,strlen(stmt)+1);
+ bstrncpy(stmtd,stmt,strlen(stmt)+1);
EXEC SQL PREPARE s2 INTO :sqlda FROM :stmtd;
int i;
for (i = 0; i < sqlda->sqld; ++i) {
- free(sqlda->sqlvar[i].sqldata);
- free(sqlda->sqlvar[i].sqlind);
+ if (sqlda->sqlvar[i].sqldata) {
+ free(sqlda->sqlvar[i].sqldata);
+ }
+ if (sqlda->sqlvar[i].sqlind) {
+ free(sqlda->sqlvar[i].sqlind);
+ }
}
free(sqlda);
sqlda = NULL;
result->first_row = NULL;
result->status = ING_EMPTY_RESULT;
result->act_row = NULL;
- strcpy(result->numrowstring,"");
+ memset(result->numrowstring, 0, sizeof(result->numrowstring));
if (result->num_fields) {
result->fields = (INGRES_FIELD *)malloc(sizeof(INGRES_FIELD) * result->num_fields);
for (i = 0; i < result->num_fields; ++i) {
memset(result->fields[i].name, 0, 34);
- strncpy(result->fields[i].name, sqlda->sqlvar[i].sqlname.sqlnamec, sqlda->sqlvar[i].sqlname.sqlnamel);
+ bstrncpy(result->fields[i].name, sqlda->sqlvar[i].sqlname.sqlnamec, sqlda->sqlvar[i].sqlname.sqlnamel);
result->fields[i].max_length = INGgetTypeSize(&sqlda->sqlvar[i]);
result->fields[i].type = abs(sqlda->sqlvar[i].sqltype);
result->fields[i].flags = (abs(sqlda->sqlvar[i].sqltype)<0) ? 1 : 0;
/*
* Free all rows and fields, then res, not descriptor!
*/
- if (ing_res != NULL ) {
+ if (ing_res != NULL) {
/*
* Use of rows is a nasty workaround til I find the reason,
* why aggregates like max() don't work
memset(vars[i].sqldata, 0, 20);
switch (sqlda->sqlvar[i].sqllen) {
case 2:
- snprintf(vars[i].sqldata, 20, "%d",*(short*)sqlda->sqlvar[i].sqldata);
+ bsnprintf(vars[i].sqldata, 20, "%d",*(short*)sqlda->sqlvar[i].sqldata);
break;
case 4:
- snprintf(vars[i].sqldata, 20, "%d",*(int*)sqlda->sqlvar[i].sqldata);
+ bsnprintf(vars[i].sqldata, 20, "%ld",*(int*)sqlda->sqlvar[i].sqldata);
break;
case 8:
- snprintf(vars[i].sqldata, 20, "%d",*(long*)sqlda->sqlvar[i].sqldata);
+ bsnprintf(vars[i].sqldata, 20, "%lld",*(long*)sqlda->sqlvar[i].sqldata);
break;
}
break;
break;
}
vars[i].sqlind = (short *)malloc(sizeof(short));
- memcpy(vars[i].sqlind,sqlda->sqlvar[i].sqlind,sizeof(short));
+ if (sqlda->sqlvar[i].sqlind) {
+ memcpy(vars[i].sqlind,sqlda->sqlvar[i].sqlind,sizeof(short));
+ } else {
+ *vars[i].sqlind = 0;
+ }
}
return row;
return;
}
- for (i = 0; i < sqlda->sqld; ++i ) {
- free(row->sqlvar[i].sqldata);
- free(row->sqlvar[i].sqlind);
+ for (i = 0; i < sqlda->sqld; ++i) {
+ if (row->sqlvar[i].sqldata) {
+ free(row->sqlvar[i].sqldata);
+ }
+ if (row->sqlvar[i].sqlind) {
+ free(row->sqlvar[i].sqlind);
+ }
}
free(row->sqlvar);
free(row);
/* for (linecount = 0; sqlca.sqlcode == 0; ++linecount) */
while(sqlca.sqlcode == 0) {
EXEC SQL FETCH c2 USING DESCRIPTOR :desc;
- if ((check = INGcheck()) < 0) { return check;}
+ if ((check = INGcheck()) < 0) {
+ EXEC SQL CLOSE c2;
+ return check;
+ }
- if (sqlca.sqlcode == 0)
- {
+ if (sqlca.sqlcode == 0) {
row = INGgetRowSpace(ing_res); /* alloc space for fetched row */
/*
char *INGfname(const INGresult *res, int column_number)
{
- if ( (column_number > res->num_fields) || (column_number < 0) ) {
+ if ((column_number > res->num_fields) || (column_number < 0)) {
return NULL;
} else {
return res->fields[column_number].name;
EXEC SQL END DECLARE SECTION;
stmt = (char *)malloc(strlen(query)+1);
- strncpy(stmt,query,strlen(query)+1);
+ bstrncpy(stmt,query,strlen(query)+1);
rowcount = -1;
EXEC SQL EXECUTE IMMEDIATE :stmt;
int sess_id;
EXEC SQL END DECLARE SECTION;
- strcpy(ingdbname,dbname);
+ bstrncpy(ingdbname, dbname, sizeof(ingdbname));
if (user != NULL) {
- strcpy(ingdbuser,user);
- if ( passwd != NULL) {
- strcpy(ingdbpasw,passwd);
+ bstrncpy(ingdbuser, user, sizeof(ingdbuser));
+ if (passwd != NULL) {
+ bstrncpy(ingdbpasw, passwd, sizeof(ingdbpasw));
} else {
- strcpy(ingdbpasw, "");
+ memset(ingdbpasw, 0, sizeof(ingdbpasw));
}
EXEC SQL CONNECT
:ingdbname
EXEC SQL INQUIRE_SQL(:conn_name = connection_name);
EXEC SQL INQUIRE_SQL(:sess_id = session);
- strncpy(dbconn->dbname, ingdbname, sizeof(dbconn->dbname));
- strncpy(dbconn->user, ingdbuser, sizeof(dbconn->user));
- strncpy(dbconn->password, ingdbpasw, sizeof(dbconn->password));
- strncpy(dbconn->connection_name, conn_name, sizeof(dbconn->connection_name));
+ bstrncpy(dbconn->dbname, ingdbname, sizeof(dbconn->dbname));
+ bstrncpy(dbconn->user, ingdbuser, sizeof(dbconn->user));
+ bstrncpy(dbconn->password, ingdbpasw, sizeof(dbconn->password));
+ bstrncpy(dbconn->connection_name, conn_name, sizeof(dbconn->connection_name));
dbconn->session_id = sess_id;
dbconn->msg = (char*)malloc(257);
memset(dbconn->msg, 0, 257);