Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e_modules
Dir : e17/apps/e_modules/src/modules/weather Modified Files: e_mod_main.c e_mod_main.h Log Message: Fix segvfault (didn't set face->buffer to NULL after deletion). Close server on deletion. Don't realloc so often. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/weather/e_mod_main.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- e_mod_main.c 12 Aug 2005 22:53:58 -0000 1.6 +++ e_mod_main.c 13 Aug 2005 06:58:39 -0000 1.7 @@ -11,7 +11,7 @@ */ static Weather *_weather_new(); -static void _weather_shutdown(Weather *weather); +static void _weather_free(Weather *weather); static void _weather_config_menu_new(Weather *weather); static Weather_Face *_weather_face_new(Weather *weather, E_Container *con); @@ -90,7 +90,7 @@ weather = module->data; if (weather) - _weather_shutdown(weather); + _weather_free(weather); return 1; } @@ -263,7 +263,7 @@ } static void -_weather_shutdown(Weather *weather) +_weather_free(Weather *weather) { Evas_List *list; @@ -723,8 +723,12 @@ face = l->data; if (face->server) continue; + face->bufsize = 4096; + face->cursize = 0; + face->buffer = malloc(face->bufsize); + face->buffer[0] = 0; face->server = ecore_con_server_connect(ECORE_CON_REMOTE_SYSTEM, - weather->conf->host, 80, NULL); + weather->conf->host, 80, face); } return 1; } @@ -773,9 +777,14 @@ } if ((!face) || (e->server != face->server)) return 1; - face->buffer = realloc(face->buffer, face->bufsize + e->size); - memcpy(face->buffer + face->bufsize, e->data, e->size); - face->bufsize += e->size; + while ((face->cursize + e->size) >= face->bufsize) + { + face->buffer = realloc(face->buffer, face->bufsize + 4096); + face->bufsize += 4096; + } + memcpy(face->buffer + face->cursize, e->data, e->size); + face->cursize += e->size; + face->buffer[face->cursize] = 0; return 1; } @@ -799,14 +808,18 @@ } if ((!face) || (e->server != face->server)) return 1; + ecore_con_server_del(face->server); + face->server = NULL; + info = _weather_parse(face); _weather_convert_degrees(weather, info); _weather_display_set(face, info, weather->conf->display); free(info); - face->server = NULL; face->bufsize = 0; + face->cursize = 0; free(face->buffer); + face->buffer = NULL; return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/weather/e_mod_main.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_mod_main.h 12 Aug 2005 22:12:03 -0000 1.2 +++ e_mod_main.h 13 Aug 2005 06:58:39 -0000 1.3 @@ -67,6 +67,7 @@ Ecore_Con_Server *server; char *buffer; int bufsize; + int cursize; Evas_Object *weather_object; Evas_Object *icon_object; ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs