diff --git a/ChangeLog b/ChangeLog index ac5b7db..1277624 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Dec 1 00:33:38 CST 2004 Jeff Smith + * src/libmdb/table.c: + * src/libmdb/iconv.c: + * src/util/mdb-sql.c: Clean up some memory leaks + Sat Nov 27 12:16:08 CST 2004 Jeff Smith * src/odbc/odbc.c: Update ascii2unicode conversion calls diff --git a/src/libmdb/iconv.c b/src/libmdb/iconv.c index b3fce7e..0d1a48f 100644 --- a/src/libmdb/iconv.c +++ b/src/libmdb/iconv.c @@ -28,26 +28,26 @@ mdb_unicode2ascii(MdbHandle *mdb, unsigned char *buf, int offset, unsigned int l { unsigned int i, ret; int len_in, len_out; - char *in_ptr, *out_ptr; + unsigned char *in_ptr, *out_ptr; in_ptr = &buf[offset]; out_ptr = dest; len_in = len; len_out = dest_sz; - if (buf[offset]==0xff && buf[offset+1]==0xfe) { + if (in_ptr[0]==0xff && in_ptr[1]==0xfe) { len_in -= 2; - in_ptr = &buf[offset+2]; - ret = iconv(mdb->iconv_compress, &in_ptr, &len_in, &out_ptr, &len_out); + in_ptr += 2; + ret = iconv(mdb->iconv_compress, (char **)&in_ptr, &len_in, (char **)&out_ptr, &len_out); dest[dest_sz - len_out]='\0'; return dest_sz - len_out; - //strncpy(dest, &buf[offset+2], len-2); + //strncpy(dest, in_ptr+2, len-2); //dest[len-2]='\0'; } else { #ifdef HAVE_ICONV if (mdb->iconv_in) { //printf("1 len_in %d len_out %d\n",len_in, len_out); - ret = iconv(mdb->iconv_in, &in_ptr, &len_in, &out_ptr, &len_out); + ret = iconv(mdb->iconv_in, (char **)&in_ptr, &len_in, (char **)&out_ptr, &len_out); //printf("2 len_in %d len_out %d\n",len_in, len_out); dest[dest_sz - len_out]='\0'; //printf("dest %s\n",dest); @@ -57,7 +57,7 @@ mdb_unicode2ascii(MdbHandle *mdb, unsigned char *buf, int offset, unsigned int l /* convert unicode to ascii, rather sloppily */ for (i=0;iiconv_out = iconv_open("ISO8859-1", iconv_code); mdb->iconv_in = iconv_open(iconv_code, "ISO8859-1"); + mdb->iconv_compress = (iconv_t)-1; } #endif } void mdb_iconv_close(MdbHandle *mdb) { #ifdef HAVE_ICONV - if (mdb->iconv_out != -1) iconv_close(mdb->iconv_out); - if (mdb->iconv_in != -1) iconv_close(mdb->iconv_in); + if (mdb->iconv_out != (iconv_t)-1) iconv_close(mdb->iconv_out); + if (mdb->iconv_in != (iconv_t)-1) iconv_close(mdb->iconv_in); + if (mdb->iconv_compress != (iconv_t)-1) iconv_close(mdb->iconv_compress); #endif } diff --git a/src/libmdb/table.c b/src/libmdb/table.c index fb4ae1b..478ce5e 100644 --- a/src/libmdb/table.c +++ b/src/libmdb/table.c @@ -58,9 +58,12 @@ void mdb_free_tabledef(MdbTableDef *table) if (!table) return; if (table->is_temp_table) { unsigned int i; + /* Temp table pages are being stored in memory */ for (i=0; itemp_table_pages->len; i++) g_free(g_ptr_array_index(table->temp_table_pages,i)); g_ptr_array_free(table->temp_table_pages, TRUE); + /* Temp tables use dummy entries */ + g_free(table->entry); } mdb_free_columns(table->columns); mdb_free_indices(table->indices); diff --git a/src/util/mdb-sql.c b/src/util/mdb-sql.c index 497886f..7741d9c 100644 --- a/src/util/mdb-sql.c +++ b/src/util/mdb-sql.c @@ -42,6 +42,7 @@ char *cmdline = NULL; extern void add_history (); extern int write_history (); extern int read_history (); +extern void clear_history (); # endif #endif /* HAVE_READLINE_HISTORY */ @@ -353,9 +354,9 @@ dump_results_pp(MdbSQL *sql) int main(int argc, char **argv) { -char *s; +char *s = NULL; char prompt[20]; -int line; +int line = 0; char *mybuf; unsigned int bufsz; MdbSQL *sql; @@ -419,10 +420,11 @@ char *delimiter = NULL; bufsz = 4096; mybuf = (char *) g_malloc(bufsz); mybuf[0]='\0'; - line = 0; while (1) { line ++; + if (s) free(s); + if (in) { s=malloc(256); if ((!s) || (!fgets(s, 256, in))) { @@ -482,6 +484,7 @@ char *delimiter = NULL; histpath = (char *) g_strconcat(home, "/", HISTFILE, NULL); write_history(histpath); g_free(histpath); + clear_history(); } #endif