shithub: riscv

Download patch

ref: 63ae9ed53a04fac853693f8d319a4bbc1f6b5f49
parent: 8cbe3772c45431b962971e45581d831772a85947
author: David du Colombier <0intro@gmail.com>
date: Fri Sep 6 07:54:44 EDT 2019

sys/src/libventi: implement vtreconn and vtredial functions

--- a/sys/include/venti.h
+++ b/sys/include/venti.h
@@ -334,7 +334,9 @@
 };
 
 VtConn*	vtconn(int infd, int outfd);
+int	vtreconn(VtConn*, int, int);
 VtConn*	vtdial(char*);
+int	vtredial(VtConn*, char*);
 void	vtfreeconn(VtConn*);
 int	vtsend(VtConn*, Packet*);
 Packet*	vtrecv(VtConn*);
--- a/sys/man/2/venti-conn
+++ b/sys/man/2/venti-conn
@@ -28,7 +28,13 @@
 VtConn*	vtconn(int infd, int outfd)
 .PP
 .B
+int	vtreconn(VtConn *z, int infd, int outfd)
+.PP
+.B
 VtConn*	vtdial(char *addr)
+.PP
+.B
+int	vtredial(VtConn *z, char *addr)
 .PP
 .B
 int	vtversion(VtConn *z)
--- a/sys/src/libventi/conn.c
+++ b/sys/src/libventi/conn.c
@@ -27,6 +27,28 @@
 	return z;
 }
 
+int
+vtreconn(VtConn *z, int infd, int outfd)
+{
+	NetConnInfo *nci;
+
+	z->state = VtStateAlloc;
+	if(z->infd >= 0)
+		close(z->infd);
+	z->infd = infd;
+	if(z->outfd >= 0)
+		close(z->outfd);
+	z->outfd = outfd;
+	nci = getnetconninfo(nil, infd);
+	if(nci == nil)
+		snprint(z->addr, sizeof z->addr, "/dev/fd/%d", infd);
+	else{
+		strecpy(z->addr, z->addr+sizeof z->addr, nci->raddr);
+		freenetconninfo(nci);
+	}
+	return 0;
+}
+
 void
 vtfreeconn(VtConn *z)
 {
--- a/sys/src/libventi/dial.c
+++ b/sys/src/libventi/dial.c
@@ -23,3 +23,21 @@
 		strecpy(z->addr, z->addr+sizeof z->addr, na);
 	return z;
 }
+
+int
+vtredial(VtConn *z, char *addr)
+{
+	char *na;
+	int fd;
+
+	if(addr == nil)
+		addr = getenv("venti");
+	if(addr == nil)
+		addr = "$venti";
+
+	na = netmkaddr(addr, "tcp", "venti");
+	if((fd = dial(na, nil, nil, nil)) < 0)
+		return fd;
+
+	return vtreconn(z, fd, fd);
+}