]> sjero.net Git - wget/commitdiff
[svn] Under Windows, if $HOME is not defined, use the directory that
authorhniksic <devnull@localhost>
Tue, 17 Feb 2004 15:37:31 +0000 (07:37 -0800)
committerhniksic <devnull@localhost>
Tue, 17 Feb 2004 15:37:31 +0000 (07:37 -0800)
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.

src/ChangeLog
src/init.c
src/mswindows.c

index 03858dc835d60fdc7f5b6bfdcc7652e94893a559..4c1c6aa580d6ca32a7470efdfcbd568cb82f26d5 100644 (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.
index baafc09c7c68ab3b9ca0b37af746f78edcf54e38..1096de026f9297bbd3d2a361868b860f74da56e7 100644 (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 */
 
index 36aef00f8317fb33b12554f65bcf58ecfcb82d63..424bb7eb0eaa4435774c8c430365b2bc6bff7183 100644 (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;
 
-  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;
+
   return wspathsave;
 }