⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 overrides.c

📁 elinks下lynx是最重要的二个文本浏览器, 在linux下非常实用, elinks也是gentoo安装过程中默认使用的浏览器, 这是elinks源代码
💻 C
字号:
/* BeOS system-specific routines emulating POSIX. *//* Note that this file is currently unmaintained and basically dead. Noone * cares about BeOS support, apparently. This file may yet survive for some * time, but it will probably be removed if noone will adopt it. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#define BEOS_SELF#include "osdep/system.h"#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <be/kernel/OS.h>#include "elinks.h"#include "osdep/beos/overrides.h"#define SHS	128intbe_read(int s, void *ptr, int len){	if (s >= SHS) return recv(s - SHS, ptr, len, 0);	return read(s, ptr, len);}intbe_write(int s, void *ptr, int len){	if (s >= SHS) return send(s - SHS, ptr, len, 0);	return write(s, ptr, len);}intbe_close(int s){	if (s >= SHS) return closesocket(s - SHS);	return close(s);}intbe_socket(int pf, int sock, int prot){	int h = socket(pf, sock, prot);	if (h < 0) return h;	return h + SHS;}intbe_connect(int s, struct sockaddr *sa, int sal){	return connect(s - SHS, sa, sal);}intbe_getpeername(int s, struct sockaddr *sa, int *sal){	return getpeername(s - SHS, sa, sal);}intbe_getsockname(int s, struct sockaddr *sa, int *sal){	return getsockname(s - SHS, sa, sal);}intbe_listen(int s, int c){	return listen(s - SHS, c);}intbe_accept(int s, struct sockaddr *sa, int *sal){	int a = accept(s - SHS, sa, sal);	if (a < 0) return -1;	return a + SHS;}intbe_bind(int s, struct sockaddr *sa, int sal){#if 0	struct sockaddr_in *sin = (struct sockaddr_in *) sa;	if (!sin->sin_port) {		int i;		for (i = 16384; i < 49152; i++) {			sin->sin_port = i;			if (!be_bind(s, sa, sal)) return 0;		}		return -1;	}#endif	if (bind(s - SHS, sa, sal)) return -1;	getsockname(s - SHS, sa, &sal);	return 0;}#define PIPE_RETRIES	10intbe_pipe(int *fd){	int s1, s2, s3, l;	struct sockaddr_in sa1, sa2;	int retry_count = 0;again:	s1 = be_socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);	if (s1 < 0) {		/*perror("socket1");*/		goto fatal_retry;	}	s2 = be_socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);	if (s2 < 0) {		/*perror("socket2");*/		be_close(s1);		goto fatal_retry;	}	memset(&sa1, 0, sizeof(sa1));	sa1.sin_family = AF_INET;	sa1.sin_port = 0;	sa1.sin_addr.s_addr = INADDR_ANY;	if (be_bind(s1, (struct sockaddr *) &sa1, sizeof(sa1))) {		/*perror("bind");*/clo:		be_close(s1);		be_close(s2);		goto fatal_retry;	}	if (be_listen(s1, 1)) {		/*perror("listen");*/		goto clo;	}	if (be_connect(s2, (struct sockaddr *) &sa1, sizeof(sa1))) {		/*perror("connect");*/		goto clo;	}	l = sizeof(sa2);	if ((s3 = be_accept(s1, (struct sockaddr *) &sa2, &l)) < 0) {		/*perror("accept");*/		goto clo;	}	be_getsockname(s3, (struct sockaddr *) &sa1, &l);	if (sa1.sin_addr.s_addr != sa2.sin_addr.s_addr) {		be_close(s3);		goto clo;	}	be_close(s1);	fd[0] = s2;	fd[1] = s3;	return 0;fatal_retry:	if (++retry_count > PIPE_RETRIES) return -1;	sleep(1);	goto again;}intbe_select(int n, struct fd_set *rd, struct fd_set *wr, struct fd_set *exc,	  struct timeval *tm){	int i, s;	struct fd_set d, rrd;	FD_ZERO(&d);	if (!rd) rd = &d;	if (!wr) wr = &d;	if (!exc) exc = &d;	if (n >= FDSETSIZE) n = FDSETSIZE;	FD_ZERO(exc);	for (i = 0; i < n; i++) if ((i < SHS && FD_ISSET(i, rd)) || FD_ISSET(i, wr)) {		for (i = SHS; i < n; i++) FD_CLR(i, rd);		return INT_MAX;	}	FD_ZERO(&rrd);	for (i = SHS; i < n; i++) if (FD_ISSET(i, rd)) FD_SET(i - SHS, &rrd);	if ((s = select(FD_SETSIZE, &rrd, &d, &d, tm)) < 0) {		FD_ZERO(rd);		return 0;	}	FD_ZERO(rd);	for (i = SHS; i < n; i++) if (FD_ISSET(i - SHS, &rrd)) FD_SET(i, rd);	return s;}#ifndef SO_ERROR#define SO_ERROR	10001#endifintbe_getsockopt(int s, int level, int optname, void *optval, int *optlen){	if (optname == SO_ERROR && *optlen >= sizeof(int)) {		*(int *) optval = 0;		*optlen = sizeof(int);		return 0;	}	return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -