Xinu7/src/cmd/download/OLD/VERYOLD/LSIunlock.c.RAW

/*
 * LSIunlock  --  unlock "my" LSI 11 or a specified LSI 11
 */
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pwd.h>
#include "{Xinu-directory}/include/getlsi.h"

char	*lsidevs[] = {
#include "{Xinu-directory}/include/lsidevs.h"
		"/dev/LSI"};
#define	NDEVS	sizeof(lsidevs)/sizeof(char *)

char	*loginid;
char	tmplock[30];
char	tmpuser[30];
char	convert[30];

main(argc, argv)
int argc;
char *argv[];
{
	int	lsinum, len;
	int	fd;
	char	*getlogin();

        if ( argc <= 1 ) {
		strcpy(tmpuser,TMPNAME);
		if ( (loginid=getlogin()) == NULL)
			loginid = (getpwuid(getuid()))->pw_name;
		strcat(tmpuser,loginid);
		if ( (fd=open(tmpuser,0)) >= 0) {
			if ((len=read(fd,&lsinum,sizeof(int)))==sizeof(int)) {
				if (lsinum>0 && lsinum<NDEVS) {
					release(lsinum);
					unlink(tmpuser);
					exit(0);
				}
			}
		}
		fprintf(stderr, "No LSI on reserve.\n");
		exit(1);
	} else if ( argc > 2 ) {
		fprintf(stderr, "%s: too many arguments\n", argv[0]);
		exit(1);
	} else {
		if (strncmp(argv[1],"-l",2) == 0)
			argv[1] += 2;
		if ( (strlen(argv[1])<=0) || (lsinum=atoi(argv[1]))<0
			|| lsinum>=NDEVS) {
			fprintf(stderr, "%s: Illegal argument\n", argv[0]);
			exit(1);
		}
	}
	release(lsinum);
}

release(lsinum)
int	lsinum;
{
	strcpy(tmplock,TMPNAME);
	sprintf(convert, "%d", lsinum);
	strcat(tmplock,convert);
	if( (unlink(tmplock)) < 0 )
		fprintf(stderr, "Could not release LSI.  Check filemodes.\n");
	else
		fprintf(stderr, "LSI #%d released.\n", lsinum);
}