📄 dirent.c
字号:
/* dirent.c
*
* (C) Copyright Dec 20 1998, Edmond J. Breen.
* ALL RIGHTS RESERVED.
* This code may be copied for personal, non-profit use only.
*
*/
/* This file is broken into 2 parts
* the first part defines the interface routines
* and the 2nd part adds the interface routine
* to EiC's look up tables.
*/
#ifndef NO_DIRENT
#include <sys/types.h>
#include <dirent.h>
#if 0
#ifdef _LINUX
#include <direntry.h>
#endif
#endif
#include <stdlib.h>
#include "eic.h"
#include "stdliblocal.h"
/* DIRENT.H STUFF
long telldir(DIR *dir);
void seekdir(DIR *dir, long offset);
*/
val_t eic_opendir(void)
{
val_t v;
v.p.sp = v.p.p = opendir(arg(0,getargs(),ptr_t).p);
/*setEp( v.p, sizeof(DIR) );*/
setEp( v.p, 3*sizeof(int) + sizeof(void*));
return v;
}
val_t eic_readdir(void)
{
val_t v;
v.p.sp = v.p.p = readdir(arg(0,getargs(),ptr_t).p);
#if defined(_SOLARIS) || defined (_IRIX)
if(v.p.p) {
setEp( v.p, sizeof(struct dirent) + strlen(((struct dirent*)v.p.p)->d_name) + 1 );
}
#else
setEp( v.p, sizeof(struct dirent) );
#endif
return v;
}
val_t eic_telldir(void)
{
val_t v;
v.lval = telldir(arg(0,getargs(),ptr_t).p);
return v;
}
val_t eic_seekdir(void)
{
val_t v;
seekdir(arg(0,getargs(),ptr_t).p,
arg(1,getargs(),long));
return v;
}
val_t eic_rewinddir(void)
{
val_t v;
rewinddir(arg(0,getargs(),ptr_t).p);
return v;
}
val_t eic_closedir(void)
{
val_t v;
v.ival = closedir(arg(0,getargs(),ptr_t).p);
return v;
}
#endif
/**************************************************/
void module_dirent()
{
#ifndef NO_DIRENT
/* DIRENT.H STUFF */
EiC_add_builtinfunc("opendir",eic_opendir);
EiC_add_builtinfunc("readdir",eic_readdir);
EiC_add_builtinfunc("telldir",eic_telldir);
EiC_add_builtinfunc("seekdir",eic_seekdir);
EiC_add_builtinfunc("rewinddir",eic_rewinddir);
EiC_add_builtinfunc("closedir",eic_closedir);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -