From: hniksic Date: Tue, 17 Feb 2004 15:37:31 +0000 (-0800) Subject: [svn] Under Windows, if $HOME is not defined, use the directory that X-Git-Tag: v1.13~1314 X-Git-Url: http://sjero.net/git/?p=wget;a=commitdiff_plain;h=f7193075df06d34ea21819c1842eaf0048cba8c5 [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. --- diff --git a/src/ChangeLog b/src/ChangeLog index 03858dc8..4c1c6aa5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2004-02-16 David Fritz + + * 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 * http.c (gethttp): Respect --ignore-length. diff --git a/src/init.c b/src/init.c index baafc09c..1096de02 100644 --- a/src/init.c +++ b/src/init.c @@ -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 */ diff --git a/src/mswindows.c b/src/mswindows.c index 36aef00f..424bb7eb 100644 --- a/src/mswindows.c +++ b/src/mswindows.c @@ -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; }