mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Add fcntl(F_PREVFD) and fcntl(F_NEXTFD).
This commit is contained in:
parent
8643c37102
commit
536d7a06f5
4 changed files with 51 additions and 2 deletions
|
@ -1,6 +1,6 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013.
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013, 2014.
|
||||
|
||||
This file is part of Sortix.
|
||||
|
||||
|
@ -219,4 +219,39 @@ int DescriptorTable::GetFlags(int index)
|
|||
return entries[index].flags;
|
||||
}
|
||||
|
||||
int DescriptorTable::Previous(int index)
|
||||
{
|
||||
ScopedLock lock(&dtablelock);
|
||||
|
||||
if ( index < 0 )
|
||||
index = numentries;
|
||||
|
||||
do index--;
|
||||
while ( 0 <= index && !IsGoodEntry(index) );
|
||||
|
||||
if ( index < 0 )
|
||||
return errno = EBADF, -1;
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
int DescriptorTable::Next(int index)
|
||||
{
|
||||
ScopedLock lock(&dtablelock);
|
||||
|
||||
if ( index < 0 )
|
||||
index = -1;
|
||||
|
||||
if ( numentries <= index )
|
||||
return errno = EBADF, -1;
|
||||
|
||||
do index++;
|
||||
while ( index < numentries && !IsGoodEntry(index) );
|
||||
|
||||
if ( numentries <= index )
|
||||
return errno = EBADF, -1;
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
} // namespace Sortix
|
||||
|
|
|
@ -99,6 +99,14 @@ __BEGIN_DECLS
|
|||
#define F_DUPFD_CLOEXEC F_ENCODE_CMD(F_ENCODE(F_DUPFD_NUM, FD_CLOEXEC), F_TYPE_INT)
|
||||
#define F_DUPFD_CLOFORK F_ENCODE_CMD(F_ENCODE(F_DUPFD_NUM, FD_CLOFORK), F_TYPE_INT)
|
||||
|
||||
/* Find the previous file descriptor. */
|
||||
#define F_PREVFD_NUM 5
|
||||
#define F_PREVFD F_ENCODE_CMD(F_PREVFD_NUM, F_TYPE_VOID)
|
||||
|
||||
/* Find the next file descriptor. */
|
||||
#define F_NEXTFD_NUM 6
|
||||
#define F_NEXTFD F_ENCODE_CMD(F_NEXTFD_NUM, F_TYPE_VOID)
|
||||
|
||||
#define AT_FDCWD (-100)
|
||||
#define AT_REMOVEDIR (1<<0)
|
||||
#define AT_EACCESS (1<<1)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013.
|
||||
Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013, 2014.
|
||||
|
||||
This file is part of Sortix.
|
||||
|
||||
|
@ -52,6 +52,8 @@ public:
|
|||
void OnExecute();
|
||||
bool SetFlags(int index, int flags);
|
||||
int GetFlags(int index);
|
||||
int Previous(int index);
|
||||
int Next(int index);
|
||||
|
||||
private:
|
||||
void Reset(); // Hey, reference counted. Don't call this.
|
||||
|
|
|
@ -316,6 +316,10 @@ static int sys_fcntl(int fd, int cmd, uintptr_t arg)
|
|||
{
|
||||
// Operations on the descriptor table.
|
||||
Ref<DescriptorTable> dtable = CurrentProcess()->GetDTable();
|
||||
if ( cmd == F_PREVFD )
|
||||
return dtable->Previous(fd);
|
||||
if ( cmd == F_NEXTFD )
|
||||
return dtable->Next(fd);
|
||||
|
||||
// Operations on the file descriptior.
|
||||
if ( cmd == F_SETFD )
|
||||
|
|
Loading…
Add table
Reference in a new issue