Re: GList weirdness



You didn't g_strdup(row[0]); like he suggested. The row structure will contian
a new value yeah, but whatever mysql returns to you - you need to make a copy
of for yourself.

Maher

On Fri, 21 Sep 2001 17:31:47 -0400, HaB JacKaL said:

> 
>  
>  >
>  >The "row" variable is being reused and does not contain a copy.  You need 
>  >to
>  >do something like this:
>  >
>  >    gpointer tmp;
>  >
>  >    while((row = mysql_fetch_row(result))) {
>  >         printf("fetching %s\n", row[0]);
>  >         tmp = NULL;
>  >         if (row[0] != NULL)
>  >           tmp = (gpointer) strdup(row[0]);
>  >         countries = g_list_append(countries, tmp);
>  >         printf("countries = %s\n", countries->data);
>  >
>  >    }
>  >
>  
>  It's actually not being reused.  Each Successive call to mysql_fetch_row() 
>  returns a new value, and only returns a NULL value when there are no more 
>  rows to fetch.  For the sake of other suggestions, I have included the whole 
>  file below.  (Don't worry, it's short)
>  
>  #include <mysql/mysql.h>
>  #include <gtk/gtk.h>
>  #include <stdio.h>
>  
>  GtkWidget *populate_country_dropdown()
>  {
>    GtkWidget *combo;
>    GList *countries = NULL;
>    MYSQL mysql;
>    MYSQL_RES *result;
>    MYSQL_ROW row;
>    int error;
>  
>    printf("starting country dropdown thingy...\n");
>  
>    if(!mysql_init(&mysql))
>      {
>        g_warning("omg! init failed!\n");
>      }
>  
>    if(!mysql_real_connect(&mysql, "[host]", "[user]", "[password]", 
>  "[database]", 0, "/tmp/mysql.sock", 0))
>      {
>        g_warning("doh!  connect failed...\n");
>        exit(1);
>      }
>    else
>      {
>        error = mysql_select_db(&mysql, "label");
>        error = mysql_query(&mysql, "SELECT country_name FROM _countries");
>        result = mysql_use_result(&mysql);
>  
>        while((row = mysql_fetch_row(result)))
>  	{
>  	  g_message("fetching %s", row[0]);
>  	  countries = g_list_append(countries, row[0]);
>  	  g_message("countries = %s", countries->data);
>  
>  	}
>        g_message("outside countries = %s", countries->data);
>        combo = gtk_combo_new();
>        gtk_combo_set_popdown_strings(GTK_COMBO(combo), countries);
>  
>        mysql_free_result(result);
>  
>        return(combo);
>      }
>  }
>  
>  
>  The output is as follows:
>  
>  starting country dropdown thingy...
>  Message: fetching United States
>  Message: countries = United States
>  Message: fetching Canada
>  Message: countries = Canada
>  Message: outside countries =
>  
>  
>  Per Sven's suggestions, I replaced standard C printf's with the glib 
>  equivalents.  Turns out it was not abuffer problem.  I also tried using 
>  g_list_prepend() instead of g_list_append, but the results are still the 
>  same.   Any other ideas/suggestions would be greatly appreciated.
>  
>  Also...as you can see, this func is creating a combo box.  The box itself 
>  DOES show up, but it has two blank entries, and nothing else.
>  
>  Thanks...
>  
>  -HaB
>  
>  
>  
>  _________________________________________________________________
>  Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
>  
>  
>  _______________________________________________
>  gtk-list mailing list
>  gtk-list gnome org
>  http://mail.gnome.org/mailman/listinfo/gtk-list
>  
>  
>  

-- 
http://www.muhri.net -- muhri muhri net





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]