]> 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.
 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.
 /* 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.
@@ -314,9 +314,9 @@ home_dir (void)
        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 ();
 #endif /* WINDOWS */
     }
 
 #endif /* WINDOWS */
     }
 
@@ -347,27 +347,24 @@ wgetrc_file_name (void)
       return xstrdup (env);
     }
 
       return xstrdup (env);
     }
 
-#ifndef WINDOWS
   /* 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);
   xfree_null (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 */
 
     }
 #endif /* WINDOWS */
 
index 36aef00f8317fb33b12554f65bcf58ecfcb82d63..424bb7eb0eaa4435774c8c430365b2bc6bff7183 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
@@ -199,22 +199,25 @@ char *
 ws_mypath (void)
 {
   static char *wspathsave = NULL;
 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;
 }
 
   return wspathsave;
 }