1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-02 06:03:50 +00:00

Latest version.

Patch adds printing ability, on the fly gzip/gunzip for downloads, etc.
Just save file to |command line.
This commit is contained in:
Alan Eldridge 2003-01-07 01:07:49 +00:00
parent 3c36009a3a
commit 019c84c188
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=72659
6 changed files with 126 additions and 34 deletions

View File

@ -6,18 +6,15 @@
#
PORTNAME= elinks
PORTVERSION= 0.3.2
PORTVERSION= 0.5.p.0
CATEGORIES= www
MASTER_SITES= http://elinks.or.cz/download/
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} ${DISTNAME}${EXTRACT_SUFX}.asc
MAINTAINER= jharris@widomaker.com
DISTNAME= ${PORTNAME}-0.5pre0
MAINTAINER= alane@freebsd.org
GNU_CONFIGURE= yes
CONFIGURE_ARGS+= --program-prefix=e
USE_GMAKE= yes
USE_BZIP2= yes
MAN1= elinks.1
.include "${.CURDIR}/manpages.mk"
.include <bsd.port.mk>

View File

@ -1,2 +1 @@
MD5 (elinks-0.3.2.tar.bz2) = 30e9012d5c9b0c0948f6212537da288c
MD5 (elinks-0.3.2.tar.bz2.asc) = eaeb77ed86bbfa353b6c067c1ad6b39b
MD5 (elinks-0.5pre0.tar.bz2) = b2bea9b6351ade786f499b4d06985fa3

View File

@ -1,14 +0,0 @@
--- kbd.c.orig Thu Jan 11 13:26:36 2001
+++ kbd.c Thu Jan 11 13:28:37 2001
@@ -479,9 +479,9 @@
case 'B': ev.x = KBD_DOWN; break;
case 'C': ev.x = KBD_RIGHT; break;
case 'D': ev.x = KBD_LEFT; break;
- case 'F':
+ case 'F': ev.x = KBD_END; break;
case 'e': ev.x = KBD_END; break;
- case 'H':
+ case 'H': ev.x = KBD_HOME; break;
case 0: ev.x = KBD_HOME; break;
case 'I': ev.x = KBD_PAGE_UP; break;
case 'G': ev.x = KBD_PAGE_DOWN; break;

View File

@ -1,11 +0,0 @@
--- default.c.orig Sun Dec 31 14:26:52 2000
+++ default.c Tue Mar 20 09:32:18 2001
@@ -265,7 +265,7 @@
get_system_name();
links_home = get_home(&first_use);
if (!links_home) {
- fprintf(stderr, "Unable to find or create links config directory. Please check, that you have $HOME variable set correctly and that you have write permission to your home directory.\n\007");
+ fprintf(stderr, "Unable to find or create links config directory. Please check, that you have $HOME variable set correctly and that you have write permission to your home directory.\n");
sleep(3);
return;
}

View File

@ -0,0 +1,119 @@
--- src/document/download.c.orig Mon Dec 16 17:47:54 2002
+++ src/document/download.c Tue Dec 24 14:06:00 2002
@@ -1,4 +1,4 @@
-/* Downloads managment */
+/* session.c -*-mode: c; c-basic-offset: 8-*-
/* $Id: download.c,v 1.61 2002/12/16 22:47:54 zas Exp $ */
#ifdef HAVE_CONFIG_H
@@ -583,6 +583,95 @@
}
}
+int create_process(unsigned char *szfn)
+{
+ int pid, rgfd[ 2 ];
+ unsigned char *command = szfn;
+
+ pipe(rgfd);
+ if ((pid = fork()) < 0) {
+ close(rgfd[ 0 ]);
+ close(rgfd[ 1 ]);
+ return -1;
+ } else if (pid > 0) {
+ /* parent:
+ 1. The write "handle" returned to the caller is
+ the canonical write end of the pipe pair.
+ 2. We close the "read" end since we are not using
+ it and we don't want fd leakage.
+ 3. The first thing the child is going to do is
+ fork and exit, so the process we want to run will
+ belong to init, not us. It's gross, but more
+ portable than becoming a session leader. So we wait.
+ */
+ int status;
+
+ wait(&status);
+ close(rgfd[ 0 ]);
+ return rgfd[ 1 ];
+ } else {
+ /* child:
+ at this point, if something goes wrong,
+ there's really nothing we can do about it;
+ the parent will get a SIGPIPE when it
+ tries to write.
+ */
+ int fdnull = open("/dev/null", O_WRONLY);
+
+ /*
+ fork again, so we are re-parented to init
+ and avoid the whole SIGCHLD issue. if we
+ aren't the chile, we die. We use _exit so
+ we don't flush any output buffers.
+ */
+ if ((pid = fork()) != 0) {
+ _exit(0);
+ }
+
+ /* grandchild:
+ If we got here, we are in the grandchild process,
+ whose parent has died and been reaped. Our parent
+ should be init (the primordial process).
+
+ Before we exec the command, we need to set up
+ stdin, stdout, and stderr.
+ 1. stdin gets a dup2 of the "read" end of the
+ pipe.
+ 2. stdout and stderr get copies of an fd opened
+ to "/dev/null".
+ */
+ dup2(rgfd[ 0 ], 0);
+ dup2(fdnull, 1);
+ dup2(fdnull, 2);
+
+ /*
+ Now we can close everything that is still
+ open, because we've dup'd what we needed.
+ */
+ close(fdnull);
+ close(rgfd[ 0 ]);
+ close(rgfd[ 1 ]);
+
+ /*
+ Let the shell handle the command. We use
+ a hard-coded /bin/sh to avoid someone setting
+ SHELL to an odd value and causing damage.
+
+ Any damage that is done to the user should be
+ self-inflicted, not the result of a maliciously
+ set environment var.
+ */
+ execlp("/bin/sh", "/bin/sh", "-c", command, 0);
+
+ /* failure:
+ If we get here, there's not much to do but die.
+ We use _exit so we don't flush any output buffers.
+ */
+ _exit(1);
+ }
+ /* Trust me, you can't get here. */
+}
+
int
create_download_file(struct terminal *term, unsigned char *fi, int safe, int resume)
@@ -601,6 +690,14 @@
wd = get_cwd();
set_cwd(term->cwd);
+ if (*fi == '|') {
+ /*
+ This will hook any command that saves
+ a file to disk and hijack it to write
+ to the input of a process. Cool, huh?
+ */
+ return create_process(fi + 1);
+ }
if (!get_opt_int("document.download.overwrite") || resume) {
file = expand_tilde(file);

2
www/elinks/manpages.mk Normal file
View File

@ -0,0 +1,2 @@
MAN1+= elinks.1
MAN5+= elinkskeys.5