/***********************************************************************1* *2* This software is part of the ast package *3* Copyright (c) 1989-2011 AT&T Intellectual Property *4* and is licensed under the *5* Eclipse Public License, Version 1.0 *6* by AT&T Intellectual Property *7* *8* A copy of the License is available at *9* http://www.eclipse.org/org/documents/epl-v10.html *10* (with md5 checksum b35adb5213ca9657e911e9befb180842) *11* *12* Information and Software Systems Research *13* AT&T Research *14* Florham Park NJ *15* *16* Glenn Fowler <[email protected]> *17* David Korn <[email protected]> *18* Eduardo Krell <[email protected]> *19* *20***********************************************************************/21#pragma prototyped2223#include "3d.h"2425#ifdef fcntl3d2627#include <stdarg.h>2829int30fcntl3d(int fd, int op, ...)31{32register int r;33int n;34void* arg;35va_list ap;3637initialize();38va_start(ap, op);39arg = va_arg(ap, void*);40va_end(ap);41n = (int)integralof(arg);42if (op == F_DUPFD && state.file[n].reserved)43close(n);44r = FCNTL(fd, op, arg);45#if FS46if (r >= 0 && r < elementsof(state.file))47switch (op)48{49case F_DUPFD:50fs3d_dup(fd, r);51break;52case F_SETFD:53if (state.cache)54{55if (!(n & FD_CLOEXEC))56state.file[fd].flags &= ~FILE_CLOEXEC;57else if (!(state.file[fd].flags & FILE_OPEN))58fileinit(fd, NiL, NiL, 1);59else60state.file[fd].flags |= FILE_CLOEXEC;61}62break;63}64#endif65return r;66}6768#else6970NoN(fcntl)7172#endif737475