#define DEVICES_TIMER_H #include #include #include #include "stdio.h" #include #include #include #include #include #include "stabs.h" /* ** */ extern StdFileDes **__stdfiledes; extern int __stdfilesize; int dup2(int oldfd, int newfd) { if (oldfd < __stdfilesize) { StdFileDes *old = __stdfiledes[oldfd]; if (old && old->lx_inuse) { int fd; StdFileDes * neu; if (newfd < __stdfilesize) { neu = __stdfiledes[newfd]; if (neu && neu->lx_inuse) close(newfd); } else neu = 0; if (!neu) { StdFileDes ** sfd = __stdfiledes; if (newfd >= __stdfilesize) { if ((sfd = realloc(__stdfiledes, ((unsigned)newfd + 1) * sizeof(int))) == NULL) { errno = ENOMEM; return -1; } __stdfiledes = sfd; for (; __stdfilesize <= newfd; ++__stdfilesize) sfd[__stdfilesize] = 0; } neu = sfd[newfd] = (StdFileDes *) malloc(sizeof(StdFileDes)); if (!neu) { errno = ENOMEM; return -1; } neu->lx_pos = newfd; } fd = neu->lx_pos; *neu = *old; neu->lx_pos = fd; return fd; } } return -1; }