[vlc-devel] [RFC] Fix parsing of float-typed variables

Pierre Ynard linkfanel at yahoo.fr
Fri Sep 11 20:03:19 CEST 2009


Apparently, since 'setlocale( LC_NUMERIC, "C" );' was removed from
libvlc initialization 3 years ago, the syntax to set configuration
variables of floating point types has changed and become dependent on
the current locale ("0.5" vs. "0,5" etc). Some places (e.g. config file
and global command-line options) have been converted to the use of
us_atof() which is locale-independent, but others just weren't: input
and config chain options, miscellaneous special cases...

This patch converts most of them to us_atof(), since I believe that
this is what we want. But there are still places I'm unsure of and that
should probably be fixed too.

diff --git a/modules/access/v4l.c b/modules/access/v4l.c
index f06d4f2..a424aaf 100644
--- a/modules/access/v4l.c
+++ b/modules/access/v4l.c
@@ -38,6 +38,7 @@
 #include <vlc_demux.h>
 #include <vlc_access.h>
 #include <vlc_picture.h>
+#include <vlc_charset.h>
 
 #include <sys/ioctl.h>
 #include <sys/mman.h>
@@ -630,8 +631,8 @@ static void ParseMRL( demux_t *p_demux )
             }
             else if( !strncmp( psz_parser, "fps=", strlen( "fps=" ) ) )
             {
-                p_sys->f_fps = strtof( psz_parser + strlen( "fps=" ),
-                                       &psz_parser );
+                p_sys->f_fps = us_strtof( psz_parser + strlen( "fps=" ),
+                                          &psz_parser );
             }
             else if( !strncmp( psz_parser, "adev=", strlen( "adev=" ) )
              || !strncmp( psz_parser, "samplerate=", strlen( "samplerate=" ) )
diff --git a/modules/access/v4l2.c b/modules/access/v4l2.c
index f88d914..1ba1c05 100644
--- a/modules/access/v4l2.c
+++ b/modules/access/v4l2.c
@@ -40,6 +40,7 @@
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 #include <vlc_access.h>
+#include <vlc_charset.h>
 #include <vlc_demux.h>
 #include <vlc_input.h>
 
@@ -789,8 +790,8 @@ static void ParseMRL( demux_sys_t *p_sys, char *psz_path, vlc_object_t *p_obj )
             }
             else if( !strncmp( psz_parser, "fps=", strlen( "fps=" ) ) )
             {
-                p_sys->f_fps = strtof( psz_parser + strlen( "fps=" ),
-                                       &psz_parser );
+                p_sys->f_fps = us_strtof( psz_parser + strlen( "fps=" ),
+                                          &psz_parser );
             }
             else if( !strncmp( psz_parser, "io=", strlen( "io=" ) ) )
             {
diff --git a/modules/codec/x264.c b/modules/codec/x264.c
index dad242d..9b2b678 100644
--- a/modules/codec/x264.c
+++ b/modules/codec/x264.c
@@ -32,6 +32,7 @@
 #include <vlc_plugin.h>
 #include <vlc_sout.h>
 #include <vlc_codec.h>
+#include <vlc_charset.h>
 
 #ifdef PTW32_STATIC_LIB
 #include <pthread.h>
@@ -947,8 +948,8 @@ static int  Open ( vlc_object_t *p_this )
     if( val.psz_string )
     {
         char *p = strchr( val.psz_string, ':' );
-        p_sys->param.analyse.f_psy_rd = atof( val.psz_string );
-        p_sys->param.analyse.f_psy_trellis = p ? atof( p+1 ) : 0;
+        p_sys->param.analyse.f_psy_rd = us_atof( val.psz_string );
+        p_sys->param.analyse.f_psy_trellis = p ? us_atof( p+1 ) : 0;
         free( val.psz_string );
     }
 
@@ -957,8 +958,9 @@ static int  Open ( vlc_object_t *p_this )
     var_Get( p_enc, SOUT_CFG_PREFIX "level", &val );
     if( val.psz_string )
     {
-        if( atof (val.psz_string) < 6 )
-            p_sys->param.i_level_idc = (int) ( 10 * atof (val.psz_string) + .5);
+        if( us_atof (val.psz_string) < 6 )
+            p_sys->param.i_level_idc = (int) (10 * us_atof (val.psz_string)
+                                              + .5);
         else
             p_sys->param.i_level_idc = atoi (val.psz_string);
         free( val.psz_string );
diff --git a/src/config/chain.c b/src/config/chain.c
index 13661e5..2b1b6ad 100644
--- a/src/config/chain.c
+++ b/src/config/chain.c
@@ -33,6 +33,7 @@
 
 #include <vlc_common.h>
 #include "libvlc.h"
+#include <vlc_charset.h>
 
 #include "vlc_interface.h"
 
@@ -382,7 +383,7 @@ void __config_ChainParse( vlc_object_t *p_this, const char *psz_prefix,
                                     NULL, 0 );
                 break;
             case VLC_VAR_FLOAT:
-                val.f_float = atof( cfg->psz_value ? cfg->psz_value : "0" );
+                val.f_float = us_atof( cfg->psz_value ? cfg->psz_value : "0" );
                 break;
             case VLC_VAR_STRING:
             case VLC_VAR_MODULE:
diff --git a/src/misc/variables.c b/src/misc/variables.c
index 1134326..41bb36e 100644
--- a/src/misc/variables.c
+++ b/src/misc/variables.c
@@ -29,6 +29,7 @@
 #endif
 
 #include <vlc_common.h>
+#include <vlc_charset.h>
 #include "variables.h"
 
 #include "libvlc.h"
@@ -1121,7 +1122,7 @@ void var_OptionParse( vlc_object_t *p_obj, const char *psz_option,
         break;
 
     case VLC_VAR_FLOAT:
-        val.f_float = atof( psz_value );
+        val.f_float = us_atof( psz_value );
         break;
 
     case VLC_VAR_STRING:
@@ -1595,7 +1596,7 @@ int __var_Command( vlc_object_t *p_this, const char *psz_name,
             i_ret = var_SetInteger( p_obj, psz_cmd, atoi( psz_arg ) );
             break;
         case VLC_VAR_FLOAT:
-            i_ret = var_SetFloat( p_obj, psz_cmd, atof( psz_arg ) );
+            i_ret = var_SetFloat( p_obj, psz_cmd, us_atof( psz_arg ) );
             break;
         case VLC_VAR_STRING:
             i_ret = var_SetString( p_obj, psz_cmd, psz_arg );
diff --git a/src/video_output/vout_intf.c b/src/video_output/vout_intf.c
index d267a4a..f05ad3c 100644
--- a/src/video_output/vout_intf.c
+++ b/src/video_output/vout_intf.c
@@ -269,7 +269,7 @@ void vout_IntfInit( vout_thread_t *p_vout )
         }
         else
         {
-            i_aspect = atof( val.psz_string );
+            i_aspect = us_atof( val.psz_string );
             vlc_ureduce( &i_aspect_num, &i_aspect_den,
                          i_aspect *VOUT_ASPECT_FACTOR, VOUT_ASPECT_FACTOR, 0 );
         }


Regards,

-- 
Pierre Ynard
"Une âme dans un corps, c'est comme un dessin sur une feuille de papier."



More information about the vlc-devel mailing list