/*****************************************************************************
* The evil global variables. We handle them with care, don't worry.
*****************************************************************************/
-static unsigned i_instances = 0;
#ifndef WIN32
static bool b_daemon = false;
#endif
static int ConsoleWidth ( void );
-static vlc_mutex_t global_lock = VLC_STATIC_MUTEX;
extern const char psz_vlc_changeset[];
/**
/* Now that the thread system is initialized, we don't have much, but
* at least we have variables */
- vlc_mutex_lock( &global_lock );
- if( i_instances == 0 )
- {
- /* Guess what CPU we have */
- cpu_flags = CPUCapabilities();
- /* The module bank will be initialized later */
- }
-
/* Allocate a libvlc instance object */
p_libvlc = vlc_custom_create( (vlc_object_t *)NULL, sizeof (*priv),
"libvlc" );
- if( p_libvlc != NULL )
- i_instances++;
- vlc_mutex_unlock( &global_lock );
-
if( p_libvlc == NULL )
return NULL;
char * psz_parser = NULL;
char * psz_control = NULL;
bool b_exit = false;
- int i_ret = VLC_EEXIT;
playlist_t *p_playlist = NULL;
char *psz_val;
-#if defined( ENABLE_NLS ) \
- && ( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
-# if defined (WIN32) || defined (__APPLE__)
- char * psz_language;
-#endif
-#endif
/* System specific initialization code */
system_Init();
- /*
- * Support for gettext
- */
- vlc_bindtextdomain (PACKAGE_NAME);
-
/* Initialize the module bank and load the configuration of the
* main module. We need to do this at this stage to be able to display
* a short help if required by the user. (short help == main module
* options) */
module_InitBank ();
+ /* Get command line options that affect module loading. */
if( config_LoadCmdLine( p_libvlc, i_argc, ppsz_argv, NULL ) )
{
module_EndBank (false);
return VLC_EGENERIC;
}
-
priv->i_verbose = var_InheritInteger( p_libvlc, "verbose" );
- /* Announce who we are - Do it only for first instance ? */
+
+ /* Announce who we are (TODO: only first instance?) */
msg_Dbg( p_libvlc, "VLC media player - %s", VERSION_MESSAGE );
msg_Dbg( p_libvlc, "%s", COPYRIGHT_MESSAGE );
msg_Dbg( p_libvlc, "revision %s", psz_vlc_changeset );
msg_Dbg( p_libvlc, "configured with %s", CONFIGURE_LINE );
- /*xgettext: Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
- msg_Dbg( p_libvlc, "translation test: code is \"%s\"", _("C") );
- /* Check for short help option */
- if( var_InheritBool( p_libvlc, "help" ) )
- {
- Help( p_libvlc, "help" );
- b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
- }
- /* Check for version option */
- else if( var_InheritBool( p_libvlc, "version" ) )
- {
- Version();
- b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
- }
+ /* Load the builtins and plugins into the module_bank.
+ * We have to do it before config_Load*() because this also gets the
+ * list of configuration options exported by each module and loads their
+ * default values. */
+ size_t module_count = module_LoadPlugins (p_libvlc);
- /* Check for daemon mode */
-#if !defined( WIN32 ) && !defined( __SYMBIAN32__ )
- if( var_InheritBool( p_libvlc, "daemon" ) )
+ /*
+ * Override default configuration with config file settings
+ */
+ if( !var_InheritBool( p_libvlc, "ignore-config" ) )
{
-#ifdef HAVE_DAEMON
- char *psz_pidfile = NULL;
-
- if( daemon( 1, 0) != 0 )
- {
- msg_Err( p_libvlc, "Unable to fork vlc to daemon mode" );
- b_exit = true;
- }
- b_daemon = true;
-
- /* lets check if we need to write the pidfile */
- psz_pidfile = var_CreateGetNonEmptyString( p_libvlc, "pidfile" );
- if( psz_pidfile != NULL )
- {
- FILE *pidfile;
- pid_t i_pid = getpid ();
- msg_Dbg( p_libvlc, "PID is %d, writing it to %s",
- i_pid, psz_pidfile );
- pidfile = vlc_fopen( psz_pidfile,"w" );
- if( pidfile != NULL )
- {
- utf8_fprintf( pidfile, "%d", (int)i_pid );
- fclose( pidfile );
- }
- else
- {
- msg_Err( p_libvlc, "cannot open pid file for writing: %s (%m)",
- psz_pidfile );
- }
- }
- free( psz_pidfile );
-
-#else
- pid_t i_pid;
-
- if( ( i_pid = fork() ) < 0 )
- {
- msg_Err( p_libvlc, "unable to fork vlc to daemon mode" );
- b_exit = true;
- }
- else if( i_pid )
- {
- /* This is the parent, exit right now */
- msg_Dbg( p_libvlc, "closing parent process" );
- b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
- }
+ if( var_InheritBool( p_libvlc, "reset-config" ) )
+ config_SaveConfigFile( p_libvlc ); /* Save default config */
else
- {
- /* We are the child */
- msg_Dbg( p_libvlc, "daemon spawned" );
- close( STDIN_FILENO );
- close( STDOUT_FILENO );
- close( STDERR_FILENO );
-
- b_daemon = true;
- }
-#endif
+ config_LoadConfigFile( p_libvlc );
}
-#endif
- if( b_exit )
+ /*
+ * Override configuration with command line settings
+ */
+ int vlc_optind;
+ if( config_LoadCmdLine( p_libvlc, i_argc, ppsz_argv, &vlc_optind ) )
{
- module_EndBank (false);
- return i_ret;
+#ifdef WIN32
+ ShowConsole( false );
+ /* Pause the console because it's destroyed when we exit */
+ fprintf( stderr, "The command line options couldn't be loaded, check "
+ "that they are valid.\n" );
+ PauseConsole();
+#endif
+ module_EndBank (true);
+ return VLC_EGENERIC;
}
+ priv->i_verbose = var_InheritInteger( p_libvlc, "verbose" );
- /* Check for translation config option */
+ /*
+ * Support for gettext
+ */
#if defined( ENABLE_NLS ) \
&& ( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
# if defined (WIN32) || defined (__APPLE__)
- if( !var_InheritBool( p_libvlc, "ignore-config" ) )
- config_LoadConfigFile( p_libvlc );
- priv->i_verbose = var_InheritInteger( p_libvlc, "verbose" );
-
/* Check if the user specified a custom language */
- psz_language = var_CreateGetNonEmptyString( p_libvlc, "language" );
- if( psz_language && strcmp( psz_language, "auto" ) )
- {
- /* Reset the default domain */
- SetLanguage( psz_language );
-
- /* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
- msg_Dbg( p_libvlc, "translation test: code is \"%s\"", _("C") );
- }
- free( psz_language );
+ char *lang = var_InheritString (p_libvlc, "language");
+ if (lang != NULL && strcmp (lang, "auto"))
+ SetLanguage (lang);
+ free (lang);
# endif
+ vlc_bindtextdomain (PACKAGE_NAME);
#endif
+ /*xgettext: Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
+ msg_Dbg( p_libvlc, "translation test: code is \"%s\"", _("C") );
- /*
- * Load the builtins and plugins into the module_bank.
- * We have to do it before config_Load*() because this also gets the
- * list of configuration options exported by each module and loads their
- * default values.
- */
- module_LoadPlugins( p_libvlc );
- if( p_libvlc->b_die )
+ /* Check for short help option */
+ if( var_InheritBool( p_libvlc, "help" ) )
{
+ Help( p_libvlc, "help" );
+ b_exit = true;
+ }
+ /* Check for version option */
+ else if( var_InheritBool( p_libvlc, "version" ) )
+ {
+ Version();
b_exit = true;
}
-
- size_t module_count;
- module_t **list = module_list_get( &module_count );
- module_list_free( list );
- msg_Dbg( p_libvlc, "module bank initialized (%zu modules)", module_count );
-
/* Check for help on modules */
- if( (p_tmp = var_InheritString( p_libvlc, "module" )) )
+ else if( (p_tmp = var_InheritString( p_libvlc, "module" )) )
{
Help( p_libvlc, p_tmp );
free( p_tmp );
b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
}
/* Check for full help option */
else if( var_InheritBool( p_libvlc, "full-help" ) )
var_SetBool( p_libvlc, "help-verbose", true );
Help( p_libvlc, "full-help" );
b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
}
/* Check for long help option */
else if( var_InheritBool( p_libvlc, "longhelp" ) )
{
Help( p_libvlc, "longhelp" );
b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
}
/* Check for module list option */
else if( var_InheritBool( p_libvlc, "list" ) )
{
ListModules( p_libvlc, false );
b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
}
else if( var_InheritBool( p_libvlc, "list-verbose" ) )
{
ListModules( p_libvlc, true );
b_exit = true;
- i_ret = VLC_EEXITSUCCESS;
}
- if( module_count <= 1 )
+ if( b_exit )
{
- msg_Err( p_libvlc, "No plugins found! Check your VLC installation.");
- b_exit = true;
- i_ret = VLC_ENOITEM;
+ module_EndBank (true);
+ return VLC_EEXITSUCCESS;
}
- if( b_exit )
+ if( module_count <= 1 )
{
+ msg_Err( p_libvlc, "No plugins found! Check your VLC installation.");
module_EndBank (true);
- return i_ret;
+ return VLC_ENOITEM;
}
- /*
- * Override default configuration with config file settings
- */
- if( !var_InheritBool( p_libvlc, "ignore-config" ) )
+#ifdef HAVE_DAEMON
+ /* Check for daemon mode */
+ if( var_InheritBool( p_libvlc, "daemon" ) )
{
- if( var_InheritBool( p_libvlc, "reset-config" ) )
+ char *psz_pidfile = NULL;
+
+ if( daemon( 1, 0) != 0 )
{
- config_ResetAll( p_libvlc );
- config_SaveConfigFile( p_libvlc );
+ msg_Err( p_libvlc, "Unable to fork vlc to daemon mode" );
+ module_EndBank (true);
+ return VLC_EEXIT;
}
- else
- config_LoadConfigFile( p_libvlc );
- }
+ b_daemon = true;
- /*
- * Override configuration with command line settings
- */
- int vlc_optind;
- if( config_LoadCmdLine( p_libvlc, i_argc, ppsz_argv, &vlc_optind ) )
- {
-#ifdef WIN32
- ShowConsole( false );
- /* Pause the console because it's destroyed when we exit */
- fprintf( stderr, "The command line options couldn't be loaded, check "
- "that they are valid.\n" );
- PauseConsole();
-#endif
- module_EndBank (true);
- return VLC_EGENERIC;
+ /* lets check if we need to write the pidfile */
+ psz_pidfile = var_CreateGetNonEmptyString( p_libvlc, "pidfile" );
+ if( psz_pidfile != NULL )
+ {
+ FILE *pidfile;
+ pid_t i_pid = getpid ();
+ msg_Dbg( p_libvlc, "PID is %d, writing it to %s",
+ i_pid, psz_pidfile );
+ pidfile = vlc_fopen( psz_pidfile,"w" );
+ if( pidfile != NULL )
+ {
+ utf8_fprintf( pidfile, "%d", (int)i_pid );
+ fclose( pidfile );
+ }
+ else
+ {
+ msg_Err( p_libvlc, "cannot open pid file for writing: %s (%m)",
+ psz_pidfile );
+ }
+ }
+ free( psz_pidfile );
}
- priv->i_verbose = var_InheritInteger( p_libvlc, "verbose" );
+#endif
/* FIXME: could be replaced by using Unix sockets */
#ifdef HAVE_DBUS
{
libvlc_priv_t *priv = libvlc_priv( p_libvlc );
- vlc_mutex_lock( &global_lock );
- i_instances--;
-
- if( i_instances == 0 )
- {
- /* System specific cleaning code */
- system_End( );
- }
- vlc_mutex_unlock( &global_lock );
+ system_End( );
/* Destroy mutexes */
vlc_ExitDestroy( &priv->exit );