PERFORCE change 166612 for review
    Jonathan Anderson 
    jona at FreeBSD.org
       
    Mon Jul 27 11:33:17 UTC 2009
    
    
  
http://perforce.freebsd.org/chv.cgi?CH=166612
Change 166612 by jona at jona-trustedbsd-belle-vmware on 2009/07/27 11:32:34
	Implemented ua_powerbox()
Affected files ...
.. //depot/projects/trustedbsd/capabilities/src/lib/libuserangel/libuserangel.c#11 edit
Differences ...
==== //depot/projects/trustedbsd/capabilities/src/lib/libuserangel/libuserangel.c#11 (text+ko) ====
@@ -324,6 +324,53 @@
 }
 
 
+int ua_powerbox(struct ua_powerbox_options *options,
+                int fds[], char *names[], int *len)
+{
+	if(angel < 0) angel = ua_find();
+	if(angel < 0) return -1;
+
+	struct ua_datum *data[2];
+	data[0] = ua_marshall_int(UA_POWERBOX);
+	data[1] = ua_marshall_powerbox(options);
+
+	for(int i = 0; i < 2; i++)
+	{
+		if(ua_send(angel, data[i], NULL, 0) < 0) return -1;
+		free(data[i]);
+	}
+
+
+	// retrieve the file descriptor(s)
+	struct ua_datum *fdcountd = ua_recv(angel, NULL, NULL);
+	if(!fdcountd) return -1;
+
+	if(ua_unmarshall_int(fdcountd, len) < 0) return -1;
+
+	uint32_t fdcount = *len;
+	int32_t fdarray[fdcount];
+
+	struct ua_datum *fd_datum = ua_recv(angel, fdarray, &fdcount);
+	if(!fd_datum) return -1;
+	*len = fdcount;
+
+	int buflen = 1024;
+	char buffer[buflen];
+	for(unsigned int i = 0; i < fdcount; i++)
+	{
+		fds[i] = fdarray[i];
+
+		int namelen = buflen;
+		if(ua_unmarshall_string(fd_datum, buffer, &namelen) < 0) return -1;
+
+		names[i] = (char*) malloc(namelen);
+		memcpy(names[i], buffer, namelen);
+	}
+
+	return 0;
+}
+
+
 
 int ua_send(int sock, datum *d, int32_t fds[], int32_t fdlen)
 {
    
    
More information about the p4-projects
mailing list