Skip to content

Commit

Permalink
Cygwin: globals: make __progname an alias of program_invocation_short…
Browse files Browse the repository at this point in the history
…_name

On Linux, __progname and program_invocation_short_name are just
different exported names of the same string.  Do the same in Cygwin.
This requires to tweak the mkglobals_h so as not to touch the
EXPORT_ALIAS expression.  Also, use the base variable
program_invocation_short_name throughout.  __progname is just
the export for getopt.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
  • Loading branch information
github-cygwin committed Jan 31, 2024
1 parent bded809 commit b2476bc
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 19 deletions.
18 changes: 9 additions & 9 deletions winsup/cygwin/dcrt0.cc
Original file line number Diff line number Diff line change
Expand Up @@ -924,17 +924,17 @@ dll_crt0_1 (void *)
/* Set up standard fds in file descriptor table. */
cygheap->fdtab.stdio_init ();

/* Set up __progname for getopt error call. */
if (__argv[0] && (__progname = strrchr (__argv[0], '/')))
++__progname;
else
__progname = __argv[0];
/* Set up program_invocation_name and program_invocation_short_name.
__progname is an export alias for program_invocation_short_name. */
program_invocation_name = __argv[0];
program_invocation_short_name = __progname;
if (__progname)
if (__argv[0] && (program_invocation_short_name = strrchr (__argv[0], '/')))
++program_invocation_short_name;
else
program_invocation_short_name = __argv[0];
if (program_invocation_short_name)
{
char *cp = strchr (__progname, '\0') - 4;
if (cp > __progname && ascii_strcasematch (cp, ".exe"))
char *cp = strchr (program_invocation_short_name, '\0') - 4;
if (cp > program_invocation_short_name && ascii_strcasematch (cp, ".exe"))
*cp = '\0';
}
SetThreadName (GetCurrentThreadId (), program_invocation_short_name);
Expand Down
8 changes: 4 additions & 4 deletions winsup/cygwin/fhandler/serial.cc
Original file line number Diff line number Diff line change
Expand Up @@ -268,11 +268,11 @@ fhandler_serial::open (int flags, mode_t mode)
FIXME: This should only be done when explicitly opening the com
port. It should not be reset if an fd is inherited.
Using __progname in this way, to determine how far along in the
initialization we are, is really a terrible kludge and should
be fixed ASAP.
Using program_invocation_short_name in this way, to determine how far
along in the initialization we are, is really a terrible kludge and
should be fixed ASAP.
*/
if (reset_com && __progname)
if (reset_com && program_invocation_short_name)
{
DCB state;
GetCommState (get_handle (), &state);
Expand Down
8 changes: 5 additions & 3 deletions winsup/cygwin/globals.cc
Original file line number Diff line number Diff line change
Expand Up @@ -149,10 +149,10 @@ extern "C" {
#undef _ROU

char **environ;
/* __progname used in getopt error message */
char *__progname;
char *program_invocation_name;
/* __progname used in getopt error message is an alias of
program_invocation_short_name. */
char *program_invocation_short_name;
char *program_invocation_name;
static MTinterface _mtinterf;
struct per_process __cygwin_user_data =
{/* initial_sp */ 0, /* magic_biscuit */ 0,
Expand Down Expand Up @@ -195,3 +195,5 @@ extern "C" {
};

int NO_COPY __api_fatal_exit_val = 1;

EXPORT_ALIAS (program_invocation_short_name, __progname)
1 change: 1 addition & 0 deletions winsup/cygwin/scripts/mkglobals_h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ $_ = join('', <>);
s/\s+\n/\n/sog;
s/\n[^\n]*!globals.h[^\n]*\n/\n/sog;
s%/\*.*?\*/%%sog;
s/EXPORT_ALIAS.*\n//so;
s/(enum\s.*?{.*?})/munge($1)/soge;
s/^(\s*)([a-zA-Z_])/$1extern $2/mog;
s/extern (extern|enum)/$1/sog;
Expand Down
6 changes: 3 additions & 3 deletions winsup/cygwin/strace.cc
Original file line number Diff line number Diff line change
Expand Up @@ -157,13 +157,13 @@ strace::vsprntf (char *buf, const char *func, const char *infmt, va_list ap)
{
PWCHAR pn = NULL;
WCHAR progname[NAME_MAX];
if (cygwin_finished_initializing && __progname)
if (cygwin_finished_initializing && program_invocation_short_name)
{
char *p = strrchr (__progname, '/');
char *p = strrchr (program_invocation_short_name, '/');
if (p)
++p;
else
p = __progname;
p = program_invocation_short_name;
char *pe = strrchr (p, '.');
if (!pe || !ascii_strcasematch (pe, ".exe"))
pe = strrchr (p, '\0');
Expand Down

0 comments on commit b2476bc

Please sign in to comment.