plan 9 kernel history: overview | file list | diff list

2000/1021/boot/aux.c (diff list | history)

boot/aux.c on 1992/0317
1992/0317    
#include <u.h> 
#include <libc.h> 
#include <../boot/boot.h> 
 
int 
plumb(char *dir, char *dest, int *efd, char *here) 
{ 
	char buf[128]; 
	char name[128]; 
	int n; 
 
	sprint(name, "%s/clone", dir); 
	efd[0] = open(name, ORDWR); 
	if(efd[0] < 0) 
		return -1; 
	n = read(efd[0], buf, sizeof(buf)-1); 
	if(n < 0){ 
		close(efd[0]); 
		return -1; 
	} 
	buf[n] = 0; 
	sprint(name, "%s/%s/data", dir, buf); 
	if(here){ 
		sprint(buf, "announce %s", here); 
		if(sendmsg(efd[0], buf) < 0){ 
			close(efd[0]); 
			return -1; 
		} 
	} 
	sprint(buf, "connect %s", dest); 
	if(sendmsg(efd[0], buf) < 0){ 
		close(efd[0]); 
		return -1; 
	} 
	efd[1] = open(name, ORDWR); 
	if(efd[1] < 0){ 
		close(efd[0]); 
		return -1; 
	} 
	return efd[1]; 
} 
 
int 
sendmsg(int fd, char *msg) 
{ 
	int n; 
 
	n = strlen(msg); 
	if(write(fd, msg, n) != n) 
		return -1; 
	return 0; 
} 
 
void 
warning(char *s) 
{ 
2000/1021    
	fprint(2, "boot: %s: %r\n", s); 
1992/0317    
} 
 
void 
fatal(char *s) 
{ 
2000/1021    
	fprint(2, "boot fatal: %s: %r\n", s); 
1992/0317    
	exits(0); 
} 
 
int 
1992/0610    
readfile(char *name, char *buf, int len) 
1992/0317    
{ 
	int f, n; 
 
	buf[0] = 0; 
1992/0610    
	f = open(name, OREAD); 
1992/0317    
	if(f < 0) 
		return -1; 
	n = read(f, buf, len-1); 
	if(n >= 0) 
		buf[n] = 0; 
	close(f); 
	return 0; 
} 
 
1993/0330    
int 
writefile(char *name, char *buf, int len) 
{ 
	int f, n; 
 
	f = open(name, OWRITE); 
	if(f < 0) 
		return -1; 
	n = write(f, buf, len); 
	close(f); 
	return (n != len) ? -1 : 0; 
} 
 
1992/0317    
void 
setenv(char *name, char *val) 
{ 
	int f; 
	char ename[2*NAMELEN]; 
 
	sprint(ename, "#e/%s", name); 
	f = create(ename, 1, 0666); 
	if(f < 0) 
		return; 
	write(f, val, strlen(val)); 
	close(f); 
} 
 
void 
srvcreate(char *name, int fd) 
{ 
	char *srvname; 
	int f; 
1992/0318    
	char buf[2*NAMELEN]; 
1992/0317    
 
	srvname = strrchr(name, '/'); 
	if(srvname) 
		srvname++; 
	else 
		srvname = name; 
 
	sprint(buf, "#s/%s", srvname); 
	f = create(buf, 1, 0666); 
	if(f < 0) 
		fatal(buf); 
	sprint(buf, "%d", fd); 
	if(write(f, buf, strlen(buf)) != strlen(buf)) 
		fatal("write"); 
	close(f); 
} 
 
1993/0901    
static int 
catchint(void *a, char *note) 
{ 
	USED(a); 
	if(strcmp(note, "alarm") == 0) 
		return 1; 
	return 0; 
} 
 
1992/0317    
int 
outin(char *prompt, char *def, int len) 
{ 
	int n; 
	char buf[256]; 
 
1993/0901    
	atnotify(catchint, 1); 
1992/0617    
	if(cpuflag) 
1993/0901    
		alarm(15*1000); 
1992/0317    
	do{ 
		print("%s[%s]: ", prompt, *def ? def : "no default"); 
		n = read(0, buf, len); 
1993/0901    
		if(cpuflag) 
			alarm(15*1000); 
1992/0317    
	}while(n==0); 
1992/0617    
	if(cpuflag) 
		alarm(0); 
1993/0901    
	atnotify(catchint, 0); 
1992/0317    
	if(n < 0) 
1993/0901    
		return 1; 
1992/0317    
	if(n != 1){ 
		buf[n-1] = 0; 
		strcpy(def, buf); 
	} 
	return n; 
} 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)