Update of /cvsroot/njbfs/njbfs
In directory usw-pr-cvs1:/tmp/cvs-serv3087
Modified Files:
track.c
Log Message:
ben: fix bugs in track_replaceframe and track_updateframe (they were not closing the linked list)
Index: track.c
===================================================================
RCS file: /cvsroot/njbfs/njbfs/track.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** track.c 10 Feb 2002 21:59:23 -0000 1.4
--- track.c 24 Feb 2002 00:26:43 -0000 1.5
***************
*** 38,43 ****
const void *data);
static void track_addframe(track_t * track, track_frame_t * frame);
- static void track_replaceframe(track_t * track, track_frame_t * oldframe,
- track_frame_t * newframe);
static void track_frame_destroy(track_frame_t * frame);
static void track_updateframe(track_t * track, track_frame_t * frame);
--- 38,41 ----
***************
*** 177,211 ****
}
! static void
track_replaceframe(track_t * track, track_frame_t * oldframe,
track_frame_t * newframe)
{
! track_frame_t *frame;
track_reset_getframe(track);
while ((frame = track_getframe(track)) != NULL) {
if (!strcmp(frame->label, oldframe->label)) {
! track_frame_destroy(oldframe);
! track_addframe(track, newframe);
! return;
}
}
!
}
static void track_updateframe(track_t * track, track_frame_t * newframe)
{
! track_frame_t *frame;
track_reset_getframe(track);
while ((frame = track_getframe(track)) != NULL) {
if (!strcmp(frame->label, newframe->label)) {
track_frame_destroy(frame);
- track_addframe(track, newframe);
return;
}
}
track_addframe(track, newframe);
-
}
--- 175,227 ----
}
! /*
! returns 1 if it replaced the frame,
! 0 if it didn't.
! */
!
! static int
track_replaceframe(track_t * track, track_frame_t * oldframe,
track_frame_t * newframe)
{
! track_frame_t *frame, *prev = NULL;
track_reset_getframe(track);
while ((frame = track_getframe(track)) != NULL) {
if (!strcmp(frame->label, oldframe->label)) {
! if ( track->first == frame ) {
! newframe->next = track->first->next;
! track->first = newframe;
! } else if (prev) {
! newframe->next = frame->next;
! prev->next = newframe;
! }
! track_frame_destroy(frame);
! return 1;
}
+ prev = frame;
}
! return 0;
}
static void track_updateframe(track_t * track, track_frame_t * newframe)
{
! track_frame_t *frame, *prev = NULL;
track_reset_getframe(track);
while ((frame = track_getframe(track)) != NULL) {
if (!strcmp(frame->label, newframe->label)) {
+ if ( track->first == frame ) {
+ newframe->next = frame->next;
+ track->first = newframe;
+ } else if (prev) {
+ newframe->next = frame->next;
+ prev->next = newframe;
+ }
track_frame_destroy(frame);
return;
}
+ prev = frame;
}
track_addframe(track, newframe);
}
|