aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog27
-rw-r--r--etc.c56
-rw-r--r--file.c8
-rw-r--r--indep.c35
-rw-r--r--linein.c10
-rw-r--r--local.c15
-rw-r--r--mailcap.c4
-rw-r--r--main.c6
-rw-r--r--rc.c36
-rw-r--r--url.c6
10 files changed, 115 insertions, 88 deletions
diff --git a/ChangeLog b/ChangeLog
index 5c0536e..4f8a794 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,30 @@
2003-01-18 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
+ * [w3m-dev 03647] expandName() and expandPath()
+ * etc.c (openSecretFile): use expandPath
+ (expandName): rewrite
+ (file_to_url): use expandPath
+ * file.c (_doFileCopy): use expandPath
+ (doFileSave): use expandPath
+ * indep.c (expandPath): rewrite
+ * linein.c (inputLineHistSearch): use expandPath
+ (next_dcompl): use expandPath
+ (doComplete): use expandPath
+ * local.c (set_cgi_environ): rewrite
+ * mailcap.c (loadMailcap): use expandPath
+ * main.c (svBuf): use expandPath
+ (addDownloadList): use expandPath
+ * rc.c (init_rc): use expandPath
+ (rcFile): rewrite
+ (auxbinFile): use expandPath
+ (libFile): use expandPath
+ (etcFile): use expandPath
+ (helpFile): use expandPath
+ * url.c (loadMimeTypes): use expandPath
+ (loadURIMethods): use expandPath
+
+2003-01-18 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
+
* [w3m-dev 03646] setup child process, local CGI
* etc.c (reset_signals): static
don't ignore SIGUSR1
@@ -6553,4 +6578,4 @@ a * [w3m-dev 03276] compile error on EWS4800
* release-0-2-1
* import w3m-0.2.1
-$Id: ChangeLog,v 1.686 2003/01/17 16:57:17 ukai Exp $
+$Id: ChangeLog,v 1.687 2003/01/17 17:05:57 ukai Exp $
diff --git a/etc.c b/etc.c
index c48771d..52366c0 100644
--- a/etc.c
+++ b/etc.c
@@ -1,4 +1,4 @@
-/* $Id: etc.c,v 1.50 2003/01/17 16:57:18 ukai Exp $ */
+/* $Id: etc.c,v 1.51 2003/01/17 17:06:00 ukai Exp $ */
#include "fm.h"
#include <pwd.h>
#include "myctype.h"
@@ -1046,10 +1046,13 @@ parsePasswd(FILE * fp, int netrc)
FILE *
openSecretFile(char *fname)
{
+ char *efname;
struct stat st;
+
if (fname == NULL)
return NULL;
- if (stat(expandName(fname), &st) < 0)
+ efname = expandPath(fname);
+ if (stat(efname, &st) < 0)
return NULL;
/* check permissions, if group or others readable or writable,
@@ -1076,7 +1079,7 @@ openSecretFile(char *fname)
return NULL;
}
- return fopen(expandName(fname), "r");
+ return fopen(efname, "r");
}
void
@@ -1429,35 +1432,44 @@ myEditor(char *cmd, char *file, int line)
char *
expandName(char *name)
{
- Str userName = NULL;
char *p;
struct passwd *passent, *getpwnam(const char *);
- Str extpath = Strnew();
+ Str extpath = NULL;
+ if (name == NULL)
+ return NULL;
p = name;
- if (*p == '/' && *(p + 1) == '~' && IS_ALPHA(*(p + 2))) {
- if (personal_document_root != NULL) {
- userName = Strnew();
+ if (*p == '/') {
+ if (*(p + 1) == '~' && IS_ALPHA(*(p + 2)) && personal_document_root) {
+ char *q;
p += 2;
- while (IS_ALNUM(*p) || *p == '_' || *p == '-')
- Strcat_char(userName, *(p++));
- passent = getpwnam(userName->ptr);
- if (passent == NULL) {
- p = name;
- goto rest;
+ q = strchr(p, '/');
+ if (q) { /* /~user/dir... */
+ passent = getpwnam(allocStr(p, q - p));
+ p = q;
+ }
+ else { /* /~user */
+ passent = getpwnam(p);
+ p = "";
}
- Strcat_charp(extpath, passent->pw_dir);
- Strcat_char(extpath, '/');
- Strcat_charp(extpath, personal_document_root);
- if (Strcmp_charp(extpath, "/") == 0 && *p == '/')
+ if (!passent)
+ goto rest;
+ extpath = Strnew_m_charp(passent->pw_dir, "/",
+ personal_document_root, NULL);
+ if (*personal_document_root == '\0' && *p == '/')
p++;
}
+ else
+ goto rest;
+ if (Strcmp_charp(extpath, "/") == 0 && *p == '/')
+ p++;
+ Strcat_charp(extpath, p);
+ return extpath->ptr;
}
else
- p = expandPath(p);
+ return expandPath(p);
rest:
- Strcat_charp(extpath, p);
- return extpath->ptr;
+ return name;
}
char *
@@ -1471,7 +1483,7 @@ file_to_url(char *file)
char *host = NULL;
#endif
- file = expandName(file);
+ file = expandPath(file);
#ifdef SUPPORT_NETBIOS_SHARE
if (file[0] == '/' && file[1] == '/') {
char *p;
diff --git a/file.c b/file.c
index 99f0a1c..1e7b4cf 100644
--- a/file.c
+++ b/file.c
@@ -1,4 +1,4 @@
-/* $Id: file.c,v 1.188 2003/01/17 16:57:19 ukai Exp $ */
+/* $Id: file.c,v 1.189 2003/01/17 17:06:01 ukai Exp $ */
#include "fm.h"
#include <sys/types.h>
#include "myctype.h"
@@ -7454,7 +7454,7 @@ _doFileCopy(char *tmpf, char *defstr, int download)
p = unescape_spaces(Strnew_charp(q))->ptr;
p = conv_to_system(q);
}
- p = expandName(p);
+ p = expandPath(p);
if (checkOverWrite(p) < 0)
return -1;
}
@@ -7511,7 +7511,7 @@ _doFileCopy(char *tmpf, char *defstr, int download)
if (*p == '|' && PermitSaveToPipe)
is_pipe = TRUE;
else {
- p = expandName(p);
+ p = expandPath(p);
if (checkOverWrite(p) < 0)
return -1;
}
@@ -7606,7 +7606,7 @@ doFileSave(URLFile uf, char *defstr)
*(p + 1) = '\0';
if (*q == '\0')
return -1;
- p = expandName(q);
+ p = expandPath(q);
if (checkOverWrite(p) < 0)
return -1;
if (checkSaveFile(uf.stream, p) < 0) {
diff --git a/indep.c b/indep.c
index f28d6be..589ae73 100644
--- a/indep.c
+++ b/indep.c
@@ -1,4 +1,4 @@
-/* $Id: indep.c,v 1.28 2003/01/08 17:24:12 ukai Exp $ */
+/* $Id: indep.c,v 1.29 2003/01/17 17:06:02 ukai Exp $ */
#include "fm.h"
#include <stdio.h>
#include <pwd.h>
@@ -177,10 +177,9 @@ cleanupName(char *name)
char *
expandPath(char *name)
{
- Str userName = NULL;
char *p;
struct passwd *passent, *getpwnam(const char *);
- Str extpath = Strnew();
+ Str extpath = NULL;
if (name == NULL)
return NULL;
@@ -188,25 +187,31 @@ expandPath(char *name)
if (*p == '~') {
p++;
if (IS_ALPHA(*p)) {
- userName = Strnew();
- while (IS_ALNUM(*p) || *p == '_' || *p == '-')
- Strcat_char(userName, *(p++));
- passent = getpwnam(userName->ptr);
- if (passent == NULL) {
- p = name;
- goto rest;
+ char *q = strchr(p, '/');
+ if (q) { /* ~user/dir... */
+ passent = getpwnam(allocStr(p, q - p));
+ p = q;
+ }
+ else { /* ~user */
+ passent = getpwnam(p);
+ p = "";
}
- Strcat_charp(extpath, passent->pw_dir);
+ if (!passent)
+ goto rest;
+ extpath = Strnew_charp(passent->pw_dir);
}
- else {
- Strcat_charp(extpath, getenv("HOME"));
+ else if (*p == '/' || *p == '\0') { /* ~/dir... or ~ */
+ extpath = Strnew_charp(getenv("HOME"));
}
+ else
+ goto rest;
if (Strcmp_charp(extpath, "/") == 0 && *p == '/')
p++;
+ Strcat_charp(extpath, p);
+ return extpath->ptr;
}
rest:
- Strcat_charp(extpath, p);
- return extpath->ptr;
+ return name;
}
#ifndef HAVE_STRCHR
diff --git a/linein.c b/linein.c
index 15e18af..7d1c34d 100644
--- a/linein.c
+++ b/linein.c
@@ -1,4 +1,4 @@
-/* $Id: linein.c,v 1.25 2002/11/15 15:36:48 ukai Exp $ */
+/* $Id: linein.c,v 1.26 2003/01/17 17:06:03 ukai Exp $ */
#include "fm.h"
#include "local.h"
#include "myctype.h"
@@ -309,7 +309,7 @@ inputLineHistSearch(char *prompt, char *def_str, int flag, Hist *hist,
pushHist(hist, p);
}
if (flag & IN_FILENAME)
- return expandName(p);
+ return expandPath(p);
else
return allocStr(p, -1);
}
@@ -853,7 +853,7 @@ next_dcompl(int next)
f = Strdup(d);
Strcat_charp(f, CFileBuf[n]);
addstr(conv_from_system(CFileBuf[n]));
- if (stat(expandName(f->ptr), &st) != -1 && S_ISDIR(st.st_mode))
+ if (stat(expandPath(f->ptr), &st) != -1 && S_ISDIR(st.st_mode))
addstr("/");
}
y++;
@@ -957,7 +957,7 @@ doComplete(Str ifn, int *status, int next)
if (Strlastchar(CompleteBuf) == '/' && CompleteBuf->length > 1) {
Strshrink(CompleteBuf, 1);
}
- if ((d = opendir(expandName(CompleteBuf->ptr))) == NULL) {
+ if ((d = opendir(expandPath(CompleteBuf->ptr))) == NULL) {
CompleteBuf = Strdup(ifn);
*status = CPL_FAIL;
if (cm_mode & CPL_ON)
@@ -1031,7 +1031,7 @@ doComplete(Str ifn, int *status, int next)
else if (strncmp(p, "file:/", 6) == 0 && p[6] != '/')
p = &p[5];
}
- if (stat(expandName(p), &st) != -1 && S_ISDIR(st.st_mode))
+ if (stat(expandPath(p), &st) != -1 && S_ISDIR(st.st_mode))
Strcat_char(CompleteBuf, '/');
}
if (cm_mode & CPL_ON)
diff --git a/local.c b/local.c
index c22ec49..ebd59eb 100644
--- a/local.c
+++ b/local.c
@@ -1,4 +1,4 @@
-/* $Id: local.c,v 1.22 2003/01/17 16:57:20 ukai Exp $ */
+/* $Id: local.c,v 1.23 2003/01/17 17:06:03 ukai Exp $ */
#include "fm.h"
#include <string.h>
#include <stdio.h>
@@ -296,19 +296,22 @@ set_cgi_environ(char *name, char *fn, char *req_uri)
static Str
checkPath(char *fn, char *path)
{
+ char *p;
Str tmp;
struct stat st;
while (*path) {
- tmp = Strnew();
- while (*path && *path != ':')
- Strcat_char(tmp, *path++);
- if (*path == ':')
- path++;
+ p = strchr(path, ':');
+ tmp = Strnew_charp(expandPath(p ? allocStr(path, p - path) : path));
if (Strlastchar(tmp) != '/')
Strcat_char(tmp, '/');
Strcat_charp(tmp, fn);
if (stat(tmp->ptr, &st) == 0)
return tmp;
+ if (!p)
+ break;
+ path = p + 1;
+ while (*path == ':')
+ path++;
}
return NULL;
}
diff --git a/mailcap.c b/mailcap.c
index a3d1287..e26da72 100644
--- a/mailcap.c
+++ b/mailcap.c
@@ -1,4 +1,4 @@
-/* $Id: mailcap.c,v 1.11 2002/12/24 17:20:47 ukai Exp $ */
+/* $Id: mailcap.c,v 1.12 2003/01/17 17:06:04 ukai Exp $ */
#include "fm.h"
#include "myctype.h"
#include <stdio.h>
@@ -187,7 +187,7 @@ loadMailcap(char *filename)
Str tmp;
struct mailcap *mcap;
- f = fopen(expandName(filename), "r");
+ f = fopen(expandPath(filename), "r");
if (f == NULL)
return NULL;
i = 0;
diff --git a/main.c b/main.c
index 83a1198..428d2ae 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.194 2003/01/15 17:13:22 ukai Exp $ */
+/* $Id: main.c,v 1.195 2003/01/17 17:06:04 ukai Exp $ */
#define MAINPROGRAM
#include "fm.h"
#include <signal.h>
@@ -4241,7 +4241,7 @@ svBuf(void)
file = unescape_spaces(Strnew_charp(qfile))->ptr;
file = conv_to_system(file);
}
- file = expandName(file);
+ file = expandPath(file);
if (checkOverWrite(file) < 0) {
displayBuffer(Currentbuf, B_NORMAL);
return;
@@ -6080,7 +6080,7 @@ addDownloadList(pid_t pid, char *url, char *save, char *lock, clen_t size)
d->url = url;
if (save[0] != '/' && save[0] != '~')
save = Strnew_m_charp(CurrentDir, "/", save, NULL)->ptr;
- d->save = expandName(save);
+ d->save = expandPath(save);
d->lock = lock;
d->size = size;
d->time = time(0);
diff --git a/rc.c b/rc.c
index 80370f4..cdb68ff 100644
--- a/rc.c
+++ b/rc.c
@@ -1,4 +1,4 @@
-/* $Id: rc.c,v 1.76 2003/01/17 16:58:17 ukai Exp $ */
+/* $Id: rc.c,v 1.77 2003/01/17 17:06:05 ukai Exp $ */
/*
* Initialization file etc.
*/
@@ -1375,7 +1375,7 @@ init_rc(void)
if (config_file != NULL)
goto open_rc;
- rc_dir = expandName(RC_DIR);
+ rc_dir = expandPath(RC_DIR);
i = strlen(rc_dir);
if (i > 1 && rc_dir[i - 1] == '/')
rc_dir[i - 1] = '\0';
@@ -1580,53 +1580,35 @@ rcFile(char *base)
(base[0] == '.'
&& (base[1] == '/' || (base[1] == '.' && base[2] == '/')))
|| (base[0] == '~' && base[1] == '/')))
- return expandName(base);
- else {
- Str file = Strnew_charp(rc_dir);
-
- if (Strlastchar(file) != '/')
- Strcat_char(file, '/');
- Strcat_charp(file, base);
- return expandName(file->ptr);
- }
+ /* /file, ./file, ../file, ~/file */
+ return expandPath(base);
+ return expandPath(Strnew_m_charp(rc_dir, "/", base, NULL)->ptr);
}
char *
auxbinFile(char *base)
{
- Str file = Strnew_charp(w3m_auxbin_dir());
- Strcat_char(file, '/');
- Strcat_charp(file, base);
- return expandName(file->ptr);
+ return expandPath(Strnew_m_charp(w3m_auxbin_dir(), "/", base, NULL)->ptr);
}
#if 0 /* not used */
char *
libFile(char *base)
{
- Str file = Strnew_charp(w3m_lib_dir());
- Strcat_char(file, '/');
- Strcat_charp(file, base);
- return expandName(file->ptr);
+ return expandPath(Strnew_m_charp(w3m_lib_dir(), "/", base, NULL)->ptr);
}
#endif
char *
etcFile(char *base)
{
- Str file = Strnew_charp(w3m_etc_dir());
- Strcat_char(file, '/');
- Strcat_charp(file, base);
- return expandName(file->ptr);
+ return expandPath(Strnew_m_charp(w3m_etc_dir(), "/", base, NULL)->ptr);
}
#ifndef USE_HELP_CGI
char *
helpFile(char *base)
{
- Str file = Strnew_charp(w3m_help_dir());
- Strcat_char(file, '/');
- Strcat_charp(file, base);
- return expandName(file->ptr);
+ return expandPath(Strnew_m_charp(w3m_help_dir(), "/", base, NULL)->ptr);
}
#endif
diff --git a/url.c b/url.c
index 8026c4b..489c6a0 100644
--- a/url.c
+++ b/url.c
@@ -1,4 +1,4 @@
-/* $Id: url.c,v 1.68 2003/01/11 15:54:09 ukai Exp $ */
+/* $Id: url.c,v 1.69 2003/01/17 17:06:06 ukai Exp $ */
#include "fm.h"
#include <sys/types.h>
#include <sys/socket.h>
@@ -154,7 +154,7 @@ loadMimeTypes(char *filename)
Str tmp;
struct table2 *mtypes;
- f = fopen(expandName(filename), "r");
+ f = fopen(expandPath(filename), "r");
if (f == NULL)
return NULL;
n = 0;
@@ -2103,7 +2103,7 @@ loadURIMethods(char *filename)
struct table2 *um;
char *up, *p;
- f = fopen(expandName(filename), "r");
+ f = fopen(expandPath(filename), "r");
if (f == NULL)
return NULL;
i = 0;