* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#include <vlc/vlc.h>
-#include "../libvlc.h"
-#include "vlc_keys.h"
-#include "vlc_charset.h"
-
-#include <errno.h> /* errno */
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h> /* getuid() */
-#endif
+#include <vlc_common.h>
+#include "../libvlc.h"
+#include "vlc_keys.h"
#ifdef HAVE_GETOPT_LONG
# ifdef HAVE_GETOPT_H
# include "../extras/getopt.h"
#endif
-#if defined(HAVE_GETPWUID)
-# include <pwd.h> /* getpwuid() */
-#endif
-
-#if defined( HAVE_SYS_STAT_H )
-# include <sys/stat.h>
-#endif
-#if defined( HAVE_SYS_TYPES_H )
-# include <sys/types.h>
-#endif
-#if defined( WIN32 )
-# if !defined( UNDER_CE )
-# include <direct.h>
-# endif
-#include <tchar.h>
-#endif
-
-#include "config.h"
+#include "configuration.h"
#include "modules/modules.h"
+#include <assert.h>
+
/*****************************************************************************
* config_LoadCmdLine: parse command line
*****************************************************************************
*****************************************************************************/
int __config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
const char *ppsz_argv[],
- vlc_bool_t b_ignore_errors )
+ bool b_ignore_errors )
{
int i_cmd, i_index, i_opts, i_shortopts, flag, i_verbose = 0;
module_t *p_parser;
vlc_list_t *p_list;
struct option *p_longopts;
int i_modules_index;
+ const char **argv_copy = NULL;
/* Short options */
module_config_t *pp_shortopts[256];
char *psz_shortopts;
- /* Set default configuration and copy arguments */
- p_this->p_libvlc->i_argc = *pi_argc;
- p_this->p_libvlc->ppsz_argv = ppsz_argv;
-
#ifdef __APPLE__
/* When VLC.app is run by double clicking in Mac OS X, the 2nd arg
* is the PSN - process serial number (a unique PID-ish thingie)
/* GDMF!... I can't do this or else the MacOSX window server will
* not pick up the PSN and not register the app and we crash...
* hence the following kludge otherwise we'll get confused w/ argv[1]
- * being an input file name */
-#if 0
- ppsz_argv[ 1 ] = NULL;
-#endif
- *pi_argc = *pi_argc - 1;
- pi_argc--;
+ * being an input file name.
+ * As there won't be any more args to parse, just exit. */
+ assert( *pi_argc == 2 );
+ *pi_argc = 1;
return 0;
}
#endif
p_longopts = malloc( sizeof(struct option) * (i_opts + 1) );
if( p_longopts == NULL )
{
- msg_Err( p_this, "out of memory" );
vlc_list_release( p_list );
return -1;
}
psz_shortopts = malloc( sizeof( char ) * (2 * i_opts + 1) );
if( psz_shortopts == NULL )
{
- msg_Err( p_this, "out of memory" );
free( p_longopts );
vlc_list_release( p_list );
return -1;
* us, ignoring the arity of the options */
if( b_ignore_errors )
{
- ppsz_argv = (const char**)malloc( *pi_argc * sizeof(char *) );
- if( ppsz_argv == NULL )
+ argv_copy = (const char**)malloc( *pi_argc * sizeof(char *) );
+ if( argv_copy == NULL )
{
- msg_Err( p_this, "out of memory" );
free( psz_shortopts );
free( p_longopts );
vlc_list_release( p_list );
return -1;
}
- memcpy( ppsz_argv, p_this->p_libvlc->ppsz_argv,
- *pi_argc * sizeof(char *) );
+ memcpy( argv_copy, ppsz_argv, *pi_argc * sizeof(char *) );
+ ppsz_argv = argv_copy;
}
i_shortopts = 0;
if( p_conf )
{
/* Check if the option is deprecated */
- if( p_conf->psz_current )
+ if( p_conf->b_removed )
{
- if( p_conf->b_strict )
- {
- fprintf(stderr,
- "Warning: option --%s no longer exists.\n",
- p_conf->psz_name);
- continue;
- }
+ fprintf(stderr,
+ "Warning: option --%s no longer exists.\n",
+ psz_name);
+ continue;
+ }
+ if( p_conf->psz_oldname
+ && !strcmp( p_conf->psz_oldname, psz_name) )
+ {
fprintf( stderr,
"%s: option --%s is deprecated. Use --%s instead.\n",
b_ignore_errors ? "Warning" : "Error",
- p_conf->psz_name, p_conf->psz_current);
+ psz_name, p_conf->psz_name );
if( !b_ignore_errors )
{
/*free */
return -1;
}
- psz_name = (char *)p_conf->psz_current;
- p_conf = config_FindConfig( p_this, psz_name );
+ psz_name = p_conf->psz_name;
}
switch( p_conf->i_type )
free( (char *)p_longopts[i_index].name );
free( p_longopts );
free( psz_shortopts );
- if( b_ignore_errors ) free( ppsz_argv );
+ free( argv_copy );
return 0;
}