📄 main.c
字号:
/* *---------------------------------------------------------------------- * T-Kernel / Standard Extension * * Copyright (C) 2006 by Ken Sakamura. All rights reserved. * T-Kernel / Standard Extension is distributed * under the T-License for T-Kernel / Standard Extension. *---------------------------------------------------------------------- * * Version: 1.00.00 * Released by T-Engine Forum(http://www.t-engine.org) at 2006/8/11. * *---------------------------------------------------------------------- *//* * @(#)main.c (seio) * * Standard input-output * Main */#include <sys/pinfo.h>#include "sfmgr.h"LOCAL ER PacketCall( CmdPkt *pkt );LOCAL WER SyscallEntry( VP para, W fn );LOCAL ER uu_chdir( UXINFO *uxinfo );LOCAL ER uu_close( UXINFO *uxinfo, W fildes );LOCAL void StartupFn( ID resid, ID pid );LOCAL void CleanupFn( ID resid, ID pid );LOCAL ER init_sf_enc( void );LOCAL ER initialize( void );LOCAL ER finish( void );#define TSD_PTC_LPA_2 2#define TSD_PTC_VAL_M1 (-1)#define TSD_INS_VAL_20 20#define TSD_INS_VAL_100 100#define TSD_INS_VAL_500 500/* * Call packet format */LOCAL ER PacketCall( CmdPkt *pkt ){ ER err; switch ( pkt->cmd.fno.w ) { case SF_ATTACH_FN: { err = CallFileIO_attach(pkt); break; } case SF_DETACH_FN: { err = CallFileIO_detach(pkt); break; } case SF_OPEN_FN: { SF_OPEN_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_CLOSE_FN: { SF_CLOSE_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fildes, pkt); break; } case SF_LSEEK_FN: { SF_LSEEK_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fildes, pkt); break; } case SF_READ_FN: { SF_READ_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fildes, pkt); break; } case SF_WRITE_FN: { SF_WRITE_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fildes, pkt); break; } case SF_GETDENTS_FN: { SF_GETDENTS_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fildes, pkt); break; } case SF_DUP_FN: { SF_DUP_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->oldd, pkt); break; } case SF_DUP2_FN: { SF_DUP2_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->oldd, pkt); break; } case SF_SYNC_FN: { err = CallFileIO(TSD_PTC_VAL_M1, pkt); break; } case SF_FSYNC_FN: { SF_FSYNC_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fd, pkt); break; } case SF_RENAME_FN: { SF_RENAME_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara[TSD_PTC_LPA_2]; /* Packet configuration for path name analysis */ lpara[0].fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis (from) */ lpkt.cmd.para = &lpara[0]; err = CallFileIO_lookup(p->from, &lpkt); if ( err < E_OK ) { break; } /* Path name analysis (to) */ lpara[1].fs = lpara[0].fs; lpkt.cmd.para = &lpara[1]; err = CallFileIO_lookup(p->to, &lpkt); if ( err < E_OK ) { break; } pkt->exinf = lpara; err = CallFileIO_path(pkt); break; } case SF_UNLINK_FN: { SF_UNLINK_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_CHDIR_FN: { SF_CHDIR_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO(TSD_PTC_VAL_M1, pkt); } break; } case SF_FCHDIR_FN: { SF_FCHDIR_PARA *p = pkt->cmd.para; err = CallFileIO(p->fd, pkt); break; } case SF_CHMOD_FN: { SF_CHMOD_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_FCHMOD_FN: { SF_FCHMOD_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fd, pkt); break; } case SF_MKDIR_FN: { SF_MKDIR_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_RMDIR_FN: { SF_RMDIR_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_CREAT_FN: { SF_CREAT_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_UTIMES_FN: { SF_UTIMES_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_UMASK_FN: { err = CallFileIO(TSD_PTC_VAL_M1, pkt); break; } case SF_TRUNCATE_FN: { SF_TRUNCATE_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_FTRUNCATE_FN: { SF_FTRUNCATE_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fildes, pkt); break; } case SF_STAT_FN: { SF_STAT_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_LSTAT_FN: { SF_LSTAT_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); } break; } case SF_FSTAT_FN: { SF_FSTAT_PARA *p = pkt->cmd.para; err = CallFileIO_fd(p->fd, pkt); break; } case SF_GETFSSTAT_FN: { err = CallFileIO(TSD_PTC_VAL_M1, pkt); break; } case SF_GETLINK_FN: { SF_GETLINK_PARA *p = pkt->cmd.para; CmdPkt lpkt; LOCAL_U_LOOKUP_PARA lpara; /* Packet configuration for path name analysis */ lpara.fs = NULL; lpkt.cmd.tid = pkt->cmd.tid; lpkt.cmd.fno.w = LOCAL_U_LOOKUP_FN; lpkt.cmd.para = &lpara; lpkt.uxinfo = pkt->uxinfo; lpkt.exinf = NULL; /* Path name analysis */ err = CallFileIO_lookup(p->path, &lpkt); if ( err >= E_OK ) { pkt->exinf = &lpara; err = CallFileIO_path(pkt); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -