//gcc bug56115.c -Wall -g -o bug56115 -L/home/sbester/big/mysql/5.5/mysql-5.5.5-m3-linux2.6-x86_64/lib -I/home/sbester/big/mysql/5.5/mysql-5.5.5-m3-linux2.6-x86_64/include -lmysqlclient_r -lz -lm -lpthread #include #include #include #include #include #include #include char host[]="127.0.0.1"; int port=3306; char username[]="root"; char password[]=""; char* alocmem(size_t num); void ps_func_0039(MYSQL *db); int main(int argc, const char *argv[]) { MYSQL *dbc=NULL; my_init(); if (!(dbc = mysql_init(NULL))) { printf("mysql_init failed\n"); exit(-1); } if (!mysql_real_connect(dbc,host,username,password,NULL,port, NULL, CLIENT_FOUND_ROWS|CLIENT_MULTI_STATEMENTS|CLIENT_MULTI_RESULTS)) { printf("mysql_real_connect failed: %s (%d) (%s)", mysql_error(dbc),mysql_errno(dbc),mysql_sqlstate(dbc)); exit(-1); } ps_func_0039(dbc); mysql_close(dbc); exit(0); } char* alocmem(size_t num) { char *r=(char*)calloc(num,1); if(NULL == r) { printf("cannot calloc %lu bytes of memory\n",(unsigned long)num); exit(1); } return r; } void ps_func_0039(MYSQL *db) { char *query="select * from information_schema.INNODB_LOCKS"; MYSQL_STMT *stmt=NULL; MYSQL_RES *meta_result=NULL; unsigned long val=CURSOR_TYPE_READ_ONLY; MYSQL_BIND bind_result[10]; unsigned long length_result[10]; my_bool is_null_result[10]; my_bool error_result[10]; memset(bind_result, 0, sizeof(bind_result)); memset(length_result,0,sizeof(length_result)); memset(is_null_result,0,sizeof(is_null_result)); memset(error_result,0,sizeof(error_result)); stmt= mysql_stmt_init(db); if (NULL == stmt) { printf("[ps_func_0039] mysql_stmt_init failed: %s (%d) (%s)\n",mysql_error(db),mysql_errno(db),mysql_sqlstate(db)); goto end; } if(mysql_stmt_prepare(stmt,query,(unsigned long)strlen(query))) { printf("[ps_func_0039] mysql_stmt_prepare failed: %s (%d) (%s)\n",mysql_stmt_error(stmt),mysql_stmt_errno(stmt),mysql_stmt_sqlstate(stmt)); goto end; } meta_result=mysql_stmt_result_metadata(stmt); if(NULL!=meta_result) { if(mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&val)) { printf("[ps_func_0039] mysql_stmt_attr_set: %s (%d) (%s)\n",mysql_stmt_error(stmt),mysql_stmt_errno(stmt),mysql_stmt_sqlstate(stmt)); } } bind_result[0].buffer_type=MYSQL_TYPE_VAR_STRING; bind_result[0].buffer=alocmem(243); bind_result[0].buffer_length=243; bind_result[0].length=&length_result[0]; bind_result[0].is_null=&is_null_result[0]; bind_result[0].error=&error_result[0]; bind_result[1].buffer_type=MYSQL_TYPE_VAR_STRING; bind_result[1].buffer=alocmem(54); bind_result[1].buffer_length=54; bind_result[1].length=&length_result[1]; bind_result[1].is_null=&is_null_result[1]; bind_result[1].error=&error_result[1]; bind_result[2].buffer_type=MYSQL_TYPE_VAR_STRING; bind_result[2].buffer=alocmem(96); bind_result[2].buffer_length=96; bind_result[2].length=&length_result[2]; bind_result[2].is_null=&is_null_result[2]; bind_result[2].error=&error_result[2]; bind_result[3].buffer_type=MYSQL_TYPE_VAR_STRING; bind_result[3].buffer=alocmem(96); bind_result[3].buffer_length=96; bind_result[3].length=&length_result[3]; bind_result[3].is_null=&is_null_result[3]; bind_result[3].error=&error_result[3]; bind_result[4].buffer_type=MYSQL_TYPE_VAR_STRING; bind_result[4].buffer=alocmem(3072); bind_result[4].buffer_length=3072; bind_result[4].length=&length_result[4]; bind_result[4].is_null=&is_null_result[4]; bind_result[4].error=&error_result[4]; bind_result[5].buffer_type=MYSQL_TYPE_VAR_STRING; bind_result[5].buffer=alocmem(3072); bind_result[5].buffer_length=3072; bind_result[5].length=&length_result[5]; bind_result[5].is_null=&is_null_result[5]; bind_result[5].error=&error_result[5]; bind_result[6].buffer_type=MYSQL_TYPE_LONGLONG; bind_result[6].buffer=alocmem(21); bind_result[6].buffer_length=21; bind_result[6].length=&length_result[6]; bind_result[6].is_null=&is_null_result[6]; bind_result[6].error=&error_result[6]; bind_result[7].buffer_type=MYSQL_TYPE_LONGLONG; bind_result[7].buffer=alocmem(21); bind_result[7].buffer_length=21; bind_result[7].length=&length_result[7]; bind_result[7].is_null=&is_null_result[7]; bind_result[7].error=&error_result[7]; bind_result[8].buffer_type=MYSQL_TYPE_LONGLONG; bind_result[8].buffer=alocmem(21); bind_result[8].buffer_length=21; bind_result[8].length=&length_result[8]; bind_result[8].is_null=&is_null_result[8]; bind_result[8].error=&error_result[8]; bind_result[9].buffer_type=MYSQL_TYPE_VAR_STRING; bind_result[9].buffer=alocmem(24576); bind_result[9].buffer_length=24576; bind_result[9].length=&length_result[9]; bind_result[9].is_null=&is_null_result[9]; bind_result[9].error=&error_result[9]; if(mysql_stmt_execute(stmt)) { printf("[ps_func_0039] mysql_stmt_execute failed: %s (%d) (%s)\n",mysql_stmt_error(stmt),mysql_stmt_errno(stmt),mysql_stmt_sqlstate(stmt)); goto end; } if(mysql_stmt_bind_result(stmt,bind_result)) { printf("[ps_func_0039] mysql_stmt_bind_result failed: %s (%d) (%s)\n",mysql_stmt_error(stmt),mysql_stmt_errno(stmt),mysql_stmt_sqlstate(stmt)); goto end; } if(mysql_stmt_store_result(stmt)) { printf("[ps_func_0039] mysql_stmt_store_result failed: %s (%d) (%s)\n",mysql_stmt_error(stmt),mysql_stmt_errno(stmt),mysql_stmt_sqlstate(stmt)); goto end; } while (!mysql_stmt_fetch(stmt)) { } end: if(NULL != stmt && mysql_stmt_close(stmt)) { printf("[ps_func_0039] mysql_stmt_close failed: %s (%d) (%s)\n",mysql_stmt_error(stmt),mysql_stmt_errno(stmt),mysql_stmt_sqlstate(stmt)); } if(NULL!=bind_result[0].buffer) free(bind_result[0].buffer); if(NULL!=bind_result[1].buffer) free(bind_result[1].buffer); if(NULL!=bind_result[2].buffer) free(bind_result[2].buffer); if(NULL!=bind_result[3].buffer) free(bind_result[3].buffer); if(NULL!=bind_result[4].buffer) free(bind_result[4].buffer); if(NULL!=bind_result[5].buffer) free(bind_result[5].buffer); if(NULL!=bind_result[6].buffer) free(bind_result[6].buffer); if(NULL!=bind_result[7].buffer) free(bind_result[7].buffer); if(NULL!=bind_result[8].buffer) free(bind_result[8].buffer); if(NULL!=bind_result[9].buffer) free(bind_result[9].buffer); }