changeset 20003:9f256c4066ff

Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice, e.g. "mplayer file -endpos 01" would try to play the file "01", too
author reimar
date Fri, 29 Sep 2006 23:23:41 +0000
parents 39e8656163b8
children 9d31ce6908cf
files m_option.c
diffstat 1 files changed, 12 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/m_option.c	Fri Sep 29 20:57:03 2006 +0000
+++ b/m_option.c	Fri Sep 29 23:23:41 2006 +0000
@@ -1178,13 +1178,7 @@
 // Time or size (-endpos)
 
 static int parse_time_size(m_option_t* opt,char *name, char *param, void* dst, int src) {
-
-  if (dst == NULL)
-    return 0;
-
-  m_time_size_t* ts = dst;
-  ts->pos=0;
-
+  m_time_size_t ts;
   char unit[4];
   int a,b;
   float d;
@@ -1193,9 +1187,10 @@
   if (param == NULL || strlen(param) == 0)
     return M_OPT_MISSING_PARAM;
   
+  ts.pos=0;
   /* End at size parsing */
   if(sscanf(param, "%lf%3s", &end_at, unit) == 2) {
-    ts->type = END_AT_SIZE;
+    ts.type = END_AT_SIZE;
     if(!strcasecmp(unit, "b"))
       ;
     else if(!strcasecmp(unit, "kb"))
@@ -1205,11 +1200,11 @@
     else if(!strcasecmp(unit, "gb"))
       end_at *= 1024*1024*1024;
     else
-      ts->type = END_AT_NONE;
+      ts.type = END_AT_NONE;
 
-    if (ts->type == END_AT_SIZE) {
-      ts->pos  = end_at;
-      return 1;
+    if (ts.type == END_AT_SIZE) {
+      ts.pos  = end_at;
+      goto out;
     }
   }
 
@@ -1227,9 +1222,11 @@
     return M_OPT_INVALID;
   }
   
-  ts->type = END_AT_TIME;
-  ts->pos  = end_at;
-
+  ts.type = END_AT_TIME;
+  ts.pos  = end_at;
+out:
+  if(dst)
+    *(m_time_size_t *)dst = ts;
   return 1;
 }