This is uw_rsetopt.c in view mode; [Download] [Up]
/*
* uw library - uw_rsetopt
*
* Copyright 1986 by John D. Bruner. All rights reserved. Permission to
* copy this program is given provided that the copy is not sold and that
* this copyright notice is included.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <sys/uio.h>
#include <sys/file.h>
#include <strings.h>
#include <signal.h>
#include "openpty.h"
#include "uwlib.h"
extern char *malloc();
extern char *getenv();
uw_rsetopt(uwid, optnum, optval)
uwid_t uwid;
uwopt_t optnum;
union uwoptval *optval;
{
register int sd;
register struct uwipc *uwip;
char *portal;
struct iovec iov;
struct msghdr msg;
struct sockaddr_un sa;
/*
* Set a window option on a remote window (that is, one for which
* we do not have a control fd).
*/
/*
* Create a UNIX-domain socket.
*/
if (!(portal=getenv("UW_UIPC"))) {
uwerrno = UWE_NXSERV;
return(-1);
}
if ((sd=socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) {
uwerrno = UWE_ERRNO;
return(-1);
}
sa.sun_family = AF_UNIX;
(void)strncpy(sa.sun_path, portal, sizeof sa.sun_path-1);
sa.sun_path[sizeof sa.sun_path-1] = '\0';
/*
* Construct the datagram we will send later.
*/
uwip = (struct uwipc *)malloc(sizeof(struct uwipc));
if (uwip == (struct uwipc *)0) {
uwerrno = UWE_NOMEM;
return(-1);
}
uwip->uwip_cmd = UWC_OPTION;
uwip->uwip_len = sizeof(struct uwipc);
uwip->uwip_option.uwop_id = uwid;
uwip->uwip_option.uwop_cmd = UWOC_SET;
uwip->uwip_option.uwop_opt = optnum;
uwip->uwip_option.uwop_val = *optval;
/*
* Pass the file descriptor to the window server.
*/
iov.iov_base = (char *)uwip;
iov.iov_len = uwip->uwip_len;
msg.msg_name = (caddr_t)&sa;
msg.msg_namelen = sizeof sa.sun_family + strlen(sa.sun_path);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_accrights = (caddr_t)0;
msg.msg_accrightslen = 0;
if (sendmsg(sd, &msg, 0) < 0) {
free((char *)uwip);
uwerrno = UWE_ERRNO;
return(-1);
}
free((char *)uwip);
uwerrno = UWE_NONE;
return(0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.