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 @@
*
* @warning This function is not re-entrant (because of getopt_long()).
* 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
,
const
char
*
ppsz_argv
[],
bool
b_ignore_errors
)
{
int
i_cmd
,
i_index
,
i_opts
,
i_shortopts
,
flag
,
i_verbose
=
0
;
module_t
*
p_parser
;
struct
option
*
p_longopts
;
struct
vlc_
option
*
p_longopts
;
const
char
**
argv_copy
=
NULL
;
/* Short options */
...
...
@@ -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 */
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
)
{
module_list_free
(
list
);
return
-
1
;
}
psz_shortopts
=
malloc
(
sizeof
(
char
)
*
(
2
*
i_opts
+
1
)
);
psz_shortopts
=
malloc
(
2
*
i_opts
+
1
);
if
(
psz_shortopts
==
NULL
)
{
free
(
p_longopts
);
...
...
@@ -198,14 +197,15 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
module_list_free
(
list
);
/* 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'
;
/*
* Parse the command line options
*/
optind
=
0
;
/* set to 0 to tell GNU getopt to reinitialize */
while
(
(
i_cmd
=
vlc_getopt_long
(
*
pi_argc
,
(
char
**
)
ppsz_argv
,
psz_shortopts
,
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
,
p_longopts
,
&
i_index
)
)
!=
-
1
)
{
/* A long option has been recognized */
...
...
@@ -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_CAT
:
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
;
case
CONFIG_ITEM_INTEGER
:
var_Create
(
p_this
,
psz_name
,
VLC_VAR_INTEGER
);
var_SetInteger
(
p_this
,
psz_name
,
strtol
(
optarg
,
NULL
,
0
));
strtol
(
vlc_
optarg
,
NULL
,
0
));
break
;
case
CONFIG_ITEM_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
;
case
CONFIG_ITEM_KEY
:
var_Create
(
p_this
,
psz_name
,
VLC_VAR_INTEGER
);
var_SetInteger
(
p_this
,
psz_name
,
ConfigStringToKey
(
optarg
)
);
ConfigStringToKey
(
vlc_
optarg
)
);
break
;
case
CONFIG_ITEM_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,
case
CONFIG_ITEM_MODULE_LIST
:
case
CONFIG_ITEM_MODULE_LIST_CAT
:
var_Create
(
p_this
,
name
,
VLC_VAR_STRING
);
var_SetString
(
p_this
,
name
,
optarg
);
var_SetString
(
p_this
,
name
,
vlc_
optarg
);
break
;
case
CONFIG_ITEM_INTEGER
:
var_Create
(
p_this
,
name
,
VLC_VAR_INTEGER
);
if
(
i_cmd
==
'v'
)
{
if
(
optarg
)
if
(
vlc_
optarg
)
{
if
(
*
optarg
==
'v'
)
/* eg. -vvv */
if
(
*
vlc_
optarg
==
'v'
)
/* eg. -vvv */
{
i_verbose
++
;
while
(
*
optarg
==
'v'
)
while
(
*
vlc_
optarg
==
'v'
)
{
i_verbose
++
;
optarg
++
;
vlc_
optarg
++
;
}
}
else
{
i_verbose
+=
atoi
(
optarg
);
/* eg. -v2 */
i_verbose
+=
atoi
(
vlc_
optarg
);
/* eg. -v2 */
}
}
else
...
...
@@ -333,7 +333,7 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
else
{
var_SetInteger
(
p_this
,
name
,
strtol
(
optarg
,
NULL
,
0
)
);
strtol
(
vlc_
optarg
,
NULL
,
0
)
);
}
break
;
case
CONFIG_ITEM_BOOL
:
...
...
@@ -350,13 +350,13 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
{
fputs
(
"vlc: unknown option"
" or missing mandatory argument "
,
stderr
);
if
(
optopt
)
if
(
vlc_
optopt
)
{
fprintf
(
stderr
,
"`-%c'
\n
"
,
optopt
);
fprintf
(
stderr
,
"`-%c'
\n
"
,
vlc_
optopt
);
}
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
);
...
...
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 @@
Also, when `ordering' is RETURN_IN_ORDER,
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.
This is used for communication to and from the caller
...
...
@@ -42,11 +42,11 @@
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
extern
int
optind
;
extern
int
vlc_
optind
;
/* Set to an option character which was unrecognized. */
extern
int
optopt
;
extern
int
vlc_
optopt
;
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
...
...
@@ -68,15 +68,15 @@
one). For long options that have a zero `flag' field, `getopt'
returns the contents of the `val' field. */
struct
option
{
struct
vlc_
option
{
const
char
*
name
;
bool
has_arg
;
int
*
flag
;
int
val
;
};
};
extern
int
vlc_getopt_long
(
int
argc
,
char
*
const
*
argv
,
const
char
*
shortopts
,
const
struct
option
*
longopts
,
int
*
longind
);
extern
int
vlc_getopt_long
(
int
argc
,
char
*
const
*
argv
,
const
char
*
shortopts
,
const
struct
vlc_
option
*
longopts
,
int
*
longind
);
#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,
/*
* 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
)
)
{
#ifdef WIN32
...
...
@@ -603,7 +606,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
dbus_message_unref
(
p_test_reply
);
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"
,
ppsz_argv
[
i_input
]
);
...
...
@@ -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
* 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
;
/* Count the input options */
while
(
*
ppsz_argv
[
i_opt
]
==
':'
&&
i_opt
>
optind
)
while
(
*
ppsz_argv
[
i_opt
]
==
':'
&&
i_opt
>
vlc_
optind
)
{
i_options
++
;
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
/* We assume that the remaining parameters are filenames
* and their input options */
if
(
*
pi_argc
-
1
>=
optind
)
if
(
*
pi_argc
-
1
>=
vlc_
optind
)
{
COPYDATASTRUCT
wm_data
;
int
i_opt
;
vlc_ipc_data_t
*
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
+=
strlen
(
ppsz_argv
[
i_opt
]
)
+
1
;
}
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"
);
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
;
/* 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