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
Hide 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,15 +197,16 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
...
@@ -198,15 +197,16 @@ 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
,
p_longopts
,
&
i_index
)
)
!=
-
1
)
psz_shortopts
,
p_longopts
,
&
i_index
)
)
!=
-
1
)
{
{
/* A long option has been recognized */
/* A long option has been recognized */
if
(
i_cmd
==
0
)
if
(
i_cmd
==
0
)
...
@@ -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
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,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. */
char
*
optarg
=
NULL
;
char
*
vlc_
optarg
=
NULL
;
/* 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
...
@@ -64,13 +64,13 @@ char *optarg = NULL;
...
@@ -64,13 +64,13 @@ char *optarg = NULL;
how much of ARGV has been scanned so far. */
how much of ARGV has been scanned so far. */
/* 1003.2 says this must be 1 before any call. */
/* 1003.2 says this must be 1 before any call. */
int
optind
=
1
;
int
vlc_
optind
=
1
;
/* Formerly, initialization of getopt depended on optind==0, which
/* Formerly, initialization of getopt depended on optind==0, which
causes problems with re-calling getopt as programs generally don't
causes problems with re-calling getopt as programs generally don't
know that. */
know that. */
int
_
_getopt_initialized
=
0
;
static
int
vlc
_getopt_initialized
=
0
;
/* The next char to be scanned in the option-element
/* The next char to be scanned in the option-element
in which the last option character we returned was found.
in which the last option character we returned was found.
...
@@ -85,7 +85,7 @@ static char *nextchar;
...
@@ -85,7 +85,7 @@ static char *nextchar;
This must be initialized on some systems to avoid linking in the
This must be initialized on some systems to avoid linking in the
system's own getopt implementation. */
system's own getopt implementation. */
int
optopt
=
'?'
;
int
vlc_
optopt
=
'?'
;
/* Describe how to deal with options that follow non-option ARGV-elements.
/* Describe how to deal with options that follow non-option ARGV-elements.
...
@@ -151,7 +151,7 @@ static void
...
@@ -151,7 +151,7 @@ static void
{
{
int
bottom
=
first_nonopt
;
int
bottom
=
first_nonopt
;
int
middle
=
last_nonopt
;
int
middle
=
last_nonopt
;
int
top
=
optind
;
int
top
=
vlc_
optind
;
char
*
tem
;
char
*
tem
;
/* Exchange the shorter segment with the far end of the longer segment.
/* Exchange the shorter segment with the far end of the longer segment.
...
@@ -197,16 +197,16 @@ static void
...
@@ -197,16 +197,16 @@ static void
/* Update records for the slots the non-options now occupy. */
/* Update records for the slots the non-options now occupy. */
first_nonopt
+=
(
optind
-
last_nonopt
);
first_nonopt
+=
(
vlc_
optind
-
last_nonopt
);
last_nonopt
=
optind
;
last_nonopt
=
vlc_
optind
;
}
}
/* Initialize the internal data when the first call is made. */
/* Initialize the internal data when the first call is made. */
static
const
char
*
_getopt_initialize
(
int
,
char
*
const
*
,
const
char
*
);
static
const
char
*
vlc
_getopt_initialize
(
int
,
char
*
const
*
,
const
char
*
);
static
const
char
*
static
const
char
*
_getopt_initialize
(
argc
,
argv
,
optstring
)
vlc
_getopt_initialize
(
argc
,
argv
,
optstring
)
int
argc
;
int
argc
;
char
*
const
*
argv
;
char
*
const
*
argv
;
const
char
*
optstring
;
const
char
*
optstring
;
...
@@ -217,7 +217,7 @@ static const char *
...
@@ -217,7 +217,7 @@ static const char *
is the program name); the sequence of previously skipped
is the program name); the sequence of previously skipped
non-option ARGV-elements is empty. */
non-option ARGV-elements is empty. */
first_nonopt
=
last_nonopt
=
optind
=
1
;
first_nonopt
=
last_nonopt
=
vlc_
optind
=
1
;
nextchar
=
NULL
;
nextchar
=
NULL
;
...
@@ -298,19 +298,19 @@ int
...
@@ -298,19 +298,19 @@ int
int
argc
;
int
argc
;
char
*
const
*
argv
;
char
*
const
*
argv
;
const
char
*
optstring
;
const
char
*
optstring
;
const
struct
option
*
longopts
;
const
struct
vlc_option
*
restrict
longopts
;
int
*
longind
;
int
*
longind
;
{
{
optarg
=
NULL
;
vlc_
optarg
=
NULL
;
if
(
!
__getopt_initialized
||
optind
==
0
)
if
(
!
vlc_getopt_initialized
||
vlc_
optind
==
0
)
{
{
optstring
=
_getopt_initialize
(
argc
,
argv
,
optstring
);
optstring
=
vlc
_getopt_initialize
(
argc
,
argv
,
optstring
);
optind
=
1
;
/* Don't scan ARGV[0], the program name. */
vlc_
optind
=
1
;
/* Don't scan ARGV[0], the program name. */
_
_getopt_initialized
=
1
;
vlc
_getopt_initialized
=
1
;
}
}
#define NONOPTION_P (argv[
optind][0] != '-' || argv[
optind][1] == '\0')
#define NONOPTION_P (argv[
vlc_optind][0] != '-' || argv[vlc_
optind][1] == '\0')
if
(
nextchar
==
NULL
||
*
nextchar
==
'\0'
)
if
(
nextchar
==
NULL
||
*
nextchar
==
'\0'
)
{
{
...
@@ -318,27 +318,27 @@ int
...
@@ -318,27 +318,27 @@ int
/* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
/* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
moved back by the user (who may also have changed the arguments). */
moved back by the user (who may also have changed the arguments). */
if
(
last_nonopt
>
optind
)
if
(
last_nonopt
>
vlc_
optind
)
last_nonopt
=
optind
;
last_nonopt
=
vlc_
optind
;
if
(
first_nonopt
>
optind
)
if
(
first_nonopt
>
vlc_
optind
)
first_nonopt
=
optind
;
first_nonopt
=
vlc_
optind
;
if
(
ordering
==
PERMUTE
)
if
(
ordering
==
PERMUTE
)
{
{
/* If we have just processed some options following some non-options,
/* If we have just processed some options following some non-options,
exchange them so that the options come first. */
exchange them so that the options come first. */
if
(
first_nonopt
!=
last_nonopt
&&
last_nonopt
!=
optind
)
if
(
first_nonopt
!=
last_nonopt
&&
last_nonopt
!=
vlc_
optind
)
exchange
((
char
**
)
argv
);
exchange
((
char
**
)
argv
);
else
if
(
last_nonopt
!=
optind
)
else
if
(
last_nonopt
!=
vlc_
optind
)
first_nonopt
=
optind
;
first_nonopt
=
vlc_
optind
;
/* Skip any additional non-options
/* Skip any additional non-options
and extend the range of non-options previously skipped. */
and extend the range of non-options previously skipped. */
while
(
optind
<
argc
&&
NONOPTION_P
)
while
(
vlc_
optind
<
argc
&&
NONOPTION_P
)
optind
++
;
vlc_
optind
++
;
last_nonopt
=
optind
;
last_nonopt
=
vlc_
optind
;
}
}
/* The special ARGV-element `--' means premature end of options.
/* The special ARGV-element `--' means premature end of options.
...
@@ -346,28 +346,28 @@ int
...
@@ -346,28 +346,28 @@ int
then exchange with previous non-options as if it were an option,
then exchange with previous non-options as if it were an option,
then skip everything else like a non-option. */
then skip everything else like a non-option. */
if
(
optind
!=
argc
&&
!
strcmp
(
argv
[
optind
],
"--"
))
if
(
vlc_optind
!=
argc
&&
!
strcmp
(
argv
[
vlc_
optind
],
"--"
))
{
{
optind
++
;
vlc_
optind
++
;
if
(
first_nonopt
!=
last_nonopt
&&
last_nonopt
!=
optind
)
if
(
first_nonopt
!=
last_nonopt
&&
last_nonopt
!=
vlc_
optind
)
exchange
((
char
**
)
argv
);
exchange
((
char
**
)
argv
);
else
if
(
first_nonopt
==
last_nonopt
)
else
if
(
first_nonopt
==
last_nonopt
)
first_nonopt
=
optind
;
first_nonopt
=
vlc_
optind
;
last_nonopt
=
argc
;
last_nonopt
=
argc
;
optind
=
argc
;
vlc_
optind
=
argc
;
}
}
/* If we have done all the ARGV-elements, stop the scan
/* If we have done all the ARGV-elements, stop the scan
and back over any non-options that we skipped and permuted. */
and back over any non-options that we skipped and permuted. */
if
(
optind
==
argc
)
if
(
vlc_
optind
==
argc
)
{
{
/* Set the next-arg-index to point at the non-options
/* Set the next-arg-index to point at the non-options
that we previously skipped, so the caller will digest them. */
that we previously skipped, so the caller will digest them. */
if
(
first_nonopt
!=
last_nonopt
)
if
(
first_nonopt
!=
last_nonopt
)
optind
=
first_nonopt
;
vlc_
optind
=
first_nonopt
;
return
-
1
;
return
-
1
;
}
}
...
@@ -378,26 +378,26 @@ int
...
@@ -378,26 +378,26 @@ int
{
{
if
(
ordering
==
REQUIRE_ORDER
)
if
(
ordering
==
REQUIRE_ORDER
)
return
-
1
;
return
-
1
;
optarg
=
argv
[
optind
++
];
vlc_optarg
=
argv
[
vlc_
optind
++
];
return
1
;
return
1
;
}
}
/* We have found another option-ARGV-element.
/* We have found another option-ARGV-element.
Skip the initial punctuation. */
Skip the initial punctuation. */
nextchar
=
(
argv
[
optind
]
+
1
nextchar
=
(
argv
[
vlc_
optind
]
+
1
+
(
argv
[
optind
][
1
]
==
'-'
));
+
(
argv
[
vlc_
optind
][
1
]
==
'-'
));
}
}
/* Decode the current option-ARGV-element. */
/* Decode the current option-ARGV-element. */
/* Check whether the ARGV-element is a long option. */
/* Check whether the ARGV-element is a long option. */
if
(
argv
[
optind
][
1
]
==
'-'
)
if
(
argv
[
vlc_
optind
][
1
]
==
'-'
)
{
{
char
*
nameend
;
char
*
nameend
;
const
struct
option
*
p
;
const
struct
vlc_
option
*
p
;
const
struct
option
*
pfound
=
NULL
;
const
struct
vlc_
option
*
pfound
=
NULL
;
int
exact
=
0
;
int
exact
=
0
;
int
ambig
=
0
;
int
ambig
=
0
;
int
indfound
=
-
1
;
int
indfound
=
-
1
;
...
@@ -434,35 +434,35 @@ int
...
@@ -434,35 +434,35 @@ int
if
(
ambig
&&
!
exact
)
if
(
ambig
&&
!
exact
)
{
{
nextchar
+=
strlen
(
nextchar
);
nextchar
+=
strlen
(
nextchar
);
optind
++
;
vlc_
optind
++
;
optopt
=
0
;
vlc_
optopt
=
0
;
return
'?'
;
return
'?'
;
}
}
if
(
pfound
!=
NULL
)
if
(
pfound
!=
NULL
)
{
{
option_index
=
indfound
;
option_index
=
indfound
;
optind
++
;
vlc_
optind
++
;
if
(
*
nameend
)
if
(
*
nameend
)
{
{
if
(
pfound
->
has_arg
)
if
(
pfound
->
has_arg
)
optarg
=
nameend
+
1
;
vlc_
optarg
=
nameend
+
1
;
else
else
{
{
nextchar
+=
strlen
(
nextchar
);
nextchar
+=
strlen
(
nextchar
);
optopt
=
pfound
->
val
;
vlc_
optopt
=
pfound
->
val
;
return
'?'
;
return
'?'
;
}
}
}
}
else
if
(
pfound
->
has_arg
)
else
if
(
pfound
->
has_arg
)
{
{
if
(
optind
<
argc
)
if
(
vlc_
optind
<
argc
)
optarg
=
argv
[
optind
++
];
vlc_optarg
=
argv
[
vlc_
optind
++
];
else
else
{
{
nextchar
+=
strlen
(
nextchar
);
nextchar
+=
strlen
(
nextchar
);
optopt
=
pfound
->
val
;
vlc_
optopt
=
pfound
->
val
;
return
optstring
[
0
]
==
':'
?
':'
:
'?'
;
return
optstring
[
0
]
==
':'
?
':'
:
'?'
;
}
}
}
}
...
@@ -478,8 +478,8 @@ int
...
@@ -478,8 +478,8 @@ int
}
}
nextchar
=
(
char
*
)
""
;
nextchar
=
(
char
*
)
""
;
optind
++
;
vlc_
optind
++
;
optopt
=
0
;
vlc_
optopt
=
0
;
return
'?'
;
return
'?'
;
}
}
...
@@ -491,19 +491,19 @@ int
...
@@ -491,19 +491,19 @@ int
/* Increment `optind' when we start to process its last character. */
/* Increment `optind' when we start to process its last character. */
if
(
*
nextchar
==
'\0'
)
if
(
*
nextchar
==
'\0'
)
++
optind
;
++
vlc_
optind
;
if
(
temp
==
NULL
||
c
==
':'
)
if
(
temp
==
NULL
||
c
==
':'
)
{
{
optopt
=
c
;
vlc_
optopt
=
c
;
return
'?'
;
return
'?'
;
}
}
/* Convenience. Treat POSIX -W foo same as long option --foo */
/* Convenience. Treat POSIX -W foo same as long option --foo */
if
(
temp
[
0
]
==
'W'
&&
temp
[
1
]
==
';'
)
if
(
temp
[
0
]
==
'W'
&&
temp
[
1
]
==
';'
)
{
{
char
*
nameend
;
char
*
nameend
;
const
struct
option
*
p
;
const
struct
vlc_
option
*
p
;
const
struct
option
*
pfound
=
NULL
;
const
struct
vlc_
option
*
pfound
=
NULL
;
int
exact
=
0
;
int
exact
=
0
;
int
ambig
=
0
;
int
ambig
=
0
;
int
indfound
=
0
;
int
indfound
=
0
;
...
@@ -512,14 +512,14 @@ int
...
@@ -512,14 +512,14 @@ int
/* This is an option that requires an argument. */
/* This is an option that requires an argument. */
if
(
*
nextchar
!=
'\0'
)
if
(
*
nextchar
!=
'\0'
)
{
{
optarg
=
nextchar
;
vlc_
optarg
=
nextchar
;
/* If we end this ARGV-element by taking the rest as an arg,
/* If we end this ARGV-element by taking the rest as an arg,
we must advance to the next element now. */
we must advance to the next element now. */
optind
++
;
vlc_
optind
++
;
}
}
else
if
(
optind
==
argc
)
else
if
(
vlc_
optind
==
argc
)
{
{
optopt
=
c
;
vlc_
optopt
=
c
;
if
(
optstring
[
0
]
==
':'
)
if
(
optstring
[
0
]
==
':'
)
c
=
':'
;
c
=
':'
;
else
else
...
@@ -529,12 +529,12 @@ int
...
@@ -529,12 +529,12 @@ int
else
else
/* We already incremented `optind' once;
/* We already incremented `optind' once;
increment it again when taking next ARGV-elt as argument. */
increment it again when taking next ARGV-elt as argument. */
optarg
=
argv
[
optind
++
];
vlc_optarg
=
argv
[
vlc_
optind
++
];
/* optarg is now the argument, see if it's in the
/* optarg is now the argument, see if it's in the
table of longopts. */
table of longopts. */
for
(
nextchar
=
nameend
=
optarg
;
*
nameend
&&
*
nameend
!=
'='
;
nameend
++
)
for
(
nextchar
=
nameend
=
vlc_
optarg
;
*
nameend
&&
*
nameend
!=
'='
;
nameend
++
)
/* Do nothing. */
;
/* Do nothing. */
;
/* Test all long options for either exact match
/* Test all long options for either exact match
...
@@ -563,7 +563,7 @@ int
...
@@ -563,7 +563,7 @@ int
if
(
ambig
&&
!
exact
)
if
(
ambig
&&
!
exact
)
{
{
nextchar
+=
strlen
(
nextchar
);
nextchar
+=
strlen
(
nextchar
);
optind
++
;
vlc_
optind
++
;
return
'?'
;
return
'?'
;
}
}
if
(
pfound
!=
NULL
)
if
(
pfound
!=
NULL
)
...
@@ -572,7 +572,7 @@ int
...
@@ -572,7 +572,7 @@ int
if
(
*
nameend
)
if
(
*
nameend
)
{
{
if
(
pfound
->
has_arg
)
if
(
pfound
->
has_arg
)
optarg
=
nameend
+
1
;
vlc_
optarg
=
nameend
+
1
;
else
else
{
{
nextchar
+=
strlen
(
nextchar
);
nextchar
+=
strlen
(
nextchar
);
...
@@ -581,8 +581,8 @@ int
...
@@ -581,8 +581,8 @@ int
}
}
else
if
(
pfound
->
has_arg
)
else
if
(
pfound
->
has_arg
)
{
{
if
(
optind
<
argc
)
if
(
vlc_
optind
<
argc
)
optarg
=
argv
[
optind
++
];
vlc_optarg
=
argv
[
vlc_
optind
++
];
else
else
{
{
nextchar
+=
strlen
(
nextchar
);
nextchar
+=
strlen
(
nextchar
);
...
@@ -607,14 +607,14 @@ int
...
@@ -607,14 +607,14 @@ int
/* This is an option that requires an argument. */
/* This is an option that requires an argument. */
if
(
*
nextchar
!=
'\0'
)
if
(
*
nextchar
!=
'\0'
)
{
{
optarg
=
nextchar
;
vlc_
optarg
=
nextchar
;
/* If we end this ARGV-element by taking the rest as an arg,
/* If we end this ARGV-element by taking the rest as an arg,
we must advance to the next element now. */
we must advance to the next element now. */
optind
++
;
vlc_
optind
++
;
}
}
else
if
(
optind
==
argc
)
else
if
(
vlc_
optind
==
argc
)
{
{
optopt
=
c
;
vlc_
optopt
=
c
;
if
(
optstring
[
0
]
==
':'
)
if
(
optstring
[
0
]
==
':'
)
c
=
':'
;
c
=
':'
;
else
else
...
@@ -623,7 +623,7 @@ int
...
@@ -623,7 +623,7 @@ int
else
else
/* We already incremented `optind' once;
/* We already incremented `optind' once;
increment it again when taking next ARGV-elt as argument. */
increment it again when taking next ARGV-elt as argument. */
optarg
=
argv
[
optind
++
];
vlc_optarg
=
argv
[
vlc_
optind
++
];
nextchar
=
NULL
;
nextchar
=
NULL
;
}
}
return
c
;
return
c
;
...
...
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