Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
8a37297f
Commit
8a37297f
authored
Mar 11, 2004
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Get rid of the WINEOPTIONS variable and instead use WINEDEBUG to
inherit debug options. Start deprecating the --debugmsg option.
parent
c11d8b00
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
137 deletions
+85
-137
process.c
dlls/kernel/process.c
+7
-7
wine.man.in
documentation/wine.man.in
+55
-51
options.c
misc/options.c
+23
-79
No files found.
dlls/kernel/process.c
View file @
8a37297f
...
@@ -104,9 +104,9 @@ inline static int contains_path( LPCWSTR name )
...
@@ -104,9 +104,9 @@ inline static int contains_path( LPCWSTR name )
*/
*/
inline
static
int
is_special_env_var
(
const
char
*
var
)
inline
static
int
is_special_env_var
(
const
char
*
var
)
{
{
return
(
!
mem
cmp
(
var
,
"PATH="
,
sizeof
(
"PATH="
)
-
1
)
||
return
(
!
strn
cmp
(
var
,
"PATH="
,
sizeof
(
"PATH="
)
-
1
)
||
!
mem
cmp
(
var
,
"TEMP="
,
sizeof
(
"TEMP="
)
-
1
)
||
!
strn
cmp
(
var
,
"TEMP="
,
sizeof
(
"TEMP="
)
-
1
)
||
!
mem
cmp
(
var
,
"TMP="
,
sizeof
(
"TMP="
)
-
1
));
!
strn
cmp
(
var
,
"TMP="
,
sizeof
(
"TMP="
)
-
1
));
}
}
...
@@ -386,7 +386,7 @@ static BOOL build_initial_environment( char **environ )
...
@@ -386,7 +386,7 @@ static BOOL build_initial_environment( char **environ )
char
*
str
=
*
e
;
char
*
str
=
*
e
;
/* skip Unix special variables and use the Wine variants instead */
/* skip Unix special variables and use the Wine variants instead */
if
(
!
mem
cmp
(
str
,
"WINE"
,
4
))
if
(
!
strn
cmp
(
str
,
"WINE"
,
4
))
{
{
if
(
is_special_env_var
(
str
+
4
))
str
+=
4
;
if
(
is_special_env_var
(
str
+
4
))
str
+=
4
;
}
}
...
@@ -731,7 +731,7 @@ static BOOL process_init( char *argv[], char **environ )
...
@@ -731,7 +731,7 @@ static BOOL process_init( char *argv[], char **environ )
if
(
!
build_initial_environment
(
environ
))
return
FALSE
;
if
(
!
build_initial_environment
(
environ
))
return
FALSE
;
/* Parse command line arguments */
/* Parse command line arguments */
OPTIONS_ParseOptions
(
!
info_size
?
argv
:
NULL
);
if
(
!
info_size
)
OPTIONS_ParseOptions
(
argv
);
/* initialise DOS drives */
/* initialise DOS drives */
if
(
!
DRIVE_Init
())
return
FALSE
;
if
(
!
DRIVE_Init
())
return
FALSE
;
...
@@ -1100,8 +1100,8 @@ static char **build_envp( const WCHAR *envW, const WCHAR *extra_envW )
...
@@ -1100,8 +1100,8 @@ static char **build_envp( const WCHAR *envW, const WCHAR *extra_envW )
continue
;
/* skipped */
continue
;
/* skipped */
if
(
is_special_env_var
(
p
))
/* prefix it with "WINE" */
if
(
is_special_env_var
(
p
))
/* prefix it with "WINE" */
*
envptr
++
=
alloc_env_string
(
"WINE"
,
p
);
*
envptr
++
=
alloc_env_string
(
"WINE"
,
p
);
else
if
(
mem
cmp
(
p
,
"HOME="
,
5
)
&&
else
if
(
strn
cmp
(
p
,
"HOME="
,
5
)
&&
mem
cmp
(
p
,
"WINEPREFIX="
,
11
))
*
envptr
++
=
p
;
strn
cmp
(
p
,
"WINEPREFIX="
,
11
))
*
envptr
++
=
p
;
}
}
*
envptr
=
0
;
*
envptr
=
0
;
}
}
...
...
documentation/wine.man.in
View file @
8a37297f
...
@@ -44,46 +44,10 @@ source.
...
@@ -44,46 +44,10 @@ source.
.SH OPTIONS
.SH OPTIONS
.TP
.TP
.I --debugmsg [xxx]#name[,[xxx1]#name1]
.I --debugmsg [xxx]#name[,[xxx1]#name1]
Turn debugging messages on or off.
Turn debugging messages on or off. This option is deprecated, you
.RS +7
should use the
.PP
.I WINEDEBUG
xxx is optional and can be one of the following:
environment variable instead (see below).
.I err,
.I warn,
.I fixme,
or
.I trace.
If xxx is not specified, all debugging messages for the specified
channel are turned on. Each channel will print messages about a particular
component of
.B wine.
# can be either + or - to switch the specified channel on or off
respectively. If there is no
.I xxx
part before it, a leading + can be omitted. Note that spaces are not
allowed anywhere in the string.
.PP
For instance:
.PP
.I --debugmsg warn+all
will turn on all warning messages (recommended for debugging)
.br
.I --debugmsg warn+dll,+heap
will turn on DLL warning messages and all heap messages.
.br
.I --debugmsg fixme-all,warn+cursor,+relay
will turn off all FIXME messages, turn on cursor warning messages, and turn
on all relay messages (API calls).
.br
.I --debugmsg +relay
will turn on all relay messages. For more control on including or excluding
functions and dlls from the relay trace look into the [Debug] section
of the wine configuration file.
.PP
For more information on debugging messages, see the
.I Running Wine
chapter of the Wine User Guide.
.RE
.PD 1
.PD 1
.SH PROGRAM/ARGUMENTS
.SH PROGRAM/ARGUMENTS
The program name may be specified in DOS format (
The program name may be specified in DOS format (
...
@@ -186,7 +150,51 @@ the path and in a few other likely locations.
...
@@ -186,7 +150,51 @@ the path and in a few other likely locations.
.TP
.TP
.I WINEDEBUG
.I WINEDEBUG
Turns debugging messages on or off. The syntax of the variable is
Turns debugging messages on or off. The syntax of the variable is
identical to the syntax of the arguments for the --debugmsg option.
of the form
.RI [ class ][+/-] channel [,[ class2 ][+/-] channel2 ].
.RS +7
.PP
.I class
is optional and can be one of the following:
.B err, warn, fixme,
or
.B trace.
If
.I class
is not specified, all debugging messages for the specified
channel are turned on. Each channel will print messages about a particular
component of
.B wine.
The following character can be either + or - to switch the specified
channel on or off respectively. If there is no
.I class
part before it, a leading + can be omitted. Note that spaces are not
allowed anywhere in the string.
.PP
Examples:
.TP
WINEDEBUG=warn+all
will turn on all warning messages (recommended for debugging).
.br
.TP
WINEDEBUG=warn+dll,+heap
will turn on DLL warning messages and all heap messages.
.br
.TP
WINEDEBUG=fixme-all,warn+cursor,+relay
will turn off all FIXME messages, turn on cursor warning messages, and turn
on all relay messages (API calls).
.br
.TP
WINEDEBUG=relay
will turn on all relay messages. For more control on including or excluding
functions and dlls from the relay trace look into the [Debug] section
of the wine configuration file.
.PP
For more information on debugging messages, see the
.I Running Wine
chapter of the Wine User Guide.
.RE
.TP
.TP
.I WINEDLLPATH
.I WINEDLLPATH
Specifies the path(s) in which to search for builtin dlls and Winelib
Specifies the path(s) in which to search for builtin dlls and Winelib
...
@@ -209,23 +217,23 @@ internal dlls (
...
@@ -209,23 +217,23 @@ internal dlls (
). The type may be abbreviated with the first letter of the type (
). The type may be abbreviated with the first letter of the type (
.I n, b
.I n, b
). Each sequence of orders must be separated by commas.
). Each sequence of orders must be separated by commas.
.br
.RS
.PP
Each dll may have its own specific load order. The load order
Each dll may have its own specific load order. The load order
determines which version of the dll is attempted to be loaded into the
determines which version of the dll is attempted to be loaded into the
address space. If the first fails, then the next is tried and so
address space. If the first fails, then the next is tried and so
on. Multiple libraries with the same load order can be separated with
on. Multiple libraries with the same load order can be separated with
commas. It is also possible to use specify different loadorders for
commas. It is also possible to use specify different loadorders for
different libraries by separating the entries by ";".
different libraries by separating the entries by ";".
.
br
.
PP
The load order for a 16-bit dll is always defined by the load order of
The load order for a 16-bit dll is always defined by the load order of
the 32-bit dll that contains it (which can be identified by looking at
the 32-bit dll that contains it (which can be identified by looking at
the symbolic link of the 16-bit .dll.so file). For instance if
the symbolic link of the 16-bit .dll.so file). For instance if
ole32.dll is configured as builtin, storage.dll will be loaded as
ole32.dll is configured as builtin, storage.dll will be loaded as
builtin too, since the 32-bit ole32.dll contains the 16-bit
builtin too, since the 32-bit ole32.dll contains the 16-bit
storage.dll.
storage.dll.
.
br
.
PP
Examples:
Examples:
.RS
.TP
.TP
WINEDLLOVERRIDES="comdlg32,shell32=n,b"
WINEDLLOVERRIDES="comdlg32,shell32=n,b"
.br
.br
...
@@ -289,12 +297,8 @@ Problems and suggestions with this manpage please also report to
...
@@ -289,12 +297,8 @@ Problems and suggestions with this manpage please also report to
.SH AVAILABILITY
.SH AVAILABILITY
The most recent public version of
The most recent public version of
.B wine
.B wine
can be obtained via FTP from ibiblio.org in the
can be downloaded from
/pub/Linux/ALPHA/Wine/development directory. The releases are in the
.I http://www.winehq.org/download
format 'Wine-yyyymmdd.tar.gz', or 'Wine-yyyymmdd.diff.gz' for the
diff's from the previous release. The same directory holds the
pre-built contents of the documentation in various formats
(wine-doc.xxx.gz).
.PP
.PP
The latest snapshot of the code may be obtained via CVS. For information
The latest snapshot of the code may be obtained via CVS. For information
on how to do this, please see
on how to do this, please see
...
...
misc/options.c
View file @
8a37297f
...
@@ -37,36 +37,23 @@ struct option_descr
...
@@ -37,36 +37,23 @@ struct option_descr
const
char
*
longname
;
const
char
*
longname
;
char
shortname
;
char
shortname
;
int
has_arg
;
int
has_arg
;
int
inherit
;
void
(
*
func
)(
const
char
*
arg
);
void
(
*
func
)(
const
char
*
arg
);
const
char
*
usage
;
const
char
*
usage
;
};
};
static
char
*
inherit_str
;
/* options to pass to child processes */
static
void
DECLSPEC_NORETURN
out_of_memory
(
void
);
static
void
out_of_memory
(
void
)
{
MESSAGE
(
"Virtual memory exhausted
\n
"
);
ExitProcess
(
1
);
}
static
void
do_debugmsg
(
const
char
*
arg
);
static
void
do_debugmsg
(
const
char
*
arg
);
static
void
do_dll
(
const
char
*
arg
);
static
void
do_help
(
const
char
*
arg
);
static
void
do_help
(
const
char
*
arg
);
static
void
do_version
(
const
char
*
arg
);
static
void
do_version
(
const
char
*
arg
);
static
const
struct
option_descr
option_table
[]
=
static
const
struct
option_descr
option_table
[]
=
{
{
{
"debugmsg"
,
0
,
1
,
1
,
do_debugmsg
,
{
"debugmsg"
,
0
,
1
,
do_debugmsg
,
"--debugmsg name Turn debugging-messages on or off"
},
"--debugmsg name Turn debugging-messages on or off"
},
{
"dll"
,
0
,
1
,
1
,
do_dll
,
{
"help"
,
'h'
,
0
,
do_help
,
"--dll name This option is no longer supported"
},
{
"help"
,
'h'
,
0
,
0
,
do_help
,
"--help,-h Show this help message"
},
"--help,-h Show this help message"
},
{
"version"
,
'v'
,
0
,
0
,
do_version
,
{
"version"
,
'v'
,
0
,
do_version
,
"--version,-v Display the Wine version"
},
"--version,-v Display the Wine version"
},
{
NULL
,
0
,
0
,
0
,
NULL
,
NULL
}
/* terminator */
{
NULL
,
0
,
0
,
NULL
,
NULL
}
/* terminator */
};
};
...
@@ -83,6 +70,8 @@ static void do_version( const char *arg )
...
@@ -83,6 +70,8 @@ static void do_version( const char *arg )
static
void
do_debugmsg
(
const
char
*
arg
)
static
void
do_debugmsg
(
const
char
*
arg
)
{
{
char
buffer
[
1024
];
if
(
wine_dbg_parse_options
(
arg
))
if
(
wine_dbg_parse_options
(
arg
))
{
{
MESSAGE
(
"wine: Syntax: --debugmsg [class]+xxx,... or -debugmsg [class]-xxx,...
\n
"
);
MESSAGE
(
"wine: Syntax: --debugmsg [class]+xxx,... or -debugmsg [class]-xxx,...
\n
"
);
...
@@ -91,40 +80,23 @@ static void do_debugmsg( const char *arg )
...
@@ -91,40 +80,23 @@ static void do_debugmsg( const char *arg )
MESSAGE
(
"Available message classes: err, warn, fixme, trace
\n\n
"
);
MESSAGE
(
"Available message classes: err, warn, fixme, trace
\n\n
"
);
ExitProcess
(
1
);
ExitProcess
(
1
);
}
}
}
MESSAGE
(
"Warning: the --debugmsg option is deprecated. You should use
\n
"
);
MESSAGE
(
"the WINEDEBUG environment variable instead, like this:
\n\n
"
);
MESSAGE
(
" WINEDEBUG=%s wine ...
\n\n
"
,
arg
);
static
void
do_dll
(
const
char
*
arg
)
/* append the argument to WINEDEBUG so that it gets inherited */
{
if
(
GetEnvironmentVariableA
(
"WINEDEBUG"
,
buffer
,
sizeof
(
buffer
)
-
1
)
&&
buffer
[
0
])
MESSAGE
(
"The --dll option has been removed, you should use
\n
"
{
"the WINEDLLOVERRIDES environment variable instead.
\n
"
char
*
p
=
buffer
+
strlen
(
buffer
);
"To see a help message, run:
\n
"
*
p
++
=
','
;
" WINEDLLOVERRIDES=help wine <program.exe>
\n
"
);
lstrcpynA
(
p
,
arg
,
buffer
+
sizeof
(
buffer
)
-
p
);
ExitProcess
(
1
);
SetEnvironmentVariableA
(
"WINEDEBUG"
,
buffer
);
}
else
SetEnvironmentVariableA
(
"WINEDEBUG"
,
arg
);
}
}
static
void
remove_options
(
char
*
argv
[],
int
pos
,
int
count
,
int
inheri
t
)
static
inline
void
remove_options
(
char
*
argv
[],
int
pos
,
int
coun
t
)
{
{
if
(
inherit
)
{
int
i
,
len
=
0
;
for
(
i
=
0
;
i
<
count
;
i
++
)
len
+=
strlen
(
argv
[
pos
+
i
])
+
1
;
if
(
inherit_str
)
{
if
(
!
(
inherit_str
=
realloc
(
inherit_str
,
strlen
(
inherit_str
)
+
1
+
len
)))
out_of_memory
();
strcat
(
inherit_str
,
" "
);
}
else
{
if
(
!
(
inherit_str
=
malloc
(
len
)))
out_of_memory
();
inherit_str
[
0
]
=
0
;
}
for
(
i
=
0
;
i
<
count
;
i
++
)
{
strcat
(
inherit_str
,
argv
[
pos
+
i
]
);
if
(
i
<
count
-
1
)
strcat
(
inherit_str
,
" "
);
}
}
while
((
argv
[
pos
]
=
argv
[
pos
+
count
]))
pos
++
;
while
((
argv
[
pos
]
=
argv
[
pos
+
count
]))
pos
++
;
}
}
...
@@ -168,43 +140,22 @@ static void parse_options( char *argv[] )
...
@@ -168,43 +140,22 @@ static void parse_options( char *argv[] )
if
(
equalarg
)
if
(
equalarg
)
{
{
opt
->
func
(
equalarg
);
opt
->
func
(
equalarg
);
remove_options
(
argv
,
i
,
1
,
opt
->
inherit
);
remove_options
(
argv
,
i
,
1
);
}
}
else
if
(
opt
->
has_arg
&&
argv
[
i
+
1
])
else
if
(
opt
->
has_arg
&&
argv
[
i
+
1
])
{
{
opt
->
func
(
argv
[
i
+
1
]
);
opt
->
func
(
argv
[
i
+
1
]
);
remove_options
(
argv
,
i
,
2
,
opt
->
inherit
);
remove_options
(
argv
,
i
,
2
);
}
}
else
else
{
{
opt
->
func
(
""
);
opt
->
func
(
""
);
remove_options
(
argv
,
i
,
1
,
opt
->
inherit
);
remove_options
(
argv
,
i
,
1
);
}
}
i
--
;
i
--
;
}
}
}
}
/* inherit options from WINEOPTIONS variable */
static
void
inherit_options
(
char
*
buffer
)
{
char
*
argv
[
256
];
unsigned
int
n
;
char
*
p
=
strtok
(
buffer
,
"
\t
"
);
for
(
n
=
0
;
n
<
sizeof
(
argv
)
/
sizeof
(
argv
[
0
])
-
1
&&
p
;
n
++
)
{
argv
[
n
]
=
p
;
p
=
strtok
(
NULL
,
"
\t
"
);
}
argv
[
n
]
=
NULL
;
parse_options
(
argv
);
if
(
argv
[
0
])
/* an option remains */
{
MESSAGE
(
"Unknown option '%s' in WINEOPTIONS variable
\n\n
"
,
argv
[
0
]
);
OPTIONS_Usage
();
}
}
/***********************************************************************
/***********************************************************************
* OPTIONS_Usage
* OPTIONS_Usage
*/
*/
...
@@ -224,23 +175,16 @@ void OPTIONS_Usage(void)
...
@@ -224,23 +175,16 @@ void OPTIONS_Usage(void)
*/
*/
void
OPTIONS_ParseOptions
(
char
*
argv
[]
)
void
OPTIONS_ParseOptions
(
char
*
argv
[]
)
{
{
char
buffer
[
1024
];
int
i
;
int
i
;
if
(
GetEnvironmentVariableA
(
"WINEOPTIONS"
,
buffer
,
sizeof
(
buffer
)
)
&&
buffer
[
0
])
inherit_options
(
buffer
);
if
(
!
argv
)
return
;
parse_options
(
argv
+
1
);
parse_options
(
argv
+
1
);
SetEnvironmentVariableA
(
"WINEOPTIONS"
,
inherit_str
);
/* check if any option remains */
/* check if any option remains */
for
(
i
=
1
;
argv
[
i
];
i
++
)
for
(
i
=
1
;
argv
[
i
];
i
++
)
{
{
if
(
!
strcmp
(
argv
[
i
],
"--"
))
if
(
!
strcmp
(
argv
[
i
],
"--"
))
{
{
remove_options
(
argv
,
i
,
1
,
0
);
remove_options
(
argv
,
i
,
1
);
break
;
break
;
}
}
if
(
argv
[
i
][
0
]
==
'-'
)
if
(
argv
[
i
][
0
]
==
'-'
)
...
...
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