aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar ods15 <ods15@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-03-10 21:34:54 +0000
committerGravatar ods15 <ods15@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-03-10 21:34:54 +0000
commit37a1bc43fe7980acd6e3b9b38eb8f8d1ff7ca350 (patch)
tree8643cdfc4f657d364916c1545df6a45f42d1f4fb
parent8895e7c64c8d45065039ea0a175602cee6b086db (diff)
remove edl.c pre-alloc, more readble and safe code
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@17803 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--edl.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/edl.c b/edl.c
index de9c01d179..26826c82ca 100644
--- a/edl.c
+++ b/edl.c
@@ -28,6 +28,7 @@ static edl_record_ptr edl_alloc_new(edl_record_ptr next_edl_record)
if (next_edl_record) // if this isn't the first record, tell the previous one what the new one is.
next_edl_record->next = new_record;
new_record->prev = next_edl_record;
+ new_record->next = NULL;
return new_record;
}
@@ -62,8 +63,8 @@ edl_record_ptr edl_parse_file(void)
int action;
int record_count = 0;
int lineCount = 0;
- edl_record_ptr edl_records = edl_alloc_new(NULL);
- edl_record_ptr next_edl_record = edl_records;
+ edl_record_ptr edl_records = NULL;
+ edl_record_ptr next_edl_record = NULL;
if (edl_filename)
{
@@ -83,7 +84,7 @@ edl_record_ptr edl_parse_file(void)
continue;
} else
{
- if (next_edl_record->prev && start <= next_edl_record->prev->stop_sec)
+ if (next_edl_record && start <= next_edl_record->stop_sec)
{
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine, line);
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineOverlap,
@@ -97,6 +98,9 @@ edl_record_ptr edl_parse_file(void)
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineBadStop);
continue;
}
+ next_edl_record = edl_alloc_new(next_edl_record);
+ if (!edl_records) edl_records = next_edl_record;
+
next_edl_record->action = action;
if (action == EDL_MUTE)
{
@@ -116,22 +120,15 @@ edl_record_ptr edl_parse_file(void)
next_edl_record->start_sec = start;
next_edl_record->stop_sec = stop;
}
- next_edl_record = edl_alloc_new(next_edl_record);
record_count++;
}
}
}
fclose(fd);
}
- if (next_edl_record->prev) {
- next_edl_record->prev->next = NULL; // a record was before me, i don't want them thinking i'm a real record.
- mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlRecordsNo, record_count);
- }
- else {
- mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlQueueEmpty);
- edl_records = NULL; // there was no previous record, we only had one record, the empty one.
- }
- free(next_edl_record);
+ if (edl_records) mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlRecordsNo, record_count);
+ else mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlQueueEmpty);
+
return edl_records;
}