Mercurial > pidgin
view plugins/crazychat/face.c @ 13905:4e44ecb866bd
[gaim-migrate @ 16394]
msn_session_sync_users() iterates over the buddy list, following the ->next pointers of the groups, contacts, and buddies. msn_show_sync_issue(), if called, removed the buddy for which it was called, in preparation for the buddy either being added to the server list or confirmed-to-be-removed. This could lead to the buddy pointer being released and ->next therefore being junk.
The buddy is now not removed until the user responds to the action dialog presented via msn_show_sync_issue(). I'm unclear why gtkgaim got away with this exercise in memory stomping but Adium/libgaim crashed every time, but it's safer in any case.
I also changed some foo->bar to gaim_foo_get_bar().
committer: Tailor Script <tailor@pidgin.im>
| author | Evan Schoenberg <evan.s@dreskin.net> |
|---|---|
| date | Sun, 02 Jul 2006 09:37:25 +0000 |
| parents | ed017b9c532d |
| children |
line wrap: on
line source
#include "face.h" #include "sharky.h" #include "doggy.h" #include <assert.h> FACE init_face(KIND kind) { FACE face; face = (FACE)malloc(sizeof(*face)); switch(kind){ case DOG: init_dog(face); break; case SHARK: init_shark(face); break; default: printf("default face\n"); init_dog(face); break; } return face; } void draw_face(FACE face, GLfloat zrot, GLfloat yrot, BOOL left_eye, BOOL right_eye, GLfloat mouth_open, DIRECTION dir, OUTPUT_MODE mode){ face->draw_func(face, zrot, yrot, left_eye, right_eye, mouth_open, dir, mode); } void change_materials(FACE f, int* mats, int num_change){ int i; assert(!(num_change<0 || num_change>NUM_PARTS)); for(i=0;i<num_change;i++){ f->mat_indeces[i]=mats[i]; } } void free_face(FACE f){}
