#ifdef REENTRANT_SYSCALLS_PROVIDED //--------------------------------------------------------------------------------- int _DEFUN (_open_r, (r, file, flags, mode), struct _reent * r _AND const char *file _AND int flags _AND int mode) { //--------------------------------------------------------------------------------- #else //--------------------------------------------------------------------------------- int _DEFUN (_open, (file, flags, mode), const char *file _AND int flags _AND int mode) { //--------------------------------------------------------------------------------- struct _reent *r = _REENT; #endif __handle *handle; int dev,fd; dev = FindDevice(file); fd = -1; handle = (__handle *)-1; if(dev!=-1 && devoptab_list[dev]->open_r) { handle = (__handle *)malloc( sizeof(__handle) + devoptab_list[dev]->structSize ); if ( NULL != handle ) { handle->device = dev; handle->fileStruct = ((void *)handle) + sizeof(__handle); fd = devoptab_list[dev]->open_r(r, handle->fileStruct, file, flags, mode); if ( fd == -1 ) { free(handle); handle = (__handle *)-1; } } else { r->_errno = ENOSR; handle = (__handle *)-1; } } else { r->_errno = ENOSYS; } return (int)handle; }