XINU
lfibput.c
Go to the documentation of this file.
1 /* lfibput.c - lfibput */
2 
3 #include <xinu.h>
4 
5 /*------------------------------------------------------------------------
6  * lfibput - Write an index block to disk given its ID (assumes
7  * mutex is held)
8  *------------------------------------------------------------------------
9  */
11  did32 diskdev, /* ID of disk device */
12  ibid32 inum, /* ID of index block to write */
13  struct lfiblk *ibuff /* Buffer holding the index blk */
14  )
15 {
16  dbid32 diskblock; /* ID of disk sector (block) */
17  char *from, *to; /* Pointers used in copying */
18  int32 i; /* Loop index used during copy */
19  char dbuff[LF_BLKSIZ]; /* Temp. buffer to hold d-block */
20 
21  /* Compute disk block number and offset of index block */
22 
23  diskblock = ib2sect(inum);
24  to = dbuff + ib2disp(inum);
25  from = (char *)ibuff;
26 
27  /* Read disk block */
28 
29  if (read(diskdev, dbuff, diskblock) == SYSERR) {
30  return SYSERR;
31  }
32 
33  /* Copy index block into place */
34 
35  for (i=0 ; i<sizeof(struct lfiblk) ; i++) {
36  *to++ = *from++;
37  }
38 
39  /* Write the block back to disk */
40 
41  write(diskdev, dbuff, diskblock);
42  return OK;
43 }
#define ib2sect(ib)
Definition: lfilesys.h:86
int32 dbid32
データブロックID(ファイルシステムで使用する)
Definition: kernel.h:42
int32 ibid32
ブロックIDのインデックス(ファイルシステムで使用する)
Definition: kernel.h:40
全てのシステムヘッダファイルをインクルードする。
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
syscall read(did32, char *, uint32)
Definition: read.c:9
#define OK
処理が成功した場合
Definition: kernel.h:77
int32 status
ステータスを意味する返り値の型(OK/SYSERR)
Definition: kernel.h:57
syscall write(did32, char *, uint32)
Definition: write.c:9
#define LF_BLKSIZ
Definition: lfilesys.h:48
status lfibput(did32 diskdev, ibid32 inum, struct lfiblk *ibuff)
Definition: lfibput.c:10
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
int32 did32
デバイスID
Definition: kernel.h:28
#define ib2disp(ib)
Definition: lfilesys.h:91