void f_db_exec (void) { int ret = 0; db_t *db; array_t *info; info = allocate_empty_array(1); info->item[0].type = T_STRING; info->item[0].subtype = STRING_MALLOC; info->item[0].u.string = string_copy(sp->u.string, "f_db_exec"); valid_database("exec", info); db = find_db_conn((sp-1)->u.number); if (!db) { error("Attempt to exec on an invalid database handle\n"); } #ifdef PACKAGE_ASYNC if(!db_mut){ db_mut = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(db_mut, NULL); } pthread_mutex_lock(db_mut); #endif if (db->type->cleanup) { db->type->cleanup(&(db->c)); } if (db->type->execute) { ret = db->type->execute(&(db->c), sp->u.string); } pop_stack(); if (ret == -1) { if (db->type->error) { char *errormsg; errormsg = db->type->error(&(db->c)); put_malloced_string(errormsg); } else { put_constant_string("Unknown error"); } } else { sp->u.number = ret; } #ifdef PACKAGE_ASYNC pthread_mutex_unlock(db_mut); #endif }
void f_socket_error (void) { put_constant_string(socket_error(sp->u.number)); }