END_TEST START_TEST (test_StringBuffer_appendReal_locale) { char *s, *t; setlocale(LC_NUMERIC, "de_DE"); StringBuffer_appendReal(SB, 1.2); fail_unless( StringBuffer_length(SB) == 3 ); fail_unless( StringBuffer_capacity(SB) == 80 ); s = StringBuffer_toString(SB); fail_unless( !strcmp(s, "1.2") ); StringBuffer_appendChar(SB, ' '); StringBuffer_appendReal(SB, 3); fail_unless( StringBuffer_length(SB) == 5 ); fail_unless( StringBuffer_capacity(SB) == 80 ); t = StringBuffer_toString(SB); fail_unless( !strcmp(t, "1.2 3") ); setlocale(LC_NUMERIC, "C"); safe_free(s); safe_free(t); }
END_TEST START_TEST (test_StringBuffer_append) { char *s, *t; StringBuffer_append(SB, "foo"); fail_unless( StringBuffer_length(SB) == 3 ); fail_unless( StringBuffer_capacity(SB) == 10 ); s = StringBuffer_toString(SB); fail_unless( !strcmp(s, "foo") ); StringBuffer_append(SB, "bar"); fail_unless( StringBuffer_length(SB) == 6 ); fail_unless( StringBuffer_capacity(SB) == 10 ); t = StringBuffer_toString(SB); fail_unless( !strcmp(t, "foobar") ); safe_free(s); safe_free(t); }
END_TEST START_TEST (test_StringBuffer_appendChar_grow) { char *s, *t; StringBuffer_append(SB, "fooooooooo"); fail_unless( StringBuffer_length(SB) == 10 ); fail_unless( StringBuffer_capacity(SB) == 10 ); s = StringBuffer_toString(SB); fail_unless( !strcmp(s, "fooooooooo") ); StringBuffer_appendChar(SB, '!'); fail_unless( StringBuffer_length(SB) == 11 ); fail_unless( StringBuffer_capacity(SB) == 20 ); t = StringBuffer_toString(SB); fail_unless( !strcmp(t, "fooooooooo!") ); safe_free(s); safe_free(t); }
END_TEST START_TEST (test_StringBuffer_appendInt) { char *s, *t; StringBuffer_appendInt(SB, 1); fail_unless( StringBuffer_length(SB) == 1 ); fail_unless( StringBuffer_capacity(SB) == 80 ); s = StringBuffer_toString(SB); fail_unless( !strcmp(s, "1") ); StringBuffer_appendChar(SB, ' '); StringBuffer_appendInt(SB, 23); fail_unless( StringBuffer_length(SB) == 4 ); fail_unless( StringBuffer_capacity(SB) == 80 ); t = StringBuffer_toString(SB); fail_unless( !strcmp(t, "1 23") ); safe_free(s); safe_free(t); }
ResultSet_T OracleConnection_executeQuery(T C, const char *sql, va_list ap) { OCIStmt* stmtp; va_list ap_copy; assert(C); C->rowsChanged = 0; va_copy(ap_copy, ap); StringBuffer_vset(C->sb, sql, ap_copy); va_end(ap_copy); StringBuffer_trim(C->sb); /* Build statement */ C->lastError = OCIHandleAlloc(C->env, (void **)&stmtp, OCI_HTYPE_STMT, 0, NULL); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) return NULL; C->lastError = OCIStmtPrepare(stmtp, C->err, StringBuffer_toString(C->sb), StringBuffer_length(C->sb), OCI_NTV_SYNTAX, OCI_DEFAULT); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) { OCIHandleFree(stmtp, OCI_HTYPE_STMT); return NULL; } /* Execute and create Result Set */ C->lastError = OCIStmtExecute(C->svc, stmtp, C->err, 0, 0, NULL, NULL, OCI_DEFAULT); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) { ub4 parmcnt = 0; OCIAttrGet(stmtp, OCI_HTYPE_STMT, &parmcnt, NULL, OCI_ATTR_PARSE_ERROR_OFFSET, C->err); DEBUG("Error occured in StmtExecute %d (%s), offset is %d\n", C->lastError, OracleConnection_getLastError(C), parmcnt); OCIHandleFree(stmtp, OCI_HTYPE_STMT); return NULL; } C->lastError = OCIAttrGet(stmtp, OCI_HTYPE_STMT, &C->rowsChanged, 0, OCI_ATTR_ROW_COUNT, C->err); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) DEBUG("OracleConnection_execute: Error in OCIAttrGet %d (%s)\n", C->lastError, OracleConnection_getLastError(C)); return ResultSet_new(OracleResultSet_new(stmtp, C->env, C->usr, C->err, C->svc, true, C->maxRows), (Rop_T)&oraclerops); }
void PostgresqlConnection_setQueryTimeout(T C, int ms) { assert(C); C->timeout = ms; StringBuffer_set(C->sb, "SET statement_timeout TO %d;", C->timeout); PGresult *res = PQexec(C->db, StringBuffer_toString(C->sb)); PQclear(res); }
END_TEST START_TEST (test_StringBuffer_toString) { char *s; StringBuffer_append(SB, "foo"); fail_unless( StringBuffer_length(SB) == 3 ); fail_unless( StringBuffer_capacity(SB) == 10 ); s = StringBuffer_toString(SB); fail_unless( !strcmp(s, "foo") ); s[0] = 'b'; if ( !strcmp(SB->buffer, "boo") ) { fail("StringBuffer_toString() did not make a copy of its internal buffer."); } safe_free(s); }
ResultSet_T SqlServerConnection_executeQuery(T C, const char *sql, va_list ap) { va_list ap_copy; const char *tail; SQLHSTMT hstmt; assert(C); StringBuffer_clear(C->sb); va_copy(ap_copy, ap); StringBuffer_vappend(C->sb, sql, ap_copy); va_end(ap_copy); C->lastError = SQLAllocStmt(C->db->hdbc,&hstmt); C->lastError = SQLPrepare(hstmt, StringBuffer_toString(C->sb), StringBuffer_length(C->sb)); if(!SQLSERVERSUCCESS(C->lastError)) { getSqlErr(C,hstmt); return NULL; } C->lastError = SQLExecute(hstmt); if(SQLSERVERSUCCESS(C->lastError)) return ResultSet_new(SqlServerResultSet_new(hstmt, C->maxRows, false), (Rop_T)&sqlserverrops); else { getSqlErr(C,hstmt); } return NULL; }
END_TEST START_TEST (test_StringBuffer_accessWithNULL) { StringBuffer_append(NULL, NULL); StringBuffer_appendChar(NULL, ' '); StringBuffer_appendExp(NULL, 0.0); StringBuffer_appendInt(NULL, 0); StringBuffer_appendNumber(NULL, NULL); StringBuffer_appendReal(NULL, 0.0); fail_unless (StringBuffer_capacity(NULL) == 0); StringBuffer_ensureCapacity(NULL, 0); StringBuffer_free(NULL); fail_unless (StringBuffer_getBuffer(NULL) == NULL); StringBuffer_grow(NULL, 0); fail_unless (StringBuffer_length(NULL) == 0); StringBuffer_reset(NULL); fail_unless (StringBuffer_toString(NULL) == NULL); }
/** * Send the response to the client. If the response has already been * commited, this function does nothing. */ static void send_response(HttpResponse res) { Socket_T S= res->S; if(!res->is_committed) { char date[STRLEN]; char server[STRLEN]; char *headers= get_headers(res); int length = StringBuffer_length(res->outputbuffer); res->is_committed= TRUE; get_date(date, STRLEN); get_server(server, STRLEN); socket_print(S, "%s %d %s\r\n", res->protocol, res->status, res->status_msg); socket_print(S, "Date: %s\r\n", date); socket_print(S, "Server: %s\r\n", server); socket_print(S, "Content-Length: %d\r\n", length); socket_print(S, "Connection: close\r\n"); if(headers) socket_print(S, "%s", headers); socket_print(S, "\r\n"); if(length) socket_write(S, (unsigned char *)StringBuffer_toString(res->outputbuffer), length); FREE(headers); } }
/** * Post event or status data message to mmonit * @param E An event object or NULL for status data * @return If failed, return HANDLER_MMONIT flag or HANDLER_SUCCEEDED flag if succeeded */ int handle_mmonit(Event_T E) { int rv = HANDLER_MMONIT; Socket_T socket = NULL; Mmonit_T C = Run.mmonits; /* The event is sent to mmonit just once - only in the case that the state changed */ if (! C || (E && ! E->state_changed)) return HANDLER_SUCCEEDED; StringBuffer_T sb = StringBuffer_create(256); for (; C; C = C->next) { if (! (socket = socket_create_t(C->url->hostname, C->url->port, SOCKET_TCP, C->ssl, C->timeout))) { LogError("M/Monit: cannot open a connection to %s -- %s\n", C->url->url, STRERROR); goto error; } status_xml(sb, E, E ? LEVEL_SUMMARY : LEVEL_FULL, 2, socket_get_local_host(socket)); if (! data_send(socket, C, StringBuffer_toString(sb))) { LogError("M/Monit: cannot send %s message to %s\n", E ? "event" : "status", C->url->url); goto error; } StringBuffer_clear(sb); socket_shutdown_write(socket); if (! data_check(socket, C)) { LogError("M/Monit: %s message to %s failed\n", E ? "event" : "status", C->url->url); goto error; } rv = HANDLER_SUCCEEDED; // Return success if at least one M/Monit succeeded DEBUG("M/Monit: %s message sent to %s\n", E ? "event" : "status", C->url->url); error: if (socket) socket_free(&socket); } StringBuffer_free(&sb); return rv; }
static int _doConnect(T C, URL_T url, char** error) { #undef ERROR #define ERROR(e) do {*error = Str_dup(e); return false;} while (0) #define ORAERROR(e) do{ *error = Str_dup(OracleConnection_getLastError(e)); return false;} while(0) const char *database, *username, *password; const char *host = URL_getHost(url); int port = URL_getPort(url); if (! (username = URL_getUser(url))) if (! (username = URL_getParameter(url, "user"))) ERROR("no username specified in URL"); if (! (password = URL_getPassword(url))) if (! (password = URL_getParameter(url, "password"))) ERROR("no password specified in URL"); if (! (database = URL_getPath(url))) ERROR("no database specified in URL"); ++database; /* Create a thread-safe OCI environment with N' substitution turned on. */ if (OCIEnvCreate(&C->env, OCI_THREADED | OCI_OBJECT | OCI_NCHAR_LITERAL_REPLACE_ON, 0, 0, 0, 0, 0, 0)) ERROR("Create a OCI environment failed"); /* allocate an error handle */ if (OCI_SUCCESS != OCIHandleAlloc(C->env, (dvoid**)&C->err, OCI_HTYPE_ERROR, 0, 0)) ERROR("Allocating error handler failed"); /* server contexts */ if (OCI_SUCCESS != OCIHandleAlloc(C->env, (dvoid**)&C->srv, OCI_HTYPE_SERVER, 0, 0)) ERROR("Allocating server context failed"); /* allocate a service handle */ if (OCI_SUCCESS != OCIHandleAlloc(C->env, (dvoid**)&C->svc, OCI_HTYPE_SVCCTX, 0, 0)) ERROR("Allocating service handle failed"); StringBuffer_clear(C->sb); /* Oracle connect string is on the form: //host[:port]/service name */ if (host) { StringBuffer_append(C->sb, "//%s", host); if (port > 0) StringBuffer_append(C->sb, ":%d", port); StringBuffer_append(C->sb, "/%s", database); } else /* Or just service name */ StringBuffer_append(C->sb, "%s", database); /* Create a server context */ C->lastError = OCIServerAttach(C->srv, C->err, StringBuffer_toString(C->sb), StringBuffer_length(C->sb), 0); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) ORAERROR(C); /* Set attribute server context in the service context */ C->lastError = OCIAttrSet(C->svc, OCI_HTYPE_SVCCTX, C->srv, 0, OCI_ATTR_SERVER, C->err); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) ORAERROR(C); C->lastError = OCIHandleAlloc(C->env, (void**)&C->usr, OCI_HTYPE_SESSION, 0, NULL); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) ORAERROR(C); C->lastError = OCIAttrSet(C->usr, OCI_HTYPE_SESSION, (dvoid *)username, (int)strlen(username), OCI_ATTR_USERNAME, C->err); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) ORAERROR(C); C->lastError = OCIAttrSet(C->usr, OCI_HTYPE_SESSION, (dvoid *)password, (int)strlen(password), OCI_ATTR_PASSWORD, C->err); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) ORAERROR(C); C->lastError = OCISessionBegin(C->svc, C->err, C->usr, OCI_CRED_RDBMS, OCI_DEFAULT); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) ORAERROR(C); OCIAttrSet(C->svc, OCI_HTYPE_SVCCTX, C->usr, 0, OCI_ATTR_SESSION, C->err); return true; }
/** * Since graphviz will interpret identical names as referring to * the same node presentation-wise it is better if each function node * has a unique name. * * Returns the name of the function with the name of the first child * prepended * * THIS COULD BE DONE BETTER */ char * FormulaGraphvizFormatter_FunctionGetUniqueName (const ASTNode_t *node) { char *s; StringBuffer_t *p = StringBuffer_create(128); ASTNodeType_t type = ASTNode_getType(node); if (ASTNode_getNumChildren(node) != 0) { const char* name = ASTNode_getName(ASTNode_getChild(node,0)); if (name != NULL) StringBuffer_append(p, name); } else { StringBuffer_append(p, "unknown"); } switch (type) { case AST_FUNCTION_ARCCOS: StringBuffer_append(p, "acos"); break; case AST_FUNCTION_ARCSIN: StringBuffer_append(p, "asin"); break; case AST_FUNCTION_ARCTAN: StringBuffer_append(p, "atan"); break; case AST_FUNCTION_CEILING: StringBuffer_append(p, "ceil"); break; case AST_FUNCTION_LN: StringBuffer_append(p, "log"); break; case AST_FUNCTION_POWER: StringBuffer_append(p, "pow"); break; default: if (ASTNode_getName(node) != NULL) { StringBuffer_append(p, ASTNode_getName(node)); } break; } s = StringBuffer_toString(p); free(p); return s; }
/** * Formats the given ASTNode as a directed graph token and returns the result as * a string. */ char * FormulaGraphvizFormatter_format (const ASTNode_t *node) { StringBuffer_t *p = StringBuffer_create(128); char *s = NULL; if (ASTNode_isOperator(node)) { s = FormulaGraphvizFormatter_formatOperator(node); } else if (ASTNode_isFunction(node)) { s = FormulaGraphvizFormatter_formatFunction(node); } else if (ASTNode_isInteger(node)) { StringBuffer_appendInt(p, ASTNode_getInteger(node)); s = StringBuffer_toString(p); } else if (ASTNode_isRational(node)) { s = FormulaGraphvizFormatter_formatRational(node); } else if (ASTNode_isReal(node)) { s = FormulaGraphvizFormatter_formatReal(node); } else if ( !ASTNode_isUnknown(node) ) { if (ASTNode_getName(node) == NULL) { StringBuffer_append(p, "unknown"); } else { StringBuffer_append(p, ASTNode_getName(node)); } s = StringBuffer_toString(p); } free(p); return s; }
int MysqlConnection_execute(T C, const char *sql, va_list ap) { va_list ap_copy; assert(C); StringBuffer_clear(C->sb); va_copy(ap_copy, ap); StringBuffer_vappend(C->sb, sql, ap_copy); va_end(ap_copy); C->lastError = mysql_real_query(C->db, StringBuffer_toString(C->sb), StringBuffer_length(C->sb)); return (C->lastError == MYSQL_OK); }
static int _doConnect(T C, char **error) { #define ERROR(e) do {*error = Str_dup(e); goto error;} while (0) /* User */ if (URL_getUser(C->url)) StringBuffer_append(C->sb, "user='******' ", URL_getUser(C->url)); else if (URL_getParameter(C->url, "user")) StringBuffer_append(C->sb, "user='******' ", URL_getParameter(C->url, "user")); else ERROR("no username specified in URL"); /* Password */ if (URL_getPassword(C->url)) StringBuffer_append(C->sb, "password='******' ", URL_getPassword(C->url)); else if (URL_getParameter(C->url, "password")) StringBuffer_append(C->sb, "password='******' ", URL_getParameter(C->url, "password")); else ERROR("no password specified in URL"); /* Host */ if (URL_getParameter(C->url, "unix-socket")) { if (URL_getParameter(C->url, "unix-socket")[0] != '/') ERROR("invalid unix-socket directory"); StringBuffer_append(C->sb, "host='%s' ", URL_getParameter(C->url, "unix-socket")); } else if (URL_getHost(C->url)) { StringBuffer_append(C->sb, "host='%s' ", URL_getHost(C->url)); /* Port */ if (URL_getPort(C->url) > 0) StringBuffer_append(C->sb, "port=%d ", URL_getPort(C->url)); else ERROR("no port specified in URL"); } else ERROR("no host specified in URL"); /* Database name */ if (URL_getPath(C->url)) StringBuffer_append(C->sb, "dbname='%s' ", URL_getPath(C->url) + 1); else ERROR("no database specified in URL"); /* Options */ StringBuffer_append(C->sb, "sslmode='%s' ", IS(URL_getParameter(C->url, "use-ssl"), "true") ? "require" : "disable"); if (URL_getParameter(C->url, "connect-timeout")) { TRY StringBuffer_append(C->sb, "connect_timeout=%d ", Str_parseInt(URL_getParameter(C->url, "connect-timeout"))); ELSE ERROR("invalid connect timeout value"); END_TRY; } else StringBuffer_append(C->sb, "connect_timeout=%d ", SQL_DEFAULT_TCP_TIMEOUT); if (URL_getParameter(C->url, "application-name")) StringBuffer_append(C->sb, "application_name='%s' ", URL_getParameter(C->url, "application-name")); /* Connect */ C->db = PQconnectdb(StringBuffer_toString(C->sb)); if (PQstatus(C->db) == CONNECTION_OK) return true; *error = Str_dup(PQerrorMessage(C->db)); error: return false; }
int SqlServerConnection_execute(T C, const char *sql, va_list ap) { va_list ap_copy; assert(C); StringBuffer_clear(C->sb); va_copy(ap_copy, ap); StringBuffer_vappend(C->sb, sql, ap_copy); va_end(ap_copy); executeSQL(C, StringBuffer_toString(C->sb)); return (SQLSERVERSUCCESS(C->lastError)); }
/** * Read all processes to initialize the information tree. * @param reference reference of ProcessTree * @param pflags Process engine flags * @return treesize > 0 if succeeded otherwise 0. */ int initprocesstree_sysdep(ProcessTree_T **reference, ProcessEngine_Flags pflags) { kvm_t *kvm_handle = kvm_open(NULL, _PATH_DEVNULL, NULL, O_RDONLY, prog); if (! kvm_handle) { LogError("system statistic error -- cannot initialize kvm interface\n"); return 0; } int treesize; struct kinfo_proc *pinfo = kvm_getprocs(kvm_handle, KERN_PROC_ALL, 0, &treesize); if (! pinfo || (treesize < 1)) { LogError("system statistic error -- cannot get process tree\n"); kvm_close(kvm_handle); return 0; } ProcessTree_T *pt = CALLOC(sizeof(ProcessTree_T), treesize); StringBuffer_T cmdline = NULL; if (pflags & ProcessEngine_CollectCommandLine) cmdline = StringBuffer_create(64); for (int i = 0; i < treesize; i++) { pt[i].pid = pinfo[i].kp_pid; pt[i].ppid = pinfo[i].kp_ppid; pt[i].cred.uid = pinfo[i].kp_ruid; pt[i].cred.euid = pinfo[i].kp_uid; pt[i].cred.gid = pinfo[i].kp_rgid; pt[i].threads = pinfo[i].kp_nthreads; pt[i].uptime = systeminfo.time / 10. - pinfo[i].kp_start.tv_sec; pt[i].cpu.time = (double)((pinfo[i].kp_lwp.kl_uticks + pinfo[i].kp_lwp.kl_sticks + pinfo[i].kp_lwp.kl_iticks) / 1000000.); pt[i].memory.usage = (uint64_t)pinfo[i].kp_vm_rssize * (uint64_t)pagesize; pt[i].zombie = pinfo[i].kp_stat == SZOMB ? true : false; if (pflags & ProcessEngine_CollectCommandLine) { char **args = kvm_getargv(kvm_handle, &pinfo[i], 0); if (args) { StringBuffer_clear(cmdline); for (int j = 0; args[j]; j++) StringBuffer_append(cmdline, args[j + 1] ? "%s " : "%s", args[j]); if (StringBuffer_length(cmdline)) pt[i].cmdline = Str_dup(StringBuffer_toString(StringBuffer_trim(cmdline))); } if (! pt[i].cmdline || ! *pt[i].cmdline) { FREE(pt[i].cmdline); pt[i].cmdline = Str_dup(pinfo[i].kp_comm); } } } if (pflags & ProcessEngine_CollectCommandLine) StringBuffer_free(&cmdline); *reference = pt; kvm_close(kvm_handle); return treesize; }
int PostgresqlConnection_execute(T C, const char *sql, va_list ap) { va_list ap_copy; assert(C); PQclear(C->res); va_copy(ap_copy, ap); StringBuffer_vset(C->sb, sql, ap_copy); va_end(ap_copy); C->res = PQexec(C->db, StringBuffer_toString(C->sb)); C->lastError = PQresultStatus(C->res); return (C->lastError == PGRES_COMMAND_OK); }
/** * Read all processes to initialize the information tree. * @param reference reference of ProcessTree * @return treesize>0 if succeeded otherwise =0. */ int initprocesstree_sysdep(ProcessTree_T **reference) { int treesize; static kvm_t *kvm_handle; ProcessTree_T *pt; struct kinfo_proc *pinfo; if (! (kvm_handle = kvm_open(NULL, _PATH_DEVNULL, NULL, O_RDONLY, prog))) { LogError("system statistic error -- cannot initialize kvm interface\n"); return 0; } pinfo = kvm_getprocs(kvm_handle, KERN_PROC_PROC, 0, &treesize); if (! pinfo || (treesize < 1)) { LogError("system statistic error -- cannot get process tree\n"); kvm_close(kvm_handle); return 0; } pt = CALLOC(sizeof(ProcessTree_T), treesize); for (int i = 0; i < treesize; i++) { StringBuffer_T cmdline = StringBuffer_create(64); pt[i].pid = pinfo[i].ki_pid; pt[i].ppid = pinfo[i].ki_ppid; pt[i].uid = pinfo[i].ki_ruid; pt[i].euid = pinfo[i].ki_uid; pt[i].gid = pinfo[i].ki_rgid; pt[i].starttime = pinfo[i].ki_start.tv_sec; pt[i].cputime = (long)(pinfo[i].ki_runtime / 100000); pt[i].mem_kbyte = (unsigned long)(pinfo[i].ki_rssize * pagesize_kbyte); int flags = pinfo[i].ki_stat; char * procname = pinfo[i].ki_comm; if (flags == SZOMB) pt[i].zombie = true; pt[i].cpu_percent = 0; pt[i].time = get_float_time(); char **args; if ((args = kvm_getargv(kvm_handle, &pinfo[i], 0))) { for (int j = 0; args[j]; j++) StringBuffer_append(cmdline, args[j + 1] ? "%s " : "%s", args[j]); pt[i].cmdline = Str_dup(StringBuffer_toString(StringBuffer_trim(cmdline))); } StringBuffer_free(&cmdline); if (! pt[i].cmdline || ! *pt[i].cmdline) { FREE(pt[i].cmdline); pt[i].cmdline = Str_dup(procname); } } *reference = pt; kvm_close(kvm_handle); return treesize; }
PreparedStatement_T MysqlConnection_prepareStatement(T C, const char *sql, va_list ap) { va_list ap_copy; MYSQL_STMT *stmt = NULL; assert(C); StringBuffer_clear(C->sb); va_copy(ap_copy, ap); StringBuffer_vappend(C->sb, sql, ap_copy); va_end(ap_copy); if (prepare(C, StringBuffer_toString(C->sb), StringBuffer_length(C->sb), &stmt)) return PreparedStatement_new(MysqlPreparedStatement_new(stmt, C->maxRows), (Pop_T)&mysqlpops); return NULL; }
ResultSet_T PostgresqlConnection_executeQuery(T C, const char *sql, va_list ap) { va_list ap_copy; assert(C); PQclear(C->res); va_copy(ap_copy, ap); StringBuffer_vset(C->sb, sql, ap_copy); va_end(ap_copy); C->res = PQexec(C->db, StringBuffer_toString(C->sb)); C->lastError = PQresultStatus(C->res); if (C->lastError == PGRES_TUPLES_OK) return ResultSet_new(PostgresqlResultSet_new(C->res, C->maxRows), (Rop_T)&postgresqlrops); return NULL; }
/** * Formats the given ASTNode as a directed graph function name and returns the * result as a string. */ char * FormulaGraphvizFormatter_formatFunction (const ASTNode_t *node) { char *s; StringBuffer_t *p = StringBuffer_create(128); ASTNodeType_t type = ASTNode_getType(node); switch (type) { case AST_FUNCTION_ARCCOS: s = "acos"; break; case AST_FUNCTION_ARCSIN: s = "asin"; break; case AST_FUNCTION_ARCTAN: s = "atan"; break; case AST_FUNCTION_CEILING: s = "ceil"; break; case AST_FUNCTION_LN: s = "log"; break; case AST_FUNCTION_POWER: s = "pow"; break; default: if (ASTNode_getName(node) == NULL) { StringBuffer_append(p, "unknown"); } else { StringBuffer_append(p, ASTNode_getName(node)); } s = StringBuffer_toString(p); break; } free(p); return s; }
END_TEST START_TEST (test_StringBuffer_appendChar) { char *s, *t, *u; StringBuffer_appendChar(SB, '*'); fail_unless( StringBuffer_length(SB) == 1 ); fail_unless( StringBuffer_capacity(SB) == 10 ); s = StringBuffer_toString(SB); fail_unless( !strcmp(s, "*") ); StringBuffer_append(SB, "foo"); fail_unless( StringBuffer_length(SB) == 4 ); fail_unless( StringBuffer_capacity(SB) == 10 ); t = StringBuffer_toString(SB); fail_unless( !strcmp(t, "*foo") ); StringBuffer_appendChar(SB, '*'); fail_unless( StringBuffer_length(SB) == 5 ); fail_unless( StringBuffer_capacity(SB) == 10 ); u = StringBuffer_toString(SB); fail_unless( !strcmp(u, "*foo*") ); safe_free(s); safe_free(t); safe_free(u); }
PreparedStatement_T SqlServerConnection_prepareStatement(T C, const char *sql, va_list ap) { va_list ap_copy; const char *tail; HSTMT hstmt; assert(C); StringBuffer_clear(C->sb); va_copy(ap_copy, ap); StringBuffer_vappend(C->sb, sql, ap_copy); va_end(ap_copy); C->lastError = SQLAllocStmt(C->db->hdbc,&hstmt); C->lastError = SQLPrepare(hstmt,StringBuffer_toString(C->sb),strlen(StringBuffer_toString(C->sb))); //The third argument with an array of the same size , but not the same database column if (SQLSERVERSUCCESS(C->lastError)) { int paramCount = 0; return PreparedStatement_new(SqlServerPreparedStatement_new(C->db, hstmt, C->maxRows), (Pop_T)&sqlserverpops, paramCount); } else { getSqlErr(C,hstmt); } return NULL; }
int check_http(Socket_T socket) { Port_T P; char host[STRLEN]; char auth[STRLEN] = {}; const char *request = NULL; const char *hostheader = NULL; ASSERT(socket); P = socket_get_Port(socket); ASSERT(P); request = P->request ? P->request : "/"; hostheader = _findHostHeaderIn(P->http_headers); hostheader = hostheader ? hostheader : P->request_hostheader ? P->request_hostheader : Util_getHTTPHostHeader(socket, host, STRLEN); // Otherwise use deprecated request_hostheader or default host StringBuffer_T sb = StringBuffer_create(168); StringBuffer_append(sb, "GET %s HTTP/1.1\r\n" "Host: %s\r\n" "Accept: */*\r\n" "User-Agent: Monit/%s\r\n" "%s", request, hostheader, VERSION, get_auth_header(P, auth, STRLEN)); // Add headers if we have them if (P->http_headers) { for (list_t p = P->http_headers->head; p; p = p->next) { if (Str_startsWith(p->e, "Host")) // Already set contrived above continue; StringBuffer_append(sb, "%s\r\n", p->e); } } StringBuffer_append(sb, "\r\n"); int send_status = socket_write(socket, (void*)StringBuffer_toString(sb), StringBuffer_length(sb)); StringBuffer_free(&sb); if (send_status < 0) { socket_setError(socket, "HTTP: error sending data -- %s", STRERROR); return FALSE; } return check_request(socket, P); }
/** * Formats the given ASTNode as a rational number and returns the result as * a string. This amounts to: * * "(numerator/denominator)" */ char * FormulaGraphvizFormatter_formatRational (const ASTNode_t *node) { char *s; StringBuffer_t *p = StringBuffer_create(128); StringBuffer_appendChar( p, '('); StringBuffer_appendInt ( p, ASTNode_getNumerator(node) ); StringBuffer_appendChar( p, '/'); StringBuffer_appendInt ( p, ASTNode_getDenominator(node) ); StringBuffer_appendChar( p, ')'); s = StringBuffer_toString(p); free(p); return s; }
PreparedStatement_T PostgresqlConnection_prepareStatement(T C, const char *sql, va_list ap) { char *name; int paramCount = 0; va_list ap_copy; assert(C); assert(sql); PQclear(C->res); va_copy(ap_copy, ap); StringBuffer_vset(C->sb, sql, ap_copy); va_end(ap_copy); paramCount = StringBuffer_prepare4postgres(C->sb); uint32_t t = ++statementid; // increment is atomic name = Str_cat("%d", t); C->res = PQprepare(C->db, name, StringBuffer_toString(C->sb), 0, NULL); C->lastError = C->res ? PQresultStatus(C->res) : PGRES_FATAL_ERROR; if (C->lastError == PGRES_EMPTY_QUERY || C->lastError == PGRES_COMMAND_OK || C->lastError == PGRES_TUPLES_OK) return PreparedStatement_new(PostgresqlPreparedStatement_new(C->db, C->maxRows, name, paramCount), (Pop_T)&postgresqlpops, paramCount); return NULL; }
PreparedStatement_T OracleConnection_prepareStatement(T C, const char *sql, va_list ap) { OCIStmt *stmtp; va_list ap_copy; assert(C); va_copy(ap_copy, ap); StringBuffer_vset(C->sb, sql, ap_copy); va_end(ap_copy); StringBuffer_trim(C->sb); int paramCount = StringBuffer_prepare4oracle(C->sb); /* Build statement */ C->lastError = OCIHandleAlloc(C->env, (void **)&stmtp, OCI_HTYPE_STMT, 0, 0); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) return NULL; C->lastError = OCIStmtPrepare(stmtp, C->err, StringBuffer_toString(C->sb), StringBuffer_length(C->sb), OCI_NTV_SYNTAX, OCI_DEFAULT); if (C->lastError != OCI_SUCCESS && C->lastError != OCI_SUCCESS_WITH_INFO) { OCIHandleFree(stmtp, OCI_HTYPE_STMT); return NULL; } return PreparedStatement_new(OraclePreparedStatement_new(stmtp, C->env, C->usr, C->err, C->svc, C->maxRows), (Pop_T)&oraclepops, paramCount); }
END_TEST START_TEST (test_FormulaFormatter_formatRational) { StringBuffer_t *sb = StringBuffer_create(10); ASTNode_t *n = ASTNode_create(); char *s; ASTNode_setRational(n, 1, 2); FormulaFormatter_formatRational(sb, n); s = StringBuffer_toString(sb); fail_unless( !strcmp(s, "(1/2)"), NULL ); safe_free(s); ASTNode_free(n); StringBuffer_free(sb); }