--- mysqltcl.c Mon Jul 6 11:35:17 1998 +++ mysqltcl.c Wed Jul 12 17:46:20 2000 @@ -34,7 +34,7 @@ #include #include #include - +#include #define MYSQL_HANDLES 15 /* Default number of handles available. */ #define MYSQL_BUFF_SIZE 1024 /* Conversion buffer size for various needs. */ @@ -60,7 +60,7 @@ #define MYSQL_HPREFIX_LEN 5 /* Array for status info, and its elements. */ -static char *MysqlStatusArr = "mysqlstatus"; +#define MysqlStatusArr "mysqlstatus" #define MYSQL_STATUS_CODE "code" #define MYSQL_STATUS_CMD "command" #define MYSQL_STATUS_MSG "message" @@ -686,7 +686,6 @@ Mysqltcl_Init (interp) Tcl_Interp *interp; { - int i; char nbuf[MYSQL_SMALL_SIZE]; /* @@ -742,7 +739,7 @@ * If this message appears you must change the source code and recompile. */ if (strlen (MysqlHandlePrefix) == MYSQL_HPREFIX_LEN) - return TCL_OK; + return Tcl_PkgProvide(interp, "mysql", "1.53"); else { fprintf (stderr, "*** mysqltcl (mysqltcl.c): handle prefix inconsistency!\n") ; @@ -921,13 +917,13 @@ if ((MysqlHandle[hand].result = mysql_store_result (MysqlHandle[hand].mysql)) == NULL) { - (void)strcpy (interp->result, "-1") ; + Tcl_SetObjResult(interp, Tcl_NewIntObj(-1)); } else { MysqlHandle[hand].res_count = mysql_num_rows (MysqlHandle[hand].result) ; MysqlHandle[hand].col_count = mysql_num_fields (MysqlHandle[hand].result) ; - (void)sprintf (interp->result, "%d", MysqlHandle[hand].res_count) ; + Tcl_SetObjResult(interp, Tcl_NewIntObj(MysqlHandle[hand].res_count)); } return TCL_OK; @@ -1073,7 +1069,7 @@ MysqlHandle[hand].res_count = total - row; } - (void)sprintf (interp->result, "%d", MysqlHandle[hand].res_count) ; + Tcl_SetObjResult(interp, Tcl_NewIntObj(MysqlHandle[hand].res_count)); return TCL_OK; } @@ -1244,7 +1240,7 @@ { case MYSQL_INFNAME_OPT: case MYSQL_INFNAMEQ_OPT: - strcpy (interp->result, MysqlHandle[hand].database) ; + Tcl_SetResult(interp, MysqlHandle[hand].database, TCL_STATIC); break ; case MYSQL_INFTABLES_OPT: if ((list = mysql_list_tables (MysqlHandle[hand].mysql,(char*)NULL)) == NULL) @@ -1259,7 +1255,7 @@ break ; case MYSQL_INFHOST_OPT: case MYSQL_INFHOSTQ_OPT: - strcpy (interp->result, MysqlHandle[hand].host) ; + Tcl_SetResult(interp, MysqlHandle[hand].host, TCL_STATIC); break ; case MYSQL_INFLIST_OPT: if ((list = mysql_list_dbs (MysqlHandle[hand].mysql,(char*)NULL)) == NULL) @@ -1299,8 +1295,6 @@ int count ; int hand ; int idx ; - MYSQL_RES* list ; - MYSQL_ROW row ; /* We can't fully check the handle at this stage. */ @@ -1342,19 +1336,20 @@ { case MYSQL_RESROWS_OPT: case MYSQL_RESROWSQ_OPT: - sprintf (interp->result, "%d", MysqlHandle[hand].res_count) ; + count = MysqlHandle[hand].res_count; break ; case MYSQL_RESCOLS_OPT: case MYSQL_RESCOLSQ_OPT: - sprintf (interp->result, "%d", MysqlHandle[hand].col_count) ; + count = MysqlHandle[hand].col_count; break ; case MYSQL_RESCUR_OPT: case MYSQL_RESCURQ_OPT: - sprintf (interp->result, "%d", mysql_num_rows (MysqlHandle[hand].result) - - MysqlHandle[hand].res_count) ; + count = mysql_num_rows (MysqlHandle[hand].result) + - MysqlHandle[hand].res_count; default: - ; + return TCL_OK; /* none of the above -- return without touching result */ } + Tcl_SetObjResult(interp, Tcl_NewIntObj(count)); return TCL_OK ; } @@ -1500,8 +1495,12 @@ int hi; char* hp ; int numeric ; - char* res ; - + register short res; + + static const char *states[] = { + "NOT_A_HANDLE", "UNCONNECTED", "CONNECTED", "IN_USE", "RESULT_PENDING" + }; + if (mysql_prologue(interp, argc, argv, 2, NULL, "?-numeric? handle") < 0) return TCL_ERROR; @@ -1511,17 +1510,18 @@ hp = (numeric)?argv[2]:argv[1] ; if (HSYNTAX(hp,hi) < 0) - res = (numeric)?"0":"NOT_A_HANDLE" ; + res = 0; else if (MysqlHandle[hi].connection == 0) - res = (numeric)?"1":"UNCONNECTED" ; + res = 1; else if (MysqlHandle[hi].database[0] == '\0') - res = (numeric)?"2":"CONNECTED" ; + res = 2; else if (MysqlHandle[hi].result == NULL) - res = (numeric)?"3":"IN_USE" ; + res = 3; else - res = (numeric)?"4":"RESULT_PENDING" ; + res = 4; - (void)strcpy (interp->result, res) ; + if (numeric) Tcl_SetObjResult(interp, Tcl_NewIntObj(res)); + else Tcl_SetResult(interp, (char *)states[res], TCL_STATIC); return TCL_OK ; } @@ -1543,7 +1543,6 @@ char **argv; { int hand; - char* res ; MYSQL* mysql; if ((hand = mysql_prologue(interp, argc, argv, 2, get_handle_conn, @@ -1552,7 +1551,7 @@ mysql = MysqlHandle[hand].mysql; - (void)sprintf (interp->result, "%d", mysql_insert_id(mysql)) ; + Tcl_SetObjResult(interp, Tcl_NewIntObj(mysql_insert_id(mysql))); return TCL_OK; }