XINU
Functions
lflseek.c File Reference
#include <xinu.h>
Include dependency graph for lflseek.c:

Go to the source code of this file.

Functions

devcall lflseek (struct dentry *devptr, uint32 offset)
 

Function Documentation

◆ lflseek()

devcall lflseek ( struct dentry devptr,
uint32  offset 
)

Definition at line 9 of file lflseek.c.

References dentry::dvminor, ldentry::ld_size, LF_BLKSIZ, LF_USED, lflcblk::lfbyte, lflcblk::lfdblock, lflcblk::lfdirptr, lfltab, lflcblk::lfmutex, lflcblk::lfpos, lflcblk::lfstate, OK, signal(), SYSERR, and wait().

13 {
14  struct lflcblk *lfptr; /* Ptr to open file table entry */
15 
16  /* If file is not open, return an error */
17 
18  lfptr = &lfltab[devptr->dvminor];
19  wait(lfptr->lfmutex);
20  if (lfptr->lfstate != LF_USED) {
21  signal(lfptr->lfmutex);
22  return SYSERR;
23  }
24 
25  /* Verify offset is within current file size */
26 
27  if (offset > lfptr->lfdirptr->ld_size) {
28  signal(lfptr->lfmutex);
29  return SYSERR;
30  }
31 
32  /* Record new offset and invalidate byte pointer (i.e., force */
33  /* the index and data blocks to be replaced if a successive */
34  /* call is made to read or write) */
35 
36  lfptr->lfpos = offset;
37  lfptr->lfbyte = &lfptr->lfdblock[LF_BLKSIZ];
38 
39  signal(lfptr->lfmutex);
40  return OK;
41 }
char * lfbyte
Definition: lfilesys.h:161
struct ldentry * lfdirptr
Definition: lfilesys.h:147
int32 dvminor
Definition: conf.h:8
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define LF_USED
Definition: lfilesys.h:53
struct lflcblk lfltab[]
Definition: lflinit.c:5
#define OK
処理が成功した場合
Definition: kernel.h:77
sid32 lfmutex
Definition: lfilesys.h:146
#define LF_BLKSIZ
Definition: lfilesys.h:48
byte lfstate
Definition: lfilesys.h:144
uint32 ld_size
Definition: lfilesys.h:98
syscall wait(sid32)
Definition: wait.c:9
syscall signal(sid32)
セマフォにシグナルを送り、待機プロセスがある場合は解除する。
Definition: signal.c:18
uint32 lfpos
Definition: lfilesys.h:150
char lfdblock[LF_BLKSIZ]
Definition: lfilesys.h:159
Here is the call graph for this function: