Xinu7/src/serve11/sys/putname.c

/* putname.c - putname */

#include <conf.h>
#include <kernel.h>
#include <date.h>
#include <network.h>
#include <serve11.h>


/*------------------------------------------------------------------------
 *  putname  -  look for ipaddr in name table, put it in if it isnt there
 *------------------------------------------------------------------------
 */
putname(ipaddr)
IPaddr ipaddr;
{
	static int machnum = 1;
	int i;
	Bool done;
	char *name;

	if ((name = (char *) getmem(NETNLEN)) == SYSERR) {
		panic("putname: out of memory");
		return(SYSERR);
		}
	for (i=0; i < mntabsize && i < MNTABSIZE; i++) 
		if (blkequ(mnametab[i].ipaddr, ipaddr, IPLEN))
			break;
	if (i == mntabsize && i < MNTABSIZE) {
		sprintf(name, "xinu%d", machnum++);

		/* look to see that this name does not already exist */
		done = FALSE;
		while (!done) {
			for (i=0 ; i<mntabsize ; i++) {
				if (!strcmp(name, mnametab[i].name)) {
					sprintf(name, "xinu%d", machnum++);
					break;
					}
				}
			if (i == mntabsize)
				done = TRUE;
			}

		strcpy(mnametab[mntabsize].name, name);
		blkcopy(mnametab[mntabsize].ipaddr, ipaddr, IPLEN);
		mntabsize++;
		}
	else if (i == mntabsize && i == MNTABSIZE) {
		kprintf("name table full\n");
		}
	freemem(name, NETNLEN);
}