[alt.sources] Diffs for new write

allbery@NCoast.ORG (Brandon S. Allbery) (12/24/89)

As promised (hey, I delivered something on time for a change!), here are the
diffs for the new write(1) for System V.3 and Xenix.  I have tested them under
Xenix 2.3.2.

++Brandon

*** write.c.orig	Sat Dec 23 11:21:20 1989
--- write.c	Sat Dec 23 11:40:08 1989
***************
*** 1,6 ****
  #ifndef lint
  static char rcsid[] =
!     "@(#) $Header: write.c,v 1.24dist 89/12/18 21:04:42 jef Exp $ (LBL)";
  #endif
  /*
   * Copyright (c) 1989 The Regents of the University of California.
--- 1,6 ----
  #ifndef lint
  static char rcsid[] =
!     "@(#) $Header: write.c,v 1.24dist+usg 89/12/23 11:47:42 allbery Exp $ (LBL)";
  #endif
  /*
   * Copyright (c) 1989 The Regents of the University of California.
***************
*** 7,13 ****
   * All rights reserved.
   *
   * This code is derived from software contributed to Berkeley by
!  * Jef Poskanzer and Craig Leres.
   *
   * Redistribution and use in source and binary forms are permitted
   * provided that the above copyright notice and this paragraph are
--- 7,14 ----
   * All rights reserved.
   *
   * This code is derived from software contributed to Berkeley by
!  * Jef Poskanzer and Craig Leres.  Ported to System V by Brandon S.
!  * Allbery.
   *
   * Redistribution and use in source and binary forms are permitted
   * provided that the above copyright notice and this paragraph are
***************
*** 32,51 ****
--- 33,81 ----
  static char sccsid[] = "@(#)write.c	4.20 (Berkeley) 11/25/89";
  #endif /* not lint */
  
+ #ifdef USG
+ #include <sys/types.h>
+ #endif
  #include <sys/param.h>
+ #ifdef USG
+ #include <signal.h>
+ #else
  #include <sys/signal.h>
+ #endif
  #include <sys/stat.h>
+ #ifdef USG
+ #include <fcntl.h>
+ #include <time.h>
+ #else
  #include <sys/file.h>
  #include <sys/time.h>
+ #endif
  #include <utmp.h>
  #include <ctype.h>
  #include <pwd.h>
  #include <stdio.h>
+ #ifdef USG
+ #include <string.h>
+ #include <sys/utsname.h>
+ 
+ #define uid_t unsigned short
+ #ifdef UTMP_NAME
+ #define _PATH_UTMP UTMP_NAME
+ #else
+ #define _PATH_UTMP "/etc/utmp"
+ #endif
+ #define MAXPATHLEN 1024
+ #define MAXHOSTNAMELEN sizeof (((struct utsname *) 0)->nodename)
+ #define index strchr
+ #define rindex strrchr
+ #else
  #include <strings.h>
  
  #ifndef _PATH_UTMP
  #define _PATH_UTMP "/etc/utmp"
  #endif
+ #endif
+ 
  #ifndef UT_LINESIZE
  #define UT_LINESIZE sizeof(((struct utmp *)0)->ut_line)
  #endif
***************
*** 138,143 ****
--- 168,176 ----
  
  	while (read(ufd, (char *) &u, sizeof(u)) == sizeof(u))
  		if (strncmp(user, u.ut_name, sizeof(u.ut_name)) == 0 &&
+ #ifdef USG
+ 		    u.ut_type == USER_PROCESS &&
+ #endif
  		    strncmp(tty, u.ut_line, sizeof(u.ut_line)) == 0) {
  			(void)close(ufd);
  			return(0);
***************
*** 177,182 ****
--- 210,219 ----
  	user_is_me = 0;
  	while (read(ufd, (char *) &u, sizeof(u)) == sizeof(u))
  		if (strncmp(user, u.ut_name, sizeof(u.ut_name)) == 0) {
+ #ifdef USG
+ 			if (u.ut_type != USER_PROCESS)
+ 				continue;
+ #endif
  			++nloggedttys;
  #ifdef sun
  			if (nonuser(u))
***************
*** 255,260 ****
--- 292,300 ----
  	time_t now, time();
  	char *getlogin(), path[MAXPATHLEN], host[MAXHOSTNAMELEN], line[512];
  	void done();
+ #ifdef USG
+ 	struct utsname hostinfo;
+ #endif
  
  	/* Determine our login name before we reopen() stdout */
  	if ((login = getlogin()) == NULL)
***************
*** 273,280 ****
--- 313,325 ----
  	(void)signal(SIGHUP, done);
  
  	/* print greeting */
+ #ifdef USG
+ 	uname(&hostinfo);
+ 	strcpy(host, hostinfo.nodename);
+ #else
  	if (gethostname(host, sizeof(host)) < 0)
  		(void)strcpy(host, "???");
+ #endif
  	now = time((time_t *)NULL);
  	nows = ctime(&now);
  	nows[16] = '\0';
-- 
Brandon S. Allbery    allbery@NCoast.ORG, BALLBERY (MCI Mail), ALLBERY (Delphi)
uunet!hal.cwru.edu!ncoast!allbery ncoast!allbery@hal.cwru.edu bsa@telotech.uucp
*(comp.sources.misc mail to comp-sources-misc[-request]@backbone.site, please)*
*Third party vote-collection service: send mail to allbery@uunet.uu.net (ONLY)*
expnet.all: Experiments in *net management and organization.  Mail me for info.