Various fixes.

B - fixed usage, DISPLAY :0 vs :0.0
	9term - fixed various terminal things
	rc - notice traps in Read
	_p9dir - only run disk code for disks
	dirread - getdirentries on FreeBSD and Linux
		are different w.r.t. meaning of off.
	notify - set up so signals interrupt system calls
	bprint - use bfmt.
This commit is contained in:
rsc 2003-12-03 22:50:48 +00:00
parent 5a82f26e50
commit 669250d159
11 changed files with 124 additions and 63 deletions

View file

@ -10,6 +10,36 @@
#if defined(__FreeBSD__)
#include <sys/disklabel.h>
static int diskdev[] = {
151, /* aacd */
116, /* ad */
157, /* ar */
118, /* afd */
133, /* amrd */
13, /* da */
102, /* fla */
109, /* idad */
95, /* md */
131, /* mlxd */
168, /* pst */
147, /* twed */
43, /* vn */
3, /* wd */
87, /* wfd */
};
static int
isdisk(struct stat *st)
{
int i, dev;
if(!S_ISCHR(st->st_mode))
return 0;
dev = major(st->st_rdev);
for(i=0; i<nelem(diskdev); i++)
if(diskdev[i] == dev)
return 1;
return 0;
}
#define _HAVEDISKLABEL
#endif
@ -108,7 +138,7 @@ _p9dir(struct stat *st, char *name, Dir *d, char **str, char *estr)
/* fetch real size for disks */
#ifdef _HAVEDISKLABEL
if(S_ISCHR(st->st_mode)){
if(isdisk(st)){
int fd, n;
struct disklabel lab;

View file

@ -10,7 +10,6 @@ extern int _p9dir(struct stat*, char*, Dir*, char**, char*);
static int
mygetdents(int fd, struct dirent *buf, int n)
{
ssize_t nn;
off_t off;
off = p9seek(fd, 0, 1);
@ -23,14 +22,8 @@ mygetdents(int fd, struct dirent *buf, int n)
static int
mygetdents(int fd, struct dirent *buf, int n)
{
ssize_t nn;
long off;
off = p9seek(fd, 0, 1);
nn = getdirentries(fd, (void*)buf, n, &off);
if(nn > 0)
p9seek(fd, off, 0);
return nn;
return getdirentries(fd, (void*)buf, n, &off);
}
#elif defined(__sun__)
static int
@ -38,7 +31,7 @@ mygetdents(int fd, struct dirent *buf, int n)
{
return getdents(fd, (void*)buf, n);
}
#endif
#endif
static int
countde(char *p, int n)

View file

@ -13,7 +13,7 @@ static int sigs[] = {
SIGQUIT,
SIGILL,
SIGTRAP,
SIGABRT,
/* SIGABRT, */
#ifdef SIGEMT
SIGEMT,
#endif
@ -63,16 +63,17 @@ int
notify(void (*f)(void*, char*))
{
int i;
void (*sf)(int);
struct sigaction sa;
memset(&sa, 0, sizeof sa);
if(f == nil)
sf = SIG_DFL;
sa.sa_handler = SIG_DFL;
else{
notifyf = f;
sf = notifysigf;
sa.sa_handler = notifysigf;
}
for(i=0; i<nelem(sigs); i++)
signal(sigs[i], sf);
sigaction(sigs[i], &sa, 0);
return 0;
}