ftp.nice.ch/pub/next/unix/macintosh/uw.4.2.N.bs.tar.gz#/uw/lib/uw_rsetopt.c

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.