⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 T-kernel 的extension源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *---------------------------------------------------------------------- *    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 + -