# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
#include "../libvlc.h"
#include "vlc_keys.h"
-#include "vlc_charset.h"
-
-#include <errno.h> /* errno */
-#include <limits.h>
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h> /* getuid() */
-#endif
#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 "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;
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;
}