aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorDai Sato <satodai@w3m.jp>2006-04-07 13:21:11 +0000
committerDai Sato <satodai@w3m.jp>2006-04-07 13:21:11 +0000
commit22d66ca5850bf0190aa48d7f4442484f01fc7d02 (patch)
tree5b96b7e5bd65f08ad23867bc0738a0fef56f35df /main.c
parentapply multiple patches on w3m-dev(-en) ML since Jun 2005 to Jan 2006. (diff)
downloadw3m-22d66ca5850bf0190aa48d7f4442484f01fc7d02.tar.gz
w3m-22d66ca5850bf0190aa48d7f4442484f01fc7d02.zip
rewind to 10 Feb 2006.
Diffstat (limited to 'main.c')
-rw-r--r--main.c378
1 files changed, 26 insertions, 352 deletions
diff --git a/main.c b/main.c
index 3e944fb..fa37951 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.248 2006/04/05 14:18:54 inu Exp $ */
+/* $Id: main.c,v 1.249 2006/04/07 13:21:11 inu Exp $ */
#define MAINPROGRAM
#include "fm.h"
#include <signal.h>
@@ -14,13 +14,6 @@
#include "terms.h"
#include "myctype.h"
#include "regex.h"
-
-#ifdef USE_REMOTE
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <dirent.h>
-#endif
-
#ifdef USE_MOUSE
#ifdef USE_GPM
#include <gpm.h>
@@ -31,12 +24,6 @@ extern int do_getch();
#endif /* defined(USE_GPM) || defined(USE_SYSMOUSE) */
#endif
-#ifdef __MINGW32_VERSION
-#include <winsock.h>
-
-WSADATA WSAData;
-#endif
-
#define DSTR_LEN 256
Hist *LoadHist;
@@ -78,11 +65,7 @@ static char *MarkString = NULL;
static char *SearchString = NULL;
int (*searchRoutine) (Buffer *, char *);
-#ifndef __MINGW32_VERSION
JMP_BUF IntReturn;
-#else
-_JBTYPE IntReturn[_JBLEN];
-#endif /* __MINGW32_VERSION */
static void delBuffer(Buffer *buf);
static void cmd_loadfile(char *path);
@@ -121,19 +104,6 @@ static int searchKeyNum(void);
#define help() fusage(stdout, 0)
#define usage() fusage(stderr, 1)
-#ifdef USE_REMOTE
-static int open_remote(int id);
-static void execute_remote(int sock, char *arg);
-static Str find_sock(int pid);
-static int init_serv(void);
-static int init_remote(char *prefix);
-static void parse_sock_data(void);
-static Str SockName;
-static int SockFd = -1, UseRemote = FALSE, ExecuteRemote = FALSE, RemoteId = -1;
-struct sockaddr_un SockAddr;
-socklen_t SockLength;
-#endif
-
static void
fversion(FILE * f)
{
@@ -164,9 +134,6 @@ fversion(FILE * f)
",sysmouse"
#endif
#endif
-#ifdef USE_REMOTE
- ",remote"
-#endif
#ifdef USE_MENU
",menu"
#endif
@@ -262,11 +229,6 @@ fusage(FILE * f, int err)
#ifdef USE_MOUSE
fprintf(f, " -no-mouse don't use mouse\n");
#endif /* USE_MOUSE */
-#ifdef USE_REMOTE
- fprintf(f, " -enable_remote accept remote operation\n");
- fprintf(f, " -remote command execute command in an already running w3m process\n");
- fprintf(f, " -remote_id pid select a w3m to control with -remote option\n");
-#endif /* USE_MOUSE */
#ifdef USE_COOKIE
fprintf(f,
" -cookie use cookie (-no-cookie: don't use cookie)\n");
@@ -765,33 +727,6 @@ main(int argc, char **argv, char **envp)
else if (!strcmp("-dummy", argv[i])) {
/* do nothing */
}
-#ifdef USE_REMOTE
- else if (!strcmp("-enable_remote", argv[i])) {
- UseRemote = TRUE;
- }
- else if (!strcmp("-remote_id", argv[i])) {
- if (++i >= argc)
- usage();
- RemoteId = atoi(argv[i]);
- }
- else if (!strcmp("-remote", argv[i])) {
- ExecuteRemote = TRUE;
-
- SockFd = open_remote(RemoteId);
- if (SockFd < 0) {
- fprintf(stderr, "Can't find w3m process.\n");
- exit(1);
- }
- while (++i < argc) {
- if ((*argv[i] == '+') || (*argv[i] == '-')) {
- i--;
- break;
- }
- execute_remote(SockFd, argv[i]);
- }
- close(SockFd);
- }
-#endif
else if (!strcmp("-debug", argv[i]))
w3m_debug = TRUE;
else {
@@ -806,34 +741,13 @@ main(int argc, char **argv, char **envp)
}
i++;
}
-#ifdef USE_REMOTE
- if (ExecuteRemote) {
- exit(0);
- }
-#endif
+
#ifdef __WATT32__
if (w3m_debug)
dbug_init();
sock_init();
#endif
-#ifdef __MINGW32_VERSION
- {
- int err;
- WORD wVerReq;
-
- wVerReq = MAKEWORD(1, 1);
-
- err = WSAStartup(wVerReq, &WSAData);
- if (err != 0)
- {
- fprintf(stderr, "Can't find winsock\n");
- return 1;
- }
- _fmode = _O_BINARY;
- }
-#endif
-
FirstTab = NULL;
LastTab = NULL;
nTab = 0;
@@ -1114,13 +1028,6 @@ main(int argc, char **argv, char **envp)
if (line_str) {
_goLine(line_str);
}
-
-#ifdef USE_REMOTE
- if (UseRemote) {
- init_serv();
- }
-#endif
-
for (;;) {
if (add_download_list) {
add_download_list = FALSE;
@@ -1137,6 +1044,7 @@ main(int argc, char **argv, char **envp)
/* event processing */
if (CurrentEvent) {
CurrentKey = -1;
+ CurrentKeyData = NULL;
CurrentCmdData = (char *)CurrentEvent->data;
w3mFuncList[CurrentEvent->cmd].func();
CurrentCmdData = NULL;
@@ -1151,6 +1059,7 @@ main(int argc, char **argv, char **envp)
if (CurrentAlarm->sec == 0) { /* refresh (0sec) */
Currentbuf->event = NULL;
CurrentKey = -1;
+ CurrentKeyData = NULL;
CurrentCmdData = (char *)CurrentAlarm->data;
w3mFuncList[CurrentAlarm->cmd].func();
CurrentCmdData = NULL;
@@ -1189,20 +1098,7 @@ main(int argc, char **argv, char **envp)
} while (sleep_till_anykey(1, 0) <= 0);
}
#endif
-#ifdef USE_REMOTE
- if (UseRemote) {
- int n;
- c = getch_select(SockFd, &n);
- if (n == 1) {
- parse_sock_data();
- continue;
- }
- } else {
- c = getch();
- }
-#else
c = getch();
-#endif
#ifdef SIGWINCH
mySignal(SIGWINCH, resize_hook);
#endif
@@ -1230,240 +1126,10 @@ main(int argc, char **argv, char **envp)
}
prev_key = CurrentKey;
CurrentKey = -1;
+ CurrentKeyData = NULL;
}
}
-#ifdef USE_REMOTE
-#ifndef HAVE_GETPEEREID
-#ifdef HAVE_SO_PEERCRED
-int
-getpeereid(int s, uid_t *euid, gid_t *egid)
-{
- struct ucred cr;
- int cl = sizeof(cr), r;
-
- r = getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cr, &cl);
- if (r)
- return r;
-
- *euid = cr.uid;
- *egid = cr.gid;
- return 0;
-}
-#endif /* HAVE_SO_PEERCRED */
-#endif /* ! HAVE_GETPEEREID */
-
-static int
-open_remote(int id)
-{
-#if defined(HAVE_SO_PEERCRED) || defined(HAVE_GETPEEREID)
- uid_t euid;
- gid_t egid;
-#endif
- Str sock_name = find_sock(id);
-
- if (! sock_name)
- return -1;
-
- if (sizeof(SockAddr.sun_path) <= sock_name->length)
- return -1;
-
- if (init_remote("w3mclis"))
- return -1;
-
- SockAddr.sun_family = AF_UNIX;
- strcpy(SockAddr.sun_path, sock_name->ptr);
- SockLength = sizeof(SockAddr.sun_family) + strlen(SockAddr.sun_path);
-
- if (connect(SockFd, (struct sockaddr *) &SockAddr, SockLength)) {
- close(SockFd);
- unlink(SockName->ptr);
- return -1;
- }
-
-#if defined(HAVE_SO_PEERCRED) || defined(HAVE_GETPEEREID)
- if (getpeereid(SockFd, &euid, &egid) != 0 || euid != getuid()) {
- close(SockFd);
- unlink(SockName->ptr);
- return -1;
- }
-#endif
-
- return SockFd;
-}
-
-static void
-execute_remote(int sock, char *arg)
-{
- write(sock, arg, strlen(arg));
- write(sock, "\n", 1);
-}
-
-static Str
-find_sock(int pid)
-{
- DIR *dot_w3m;
- Str sock_name;
- struct dirent *file = NULL;
- struct stat sbuf;
-
- if (pid > 0) {
- sock_name = Sprintf("w3msock%d", pid);
- } else {
- sock_name = Strnew_charp("w3msock");
- }
-
- dot_w3m = opendir(rc_dir);
- if (! dot_w3m)
- return NULL;
-
- while ((file = readdir(dot_w3m))) {
- if ((pid > 0 && (Strcmp_charp(sock_name, file->d_name) == 0)) ||
- (pid <= 0 && Strncmp_charp(sock_name, file->d_name, sock_name->length) == 0)) {
- sock_name = Sprintf("%s/%s", rc_dir, file->d_name);
- if ((stat(sock_name->ptr, &sbuf) == 0) &&
- (sbuf.st_mode & S_IFSOCK) &&
- !(sbuf.st_mode & (S_IRWXO | S_IRWXG)) &&
- (sbuf.st_uid == getuid()))
- goto SockFound;
- }
- }
- closedir(dot_w3m);
- return NULL;
-
- SockFound:
- closedir(dot_w3m);
- return sock_name;
-}
-
-static int
-init_serv(void)
-{
- if (init_remote("w3msock")) {
- return 1;
- }
-
- if (listen(SockFd, 5)) {
- unlink(SockName->ptr);
- close(SockFd);
- SockFd = -1;
- UseRemote = FALSE;
- return 1;
- }
-
- fcntl(SockFd, F_SETFL, O_NONBLOCK);
- return 0;
-}
-
-
-static int
-init_remote(char *prefix)
-{
- SockName = Sprintf("%s/%s%d", rc_dir, prefix, CurrentPid);
- if (sizeof(SockAddr.sun_path) <= SockName->length)
- goto SockErr;
-
- SockAddr.sun_family = AF_UNIX;
- strcpy(SockAddr.sun_path, SockName->ptr);
- SockLength = sizeof(SockAddr.sun_family) + strlen(SockAddr.sun_path);
-
- if ((SockFd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
- goto SockErr;
-
- unlink(SockName->ptr);
- if (bind(SockFd, (struct sockaddr *) &SockAddr, SockLength))
- goto SockErr;
-
- chmod(SockName->ptr, S_IRUSR | S_IWUSR);
- return 0;
-
- SockErr:
- unlink(SockName->ptr);
- if (SockFd >= 0) {
- close(SockFd);
- }
- SockFd = -1;
- UseRemote = FALSE;
- return 1;
-}
-
-static void
-parse_sock_data(void)
-{
- Str data = NULL;
- char buf[64];
- char *p, *q, *s;
- int l, f, conn;
- struct sockaddr_un sock_addr = SockAddr;
- socklen_t sock_length = SockLength;
-#if defined(HAVE_SO_PEERCRED) || defined(HAVE_GETPEEREID)
- uid_t euid;
- gid_t egid;
-#else
- struct stat sbuf;
- time_t staletime;
-#endif
-
- if (!UseRemote || SockFd < 0) {
- return;
- }
-
- if (!data)
- data = Strnew();
-
- conn = accept(SockFd, (struct sockaddr *) &sock_addr, &sock_length);
-
- if (conn < 0)
- return;
-
-
- sock_length -= sizeof(sock_addr.sun_family);
- sock_addr.sun_path[sock_length] = '\0';
-#if defined(HAVE_SO_PEERCRED) || defined(HAVE_GETPEEREID)
- if (getpeereid(conn, &euid, &egid) != 0 || euid != getuid()) {
-#else
-#define STALE_LIMIT 60
- staletime = time(NULL) - STALE_LIMIT;
- if ((stat(sock_addr.sun_path, &sbuf) < 0) ||
- !(sbuf.st_mode & S_IFSOCK) ||
- (sbuf.st_mode & (S_IRWXO | S_IRWXG)) ||
- (sbuf.st_uid != getuid()) ||
- (sbuf.st_atime < staletime) ||
- (sbuf.st_ctime < staletime) ||
- (sbuf.st_mtime < staletime)) {
-#endif
- close(conn);
- return;
- }
- unlink(sock_addr.sun_path);
- while ((l = read(conn, buf, sizeof(buf))) > 0) {
- Strcat_charp_n(data, buf, l);
- }
- close(conn);
-
- p = data->ptr;
-
- while ((q = strchr(p, '\n'))) {
- Str funcname = Strnew();
- Str cmd = Strnew_charp_n(p, q - p);
-
- s = cmd->ptr;
- SKIP_BLANKS(s);
- while (*s && !IS_SPACE(*s))
- Strcat_char(funcname, *(s++));
-
- SKIP_BLANKS(s);
- f = getFuncList(funcname->ptr);
- if (f >= 0) {
- Str tmp = Strnew_charp(s);
- Strchop(tmp);
- pushEvent(f, tmp->ptr);
- }
- p = q + 1;
- }
-}
-#endif /* USE_REMOTE */
-
static void
keyPressEventProc(int c)
{
@@ -2242,6 +1908,7 @@ DEFUN(setEnv, SETENV, "Set environment variable")
char *env;
char *var, *value;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
env = searchKeyData();
if (env == NULL || *env == '\0' || strchr(env, '=') == NULL) {
if (env != NULL && *env != '\0')
@@ -2266,6 +1933,7 @@ DEFUN(pipeBuf, PIPE_BUF, "Send rendered document to pipe")
char *cmd, *tmpf;
FILE *f;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
cmd = searchKeyData();
if (cmd == NULL || *cmd == '\0') {
/* FIXME: gettextize? */
@@ -2310,6 +1978,7 @@ DEFUN(pipesh, PIPE_SHELL, "Execute shell command and browse")
Buffer *buf;
char *cmd;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
cmd = searchKeyData();
if (cmd == NULL || *cmd == '\0') {
cmd = inputLineHist("(read shell[pipe])!", "", IN_COMMAND, ShellHist);
@@ -2341,6 +2010,7 @@ DEFUN(readsh, READ_SHELL, "Execute shell command and load")
MySignalHandler(*prevtrap) ();
char *cmd;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
cmd = searchKeyData();
if (cmd == NULL || *cmd == '\0') {
cmd = inputLineHist("(read shell)!", "", IN_COMMAND, ShellHist);
@@ -2375,6 +2045,7 @@ DEFUN(execsh, EXEC_SHELL SHELL, "Execute shell command")
{
char *cmd;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
cmd = searchKeyData();
if (cmd == NULL || *cmd == '\0') {
cmd = inputLineHist("(exec shell)!", "", IN_COMMAND, ShellHist);
@@ -4478,6 +4149,7 @@ DEFUN(setOpt, SET_OPTION, "Set option")
{
char *opt;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
opt = searchKeyData();
if (opt == NULL || *opt == '\0' || strchr(opt, '=') == NULL) {
if (opt != NULL && *opt != '\0') {
@@ -4663,6 +4335,7 @@ DEFUN(ldHist, HISTORY, "View history of URL")
/* download HREF link */
DEFUN(svA, SAVE_LINK, "Save link to file")
{
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
do_download = TRUE;
followA();
do_download = FALSE;
@@ -4671,6 +4344,7 @@ DEFUN(svA, SAVE_LINK, "Save link to file")
/* download IMG link */
DEFUN(svI, SAVE_IMAGE, "Save image to file")
{
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
do_download = TRUE;
followI();
do_download = FALSE;
@@ -4683,6 +4357,7 @@ DEFUN(svBuf, PRINT SAVE_SCREEN, "Save rendered document to file")
FILE *f;
int is_pipe;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
file = searchKeyData();
if (file == NULL || *file == '\0') {
/* FIXME: gettextize? */
@@ -4731,6 +4406,7 @@ DEFUN(svSrc, DOWNLOAD SAVE, "Save document source to file")
if (Currentbuf->sourcefile == NULL)
return;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
PermitSaveToPipe = TRUE;
if (Currentbuf->real_scheme == SCM_LOCAL)
file = conv_from_system(guess_save_name(NULL,
@@ -5267,6 +4943,7 @@ invoke_browser(char *url)
char *browser = NULL;
int bg = 0, len;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
browser = searchKeyData();
if (browser == NULL || *browser == '\0') {
switch (prec_num) {
@@ -5507,6 +5184,7 @@ do_mouse_action(int btn, int x, int y)
mouse_action.cursorX = x;
mouse_action.cursorY = y;
CurrentKey = -1;
+ CurrentKeyData = NULL;
CurrentCmdData = map->data;
(*map->func) ();
CurrentCmdData = NULL;
@@ -5965,10 +5643,13 @@ searchKeyData(void)
{
char *data = NULL;
- if (CurrentCmdData != NULL && *CurrentCmdData != '\0')
+ if (CurrentKeyData != NULL && *CurrentKeyData != '\0')
+ data = CurrentKeyData;
+ else if (CurrentCmdData != NULL && *CurrentCmdData != '\0')
data = CurrentCmdData;
else if (CurrentKey >= 0)
data = getKeyData(CurrentKey);
+ CurrentKeyData = NULL;
CurrentCmdData = NULL;
if (data == NULL || *data == '\0')
return NULL;
@@ -6033,14 +5714,6 @@ w3m_exit(int i)
#ifdef USE_NNTP
disconnectNews();
#endif
-#ifdef USE_REMOTE
- if (UseRemote) {
- unlink(SockName->ptr);
- }
-#endif
-#ifdef __MINGW32_VERSION
- WSACleanup();
-#endif
exit(i);
}
@@ -6049,6 +5722,7 @@ DEFUN(execCmd, COMMAND, "Execute w3m command(s)")
char *data, *p;
int cmd;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
data = searchKeyData();
if (data == NULL || *data == '\0') {
data = inputStrHist("command [; ...]: ", "", TextHist);
@@ -6070,6 +5744,7 @@ DEFUN(execCmd, COMMAND, "Execute w3m command(s)")
break;
p = getQWord(&data);
CurrentKey = -1;
+ CurrentKeyData = NULL;
CurrentCmdData = *p ? p : NULL;
#ifdef USE_MOUSE
if (use_mouse)
@@ -6093,6 +5768,7 @@ SigAlarm(SIGNAL_ARG)
if (CurrentAlarm->sec > 0) {
CurrentKey = -1;
+ CurrentKeyData = NULL;
CurrentCmdData = data = (char *)CurrentAlarm->data;
#ifdef USE_MOUSE
if (use_mouse)
@@ -6130,6 +5806,7 @@ DEFUN(setAlarm, ALARM, "Set alarm")
char *data;
int sec = 0, cmd = -1;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
data = searchKeyData();
if (data == NULL || *data == '\0') {
data = inputStrHist("(Alarm)sec command: ", "", TextHist);
@@ -6242,6 +5919,7 @@ DEFUN(defKey, DEFINE_KEY,
{
char *data;
+ CurrentKeyData = NULL; /* not allowed in w3m-control: */
data = searchKeyData();
if (data == NULL || *data == '\0') {
data = inputStrHist("Key definition: ", "", TextHist);
@@ -6760,9 +6438,7 @@ download_action(struct parsed_tagarg *arg)
for (; arg; arg = arg->next) {
if (!strncmp(arg->arg, "stop", 4)) {
pid = (pid_t) atoi(&arg->arg[4]);
-#ifndef __MINGW32_VERSION
kill(pid, SIGKILL);
-#endif
}
else if (!strncmp(arg->arg, "ok", 2))
pid = (pid_t) atoi(&arg->arg[2]);
@@ -6796,9 +6472,7 @@ stopDownload(void)
for (d = FirstDL; d != NULL; d = d->next) {
if (d->ok)
continue;
-#ifndef __MINGW32_VERSION
kill(d->pid, SIGKILL);
-#endif
unlink(d->lock);
}
}