/* @(#)us_sst.c	1.5 */
#include "uucp.h"
#ifdef UUSTAT
#include <sys/types.h>
#include "uust.h"
 
/*
 * searches thru L_stat file using "rmtname"
 * as the key.
 * If the entry is found, then modify the system
 * status as indicated in "flag" and return.
 * return:
 *	0	-> success
 *	FAIL	-> failure
 */
us_sst(flag)
short flag;
{
	register FILE *fp;
	register short i;
	static struct us_ssf s = 0;
	long	ftell();
	long	pos;
	char buf[BUFSIZ];
	long time();
	int	mask;
 
	DEBUG(9, " enter us_sst, status is : %.2d\n", flag);
	mask = umask(0);
	for(i=0; i<=15; i++) {
		if (ulockf(LCKLSTAT, 15) != FAIL)
			break;
		sleep(1);
	}
	if (i > 15) {
		DEBUG(3, "ulockf of %s failed\n", LCKLSTAT);
		umask(mask);
		return(FAIL);
	}
	if ((fp = fopen(L_stat, "r+")) == NULL) {
		DEBUG(3, "fopen of %s failed\n", LCKLSTAT);
		rmlock(LCKLSTAT);
		umask(mask);
		return(FAIL);
	}
	umask(mask);
 
	while(fread(&s, sizeof(s), 1, fp) != NULL){
		DEBUG(9, "s.sysname : %6.6s\n", s.sysname);
		if (strncmp(s.sysname, Rmtname, SYSNSIZE) == SAME) {
			pos = ftell(fp);
			fseek(fp,pos - sizeof(s), 0);
			goto out;
		}

	}
 
	strncpy(s.sysname, Rmtname, SYSNSIZE);
out:
	if(flag == US_S_OK)
		s.sucti = time((long *)0);
	s.sti = time((long *)0);
	s.sstat = flag;
	fwrite(&s, sizeof(s), 1, fp);
	fflush(fp);
	fclose(fp);
	rmlock(LCKLSTAT);
	return(0);
}
#endif
