#include <stdio.h>
#include <string.h>
+#include <ctype.h>
#include <libpq-fe.h>
int Param_getIntArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val)
{
- int retVal;
int fnum;
int i;
PGresult *result;
char whereClause[PG_MAX_CLAUSE_LEN];
char query[PG_MAX_QUERY_LEN];
char *endptr;
+ char lname[strlen(name) + 1];
+ char lidx[strlen(idx) + 1];
+
+ for(i = 0 ; i <=strlen(name) ; i++) {
+ lname[i] = tolower(name[i]);
+ }
+ for(i = 0 ; i <=strlen(idx) ; i++) {
+ lidx[i] = tolower(idx[i]);
+ }
+
*rows = 0;
conn = PQconnectdb("host=casino dbname=bsailer user=bsailer");
- sprintf(whereClause, "WHERE name = \'%s\' AND idx = \'%s\' ORDER BY seq_num", name, idx);
- sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s;", whereClause, whereClause, whereClause, whereClause);
+ sprintf(whereClause, "WHERE name = '%s' AND idx = '%s' ", lname, lidx);
+ sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s ORDER BY seq_num;", whereClause, whereClause, whereClause, whereClause);
result = PQexec(conn, query);
if(PQresultStatus(result) != PGRES_TUPLES_OK) {
return -1;
}
fnum = PQfnumber(result, "value");
-
+
if ((*rows = PQntuples(result)) > maxrows) {
- Param_strerror((Param *) my, "Result has to many rows. Returning only 'maxrows' rows.\n");
- for (i = 0 ; i < maxrows ; i++) {
- val[i] = strtoul(PQgetvalue(result, i, fnum), &endptr, 0);
- if(*endptr != '\0') {
- Param_strerror((Param *) my, "Value seems to be no integer.\n");
- retVal = -1;
- }
- }
- retVal = -1;
- } else {
- for (i = 0 ; i < *rows ; i++) {
- val[i] = strtoul(PQgetvalue(result, i, fnum), &endptr, 0);
- if(*endptr != '\0') {
- Param_strerror((Param *) my, "Value seems to be no integer.\n");
- retVal = -1;
- }
- }
- for (i = *rows ; i < maxrows ; i++) {
- val[i] = 0;
+ *rows = maxrows;
+ }
+ for (i = 0 ; i < *rows ; i++) {
+ val[i] = strtoul(PQgetvalue(result, i, fnum), &endptr, 0);
+ if(*endptr != '\0') {
+ Param_strerror((Param *) my, "Value seems to be no integer.\n");
+ *rows = 0;
+ return -1;
}
- retVal = 0;
+ }
+ for (i = *rows ; i < maxrows ; i++) {
+ val[i] = 0;
}
PQfinish(conn);
- return retVal;
+ return 0;
}
int Param_getStringArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val)
{
- int retVal;
int fnum;
int i;
PGconn *conn;
PGresult *result;
char whereClause[PG_MAX_CLAUSE_LEN];
char query[PG_MAX_QUERY_LEN];
+ char lname[strlen(name) + 1];
+ char lidx[strlen(idx) + 1];
+
+ for(i = 0 ; i <=strlen(name) ; i++) {
+ lname[i] = tolower(name[i]);
+ }
+ for(i = 0 ; i <=strlen(idx) ; i++) {
+ lidx[i] = tolower(idx[i]);
+ }
+
*rows = 0;
conn = PQconnectdb("host=casino dbname=bsailer user=bsailer");
- sprintf(whereClause, "WHERE name = \'%s\' AND idx = \'%s\' ORDER BY seq_num", name, idx);
- sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s;", whereClause, whereClause, whereClause, whereClause);
+ sprintf(whereClause, "WHERE name = '%s' AND idx = '%s' ", lname, lidx);
+ sprintf(query, "SELECT * FROM card_params %s UNION SELECT * FROM cpus %s UNION SELECT * FROM crate_params %s UNION SELECT * FROM crate_setup %s ORDER BY seq_num;", whereClause, whereClause, whereClause, whereClause);
result = PQexec(conn, query);
if(PQresultStatus(result) != PGRES_TUPLES_OK) {
fnum = PQfnumber(result, "value");
if ((*rows = PQntuples(result)) > maxrows) {
- Param_strerror((Param *) my, "Result has to many rows. Returning only 'maxrows' rows.\n");
- for (i = 0 ; i < maxrows ; i++) {
- strcpy(val[i], PQgetvalue(result, i, fnum));
- }
- retVal = -1;
- } else {
- for (i = 0 ; i < *rows ; i++) {
- strcpy(val[i], PQgetvalue(result, i, fnum));
- }
- for (i = *rows ; i < maxrows ; i++) {
- val[i] = NULL;
- }
- retVal = 0;
+ *rows = maxrows;
+ }
+ for (i = 0 ; i < *rows ; i++) {
+ strcpy(val[i], PQgetvalue(result, i, fnum));
+ }
+ for (i = *rows ; i < maxrows ; i++) {
+ val[i] = NULL;
}
PQfinish(conn);
- return retVal;
+ return 0;
}
const char *Param_getErrStr(const Param *my)
static void Param_strerror(Param *my, const char *strerror)
{
- my->strerror = realloc(my->strerror, strlen(strerror) + 1);
+ my->strerror = realloc(my->strerror, (strlen(strerror) + 1) * sizeof(char));
if(my->strerror != NULL) {
strcpy(my->strerror, strerror);
}