Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
430c69a6
Commit
430c69a6
authored
Feb 28, 2010
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Avoid namespace clash with normal getopt
parent
68f6af6e
Changes
5
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
113 additions
and
110 deletions
+113
-110
src/config/cmdline.c
src/config/cmdline.c
+22
-22
src/config/getopt.c
src/config/getopt.c
+69
-69
src/config/vlc_getopt.h
src/config/vlc_getopt.h
+12
-12
src/libvlc.c
src/libvlc.c
+6
-3
src/win32/specific.c
src/win32/specific.c
+4
-4
No files found.
src/config/cmdline.c
View file @
430c69a6
...
@@ -54,14 +54,13 @@
...
@@ -54,14 +54,13 @@
*
*
* @warning This function is not re-entrant (because of getopt_long()).
* @warning This function is not re-entrant (because of getopt_long()).
* It must be called with the module bank initialization global lock held.
* It must be called with the module bank initialization global lock held.
* FIXME: this still breaks if getopt() is used outside of LibVLC.
*/
*/
int
config_LoadCmdLine
(
vlc_object_t
*
p_this
,
int
*
pi_argc
,
int
config_LoadCmdLine
(
vlc_object_t
*
p_this
,
int
*
pi_argc
,
const
char
*
ppsz_argv
[],
bool
b_ignore_errors
)
const
char
*
ppsz_argv
[],
bool
b_ignore_errors
)
{
{
int
i_cmd
,
i_index
,
i_opts
,
i_shortopts
,
flag
,
i_verbose
=
0
;
int
i_cmd
,
i_index
,
i_opts
,
i_shortopts
,
flag
,
i_verbose
=
0
;
module_t
*
p_parser
;
module_t
*
p_parser
;
struct
option
*
p_longopts
;
struct
vlc_
option
*
p_longopts
;
const
char
**
argv_copy
=
NULL
;
const
char
**
argv_copy
=
NULL
;
/* Short options */
/* Short options */
...
@@ -82,14 +81,14 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
...
@@ -82,14 +81,14 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
* dealing with boolean to allow for --foo and --no-foo */
* dealing with boolean to allow for --foo and --no-foo */
i_opts
+=
p_parser
->
i_config_items
+
2
*
p_parser
->
i_bool_items
;
i_opts
+=
p_parser
->
i_config_items
+
2
*
p_parser
->
i_bool_items
;
p_longopts
=
malloc
(
sizeof
(
struct
option
)
*
(
i_opts
+
1
)
);
p_longopts
=
malloc
(
sizeof
(
*
p_longopts
)
*
(
i_opts
+
1
)
);
if
(
p_longopts
==
NULL
)
if
(
p_longopts
==
NULL
)
{
{
module_list_free
(
list
);
module_list_free
(
list
);
return
-
1
;
return
-
1
;
}
}
psz_shortopts
=
malloc
(
sizeof
(
char
)
*
(
2
*
i_opts
+
1
)
);
psz_shortopts
=
malloc
(
2
*
i_opts
+
1
);
if
(
psz_shortopts
==
NULL
)
if
(
psz_shortopts
==
NULL
)
{
{
free
(
p_longopts
);
free
(
p_longopts
);
...
@@ -198,14 +197,15 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
...
@@ -198,14 +197,15 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
module_list_free
(
list
);
module_list_free
(
list
);
/* Close the longopts and shortopts structures */
/* Close the longopts and shortopts structures */
memset
(
&
p_longopts
[
i_index
],
0
,
sizeof
(
struct
option
)
);
memset
(
&
p_longopts
[
i_index
],
0
,
sizeof
(
*
p_longopts
)
);
psz_shortopts
[
i_shortopts
]
=
'\0'
;
psz_shortopts
[
i_shortopts
]
=
'\0'
;
/*
/*
* Parse the command line options
* Parse the command line options
*/
*/
optind
=
0
;
/* set to 0 to tell GNU getopt to reinitialize */
vlc_optind
=
0
;
/* set to 0 to tell GNU getopt to reinitialize */
while
(
(
i_cmd
=
vlc_getopt_long
(
*
pi_argc
,
(
char
**
)
ppsz_argv
,
psz_shortopts
,
while
(
(
i_cmd
=
vlc_getopt_long
(
*
pi_argc
,
(
char
**
)
ppsz_argv
,
psz_shortopts
,
p_longopts
,
&
i_index
)
)
!=
-
1
)
p_longopts
,
&
i_index
)
)
!=
-
1
)
{
{
/* A long option has been recognized */
/* A long option has been recognized */
...
@@ -262,21 +262,21 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
...
@@ -262,21 +262,21 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
case
CONFIG_ITEM_MODULE_LIST_CAT
:
case
CONFIG_ITEM_MODULE_LIST_CAT
:
case
CONFIG_ITEM_MODULE_CAT
:
case
CONFIG_ITEM_MODULE_CAT
:
var_Create
(
p_this
,
psz_name
,
VLC_VAR_STRING
);
var_Create
(
p_this
,
psz_name
,
VLC_VAR_STRING
);
var_SetString
(
p_this
,
psz_name
,
optarg
);
var_SetString
(
p_this
,
psz_name
,
vlc_
optarg
);
break
;
break
;
case
CONFIG_ITEM_INTEGER
:
case
CONFIG_ITEM_INTEGER
:
var_Create
(
p_this
,
psz_name
,
VLC_VAR_INTEGER
);
var_Create
(
p_this
,
psz_name
,
VLC_VAR_INTEGER
);
var_SetInteger
(
p_this
,
psz_name
,
var_SetInteger
(
p_this
,
psz_name
,
strtol
(
optarg
,
NULL
,
0
));
strtol
(
vlc_
optarg
,
NULL
,
0
));
break
;
break
;
case
CONFIG_ITEM_FLOAT
:
case
CONFIG_ITEM_FLOAT
:
var_Create
(
p_this
,
psz_name
,
VLC_VAR_FLOAT
);
var_Create
(
p_this
,
psz_name
,
VLC_VAR_FLOAT
);
var_SetFloat
(
p_this
,
psz_name
,
us_atof
(
optarg
)
);
var_SetFloat
(
p_this
,
psz_name
,
us_atof
(
vlc_
optarg
)
);
break
;
break
;
case
CONFIG_ITEM_KEY
:
case
CONFIG_ITEM_KEY
:
var_Create
(
p_this
,
psz_name
,
VLC_VAR_INTEGER
);
var_Create
(
p_this
,
psz_name
,
VLC_VAR_INTEGER
);
var_SetInteger
(
p_this
,
psz_name
,
var_SetInteger
(
p_this
,
psz_name
,
ConfigStringToKey
(
optarg
)
);
ConfigStringToKey
(
vlc_
optarg
)
);
break
;
break
;
case
CONFIG_ITEM_BOOL
:
case
CONFIG_ITEM_BOOL
:
var_Create
(
p_this
,
psz_name
,
VLC_VAR_BOOL
);
var_Create
(
p_this
,
psz_name
,
VLC_VAR_BOOL
);
...
@@ -302,26 +302,26 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
...
@@ -302,26 +302,26 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
case
CONFIG_ITEM_MODULE_LIST
:
case
CONFIG_ITEM_MODULE_LIST
:
case
CONFIG_ITEM_MODULE_LIST_CAT
:
case
CONFIG_ITEM_MODULE_LIST_CAT
:
var_Create
(
p_this
,
name
,
VLC_VAR_STRING
);
var_Create
(
p_this
,
name
,
VLC_VAR_STRING
);
var_SetString
(
p_this
,
name
,
optarg
);
var_SetString
(
p_this
,
name
,
vlc_
optarg
);
break
;
break
;
case
CONFIG_ITEM_INTEGER
:
case
CONFIG_ITEM_INTEGER
:
var_Create
(
p_this
,
name
,
VLC_VAR_INTEGER
);
var_Create
(
p_this
,
name
,
VLC_VAR_INTEGER
);
if
(
i_cmd
==
'v'
)
if
(
i_cmd
==
'v'
)
{
{
if
(
optarg
)
if
(
vlc_
optarg
)
{
{
if
(
*
optarg
==
'v'
)
/* eg. -vvv */
if
(
*
vlc_
optarg
==
'v'
)
/* eg. -vvv */
{
{
i_verbose
++
;
i_verbose
++
;
while
(
*
optarg
==
'v'
)
while
(
*
vlc_
optarg
==
'v'
)
{
{
i_verbose
++
;
i_verbose
++
;
optarg
++
;
vlc_
optarg
++
;
}
}
}
}
else
else
{
{
i_verbose
+=
atoi
(
optarg
);
/* eg. -v2 */
i_verbose
+=
atoi
(
vlc_
optarg
);
/* eg. -v2 */
}
}
}
}
else
else
...
@@ -333,7 +333,7 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
...
@@ -333,7 +333,7 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
else
else
{
{
var_SetInteger
(
p_this
,
name
,
var_SetInteger
(
p_this
,
name
,
strtol
(
optarg
,
NULL
,
0
)
);
strtol
(
vlc_
optarg
,
NULL
,
0
)
);
}
}
break
;
break
;
case
CONFIG_ITEM_BOOL
:
case
CONFIG_ITEM_BOOL
:
...
@@ -350,13 +350,13 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
...
@@ -350,13 +350,13 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
{
{
fputs
(
"vlc: unknown option"
fputs
(
"vlc: unknown option"
" or missing mandatory argument "
,
stderr
);
" or missing mandatory argument "
,
stderr
);
if
(
optopt
)
if
(
vlc_
optopt
)
{
{
fprintf
(
stderr
,
"`-%c'
\n
"
,
optopt
);
fprintf
(
stderr
,
"`-%c'
\n
"
,
vlc_
optopt
);
}
}
else
else
{
{
fprintf
(
stderr
,
"`%s'
\n
"
,
ppsz_argv
[
optind
-
1
]
);
fprintf
(
stderr
,
"`%s'
\n
"
,
ppsz_argv
[
vlc_
optind
-
1
]
);
}
}
fputs
(
"Try `vlc --help' for more information.
\n
"
,
stderr
);
fputs
(
"Try `vlc --help' for more information.
\n
"
,
stderr
);
...
...
src/config/getopt.c
View file @
430c69a6
This diff is collapsed.
Click to expand it.
src/config/vlc_getopt.h
View file @
430c69a6
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
Also, when `ordering' is RETURN_IN_ORDER,
Also, when `ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
each non-option ARGV-element is returned here. */
extern
char
*
optarg
;
extern
char
*
vlc_
optarg
;
/* Index in ARGV of the next element to be scanned.
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
This is used for communication to and from the caller
...
@@ -42,11 +42,11 @@
...
@@ -42,11 +42,11 @@
Otherwise, `optind' communicates from one call to the next
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
how much of ARGV has been scanned so far. */
extern
int
optind
;
extern
int
vlc_
optind
;
/* Set to an option character which was unrecognized. */
/* Set to an option character which was unrecognized. */
extern
int
optopt
;
extern
int
vlc_
optopt
;
/* Describe the long-named options requested by the application.
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
...
@@ -68,15 +68,15 @@
...
@@ -68,15 +68,15 @@
one). For long options that have a zero `flag' field, `getopt'
one). For long options that have a zero `flag' field, `getopt'
returns the contents of the `val' field. */
returns the contents of the `val' field. */
struct
option
struct
vlc_
option
{
{
const
char
*
name
;
const
char
*
name
;
bool
has_arg
;
bool
has_arg
;
int
*
flag
;
int
*
flag
;
int
val
;
int
val
;
};
};
extern
int
vlc_getopt_long
(
int
argc
,
char
*
const
*
argv
,
const
char
*
shortopts
,
extern
int
vlc_getopt_long
(
int
argc
,
char
*
const
*
argv
,
const
char
*
shortopts
,
const
struct
option
*
longopts
,
int
*
longind
);
const
struct
vlc_
option
*
longopts
,
int
*
longind
);
#endif
/* VLC_GETOPT_H */
#endif
/* VLC_GETOPT_H */
src/libvlc.c
View file @
430c69a6
...
@@ -531,6 +531,9 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
...
@@ -531,6 +531,9 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
/*
/*
* Override configuration with command line settings
* Override configuration with command line settings
*/
*/
/* config_LoadCmdLine(), DBus (below) and Win32-specific use vlc_optind,
* vlc_optarg and vlc_optopt globals. This is not thread-safe!! */
#warning BUG!
if
(
config_LoadCmdLine
(
p_libvlc
,
&
i_argc
,
ppsz_argv
,
false
)
)
if
(
config_LoadCmdLine
(
p_libvlc
,
&
i_argc
,
ppsz_argv
,
false
)
)
{
{
#ifdef WIN32
#ifdef WIN32
...
@@ -603,7 +606,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
...
@@ -603,7 +606,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
dbus_message_unref
(
p_test_reply
);
dbus_message_unref
(
p_test_reply
);
msg_Warn
(
p_libvlc
,
"Another Media Player is running. Exiting"
);
msg_Warn
(
p_libvlc
,
"Another Media Player is running. Exiting"
);
for
(
i_input
=
optind
;
i_input
<
i_argc
;
i_input
++
)
for
(
i_input
=
vlc_optind
;
i_input
<
i_argc
;
i_input
++
)
{
{
msg_Dbg
(
p_libvlc
,
"Adds %s to the running Media Player"
,
msg_Dbg
(
p_libvlc
,
"Adds %s to the running Media Player"
,
ppsz_argv
[
i_input
]
);
ppsz_argv
[
i_input
]
);
...
@@ -1194,12 +1197,12 @@ static int GetFilenames( libvlc_int_t *p_vlc, int i_argc, const char *ppsz_argv[
...
@@ -1194,12 +1197,12 @@ static int GetFilenames( libvlc_int_t *p_vlc, int i_argc, const char *ppsz_argv[
/* We assume that the remaining parameters are filenames
/* We assume that the remaining parameters are filenames
* and their input options */
* and their input options */
for
(
i_opt
=
i_argc
-
1
;
i_opt
>=
optind
;
i_opt
--
)
for
(
i_opt
=
i_argc
-
1
;
i_opt
>=
vlc_
optind
;
i_opt
--
)
{
{
i_options
=
0
;
i_options
=
0
;
/* Count the input options */
/* Count the input options */
while
(
*
ppsz_argv
[
i_opt
]
==
':'
&&
i_opt
>
optind
)
while
(
*
ppsz_argv
[
i_opt
]
==
':'
&&
i_opt
>
vlc_
optind
)
{
{
i_options
++
;
i_options
++
;
i_opt
--
;
i_opt
--
;
...
...
src/win32/specific.c
View file @
430c69a6
...
@@ -221,24 +221,24 @@ void system_Configure( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv
...
@@ -221,24 +221,24 @@ void system_Configure( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv
/* We assume that the remaining parameters are filenames
/* We assume that the remaining parameters are filenames
* and their input options */
* and their input options */
if
(
*
pi_argc
-
1
>=
optind
)
if
(
*
pi_argc
-
1
>=
vlc_
optind
)
{
{
COPYDATASTRUCT
wm_data
;
COPYDATASTRUCT
wm_data
;
int
i_opt
;
int
i_opt
;
vlc_ipc_data_t
*
p_data
;
vlc_ipc_data_t
*
p_data
;
size_t
i_data
=
sizeof
(
*
p_data
);
size_t
i_data
=
sizeof
(
*
p_data
);
for
(
i_opt
=
optind
;
i_opt
<
*
pi_argc
;
i_opt
++
)
for
(
i_opt
=
vlc_
optind
;
i_opt
<
*
pi_argc
;
i_opt
++
)
{
{
i_data
+=
sizeof
(
size_t
);
i_data
+=
sizeof
(
size_t
);
i_data
+=
strlen
(
ppsz_argv
[
i_opt
]
)
+
1
;
i_data
+=
strlen
(
ppsz_argv
[
i_opt
]
)
+
1
;
}
}
p_data
=
malloc
(
i_data
);
p_data
=
malloc
(
i_data
);
p_data
->
argc
=
*
pi_argc
-
optind
;
p_data
->
argc
=
*
pi_argc
-
vlc_
optind
;
p_data
->
enqueue
=
var_InheritBool
(
p_this
,
"playlist-enqueue"
);
p_data
->
enqueue
=
var_InheritBool
(
p_this
,
"playlist-enqueue"
);
i_data
=
0
;
i_data
=
0
;
for
(
i_opt
=
optind
;
i_opt
<
*
pi_argc
;
i_opt
++
)
for
(
i_opt
=
vlc_
optind
;
i_opt
<
*
pi_argc
;
i_opt
++
)
{
{
size_t
i_len
=
strlen
(
ppsz_argv
[
i_opt
]
)
+
1
;
size_t
i_len
=
strlen
(
ppsz_argv
[
i_opt
]
)
+
1
;
/* Windows will never switch to an architecture
/* Windows will never switch to an architecture
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment