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.
+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.
2004-02-06 Hrvoje Niksic <hniksic@xemacs.org>
* http.c (gethttp): Respect --ignore-length.
/* Reading/parsing the initialization file.
/* 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.
Free Software Foundation, Inc.
This file is part of GNU Wget.
return NULL;
home = pwd->pw_dir;
#else /* WINDOWS */
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 ();
/* If that failed, try $HOME/.wgetrc. */
home = home_dir ();
if (home)
/* 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);
-#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);
/* mswindows.c -- Windows-specific support
/* 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.
This file is part of GNU Wget.
ws_mypath (void)
{
static char *wspathsave = NULL;
ws_mypath (void)
{
static char *wspathsave = NULL;
- char buffer[MAX_PATH];
- char *ptr;
+ char buf[MAX_PATH + 1];
+ char *p;
+ DWORD len;
- if (GetModuleFileName (NULL, buffer, MAX_PATH) &&
- (ptr = strrchr (buffer, PATH_SEPARATOR)) != NULL)
- {
- *(ptr + 1) = '\0';
- wspathsave = xstrdup (buffer);
+ 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);
- else
- wspathsave = NULL;