Xinu7/src/sys/sys/ibput.c

/* ibput.c - ibput */

#include <conf.h>
#include <kernel.h>
#include <io.h>
#include <disk.h>
#include <lfile.h>
#include <dir.h>

/*------------------------------------------------------------------------
 *  ibput  --  write an iblock back to disk given its number
 *------------------------------------------------------------------------
 */
ibput(diskdev, inum, loc)
int	diskdev;
IBADDR	inum;
struct	iblk	*loc;
{
	DBADDR	dba;
	char	*buff;
	char	*to, *from;
	int	i;
	int	ibsem;

	dba = ibtodb(inum);
	buff = getbuf(dskdbp);
	ibsem = ((struct dsblk *)devtab[diskdev].dvioblk)->dibsem;
	wait(ibsem);
	read(diskdev, buff, dba);
	to = buff + ibdisp(inum);
	from = (char *)loc;
	for (i=0 ; i<sizeof(struct iblk) ; i++)
		*to++ = *from++;
	write(diskdev, buff, dba);
	signal(ibsem);
	return(OK);
}