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:
parent
5a82f26e50
commit
669250d159
11 changed files with 124 additions and 63 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue