[svn] Under Windows, if $HOME is not defined, use the directory that

contains the Wget binary instead of hard-coded `C:\'.
(wgetrc_file_name): Under Windows, look for $HOME/.wgetrc then, if
not found, look for wget.ini in the directory of the Wget binary.

Submitted by David Fritz.
This commit is contained in:
hniksic 2004-02-17 07:37:31 -08:00
parent 94eccf9739
commit f7193075df
3 changed files with 43 additions and 32 deletions

View File

@ -1,3 +1,14 @@
2004-02-16 David Fritz <zeroxdf@att.net>
* init.c (home_dir): Use aprintf() instead of xmalloc()/sprintf().
Under Windows, if $HOME is not defined, use the directory that
contains the Wget binary instead of hard-coded `C:\'.
(wgetrc_file_name): Under Windows, look for $HOME/.wgetrc then, if
not found, look for wget.ini in the directory of the Wget binary.
* mswindows.c (ws_mypath): Employ slightly more robust methodology.
Strip trailing path separator.
2004-02-06 Hrvoje Niksic <hniksic@xemacs.org>
* http.c (gethttp): Respect --ignore-length.

View File

@ -1,5 +1,5 @@
/* Reading/parsing the initialization file.
Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2003
Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2003, 2004
Free Software Foundation, Inc.
This file is part of GNU Wget.
@ -314,9 +314,9 @@ home_dir (void)
return NULL;
home = pwd->pw_dir;
#else /* WINDOWS */
home = "C:\\";
/* #### Maybe I should grab home_dir from registry, but the best
that I could get from there is user's Start menu. It sucks! */
/* Under Windows, if $HOME isn't defined, use the directory where
`wget.exe' resides. */
home = ws_mypath ();
#endif /* WINDOWS */
}
@ -347,27 +347,24 @@ wgetrc_file_name (void)
return xstrdup (env);
}
#ifndef WINDOWS
/* If that failed, try $HOME/.wgetrc. */
home = home_dir ();
if (home)
{
file = (char *)xmalloc (strlen (home) + 1 + strlen (".wgetrc") + 1);
sprintf (file, "%s/.wgetrc", home);
}
file = aprintf ("%s/.wgetrc", home);
xfree_null (home);
#else /* WINDOWS */
/* Under Windows, "home" is (for the purposes of this function) the
directory where `wget.exe' resides, and `wget.ini' will be used
as file name. SYSTEM_WGETRC should not be defined under WINDOWS.
It is not as trivial as I assumed, because on 95 argv[0] is full
path, but on NT you get what you typed in command line. --dbudor */
home = ws_mypath ();
if (home)
#ifdef WINDOWS
/* Under Windows, if we still haven't found .wgetrc, look for the file
`wget.ini' in the directory where `wget.exe' resides; we do this for
backward compatibility with previous versions of Wget.
SYSTEM_WGETRC should not be defined under WINDOWS. */
if (!file || !file_exists_p (file))
{
file = (char *)xmalloc (strlen (home) + strlen ("wget.ini") + 1);
sprintf (file, "%swget.ini", home);
xfree_null (file);
file = NULL;
home = ws_mypath ();
if (home)
file = aprintf ("%s/wget.ini", home);
}
#endif /* WINDOWS */

View File

@ -1,5 +1,5 @@
/* mswindows.c -- Windows-specific support
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1995, 1996, 1997, 1998, 2004 Free Software Foundation, Inc.
This file is part of GNU Wget.
@ -199,22 +199,25 @@ char *
ws_mypath (void)
{
static char *wspathsave = NULL;
char buffer[MAX_PATH];
char *ptr;
if (wspathsave)
if (!wspathsave)
{
return wspathsave;
char buf[MAX_PATH + 1];
char *p;
DWORD len;
len = GetModuleFileName (GetModuleHandle (NULL), buf, sizeof (buf));
if (!len || (len >= sizeof (buf)))
return NULL;
p = strrchr (buf, PATH_SEPARATOR);
if (!p)
return NULL;
*p = '\0';
wspathsave = xstrdup (buf);
}
if (GetModuleFileName (NULL, buffer, MAX_PATH) &&
(ptr = strrchr (buffer, PATH_SEPARATOR)) != NULL)
{
*(ptr + 1) = '\0';
wspathsave = xstrdup (buffer);
}
else
wspathsave = NULL;
return wspathsave;
}