JError JCreatePipe ( int fd[2] ) { jclear_errno(); if (pipe(fd) == 0) { return JNoError(); } const int err = jerrno(); if (err == EFAULT) { return JSegFault(); } else if (err == EMFILE || err == ENFILE) { return JTooManyDescriptorsOpen(); } else { return JUnexpectedError(err); } }
JError JCreatePipe ( int fd[2] ) { jclear_errno(); if (_pipe(fd, 4096, _O_BINARY) == 0) { return JNoError(); } const int err = jerrno(); if (err == EMFILE || err == ENFILE) { return JTooManyDescriptorsOpen(); } else { return JUnexpectedError(err); } }
JError JFOpen ( const JCharacter* fileName, const JCharacter* mode, FILE** stream ) { jclear_errno(); *stream = fopen(fileName, mode); if (*stream != NULL) { return JNoError(); } const int err = jerrno(); if (err == EINVAL) { return JInvalidOpenMode(fileName); } else if (err == EEXIST) { return JDirEntryAlreadyExists(fileName); } else if (err == EISDIR) { return JIsADirectory(); } else if (err == EACCES || err == ETXTBSY) { return JAccessDenied(fileName); } else if (err == EFAULT) { return JSegFault(); } else if (err == ENAMETOOLONG) { return JNameTooLong(); } else if (err == ENOENT) { return JBadPath(fileName); } else if (err == ENOTDIR) { return JComponentNotDirectory(fileName); } else if (err == EMFILE || err == ENFILE) { return JTooManyDescriptorsOpen(); } else if (err == ENOMEM) { return JNoKernelMemory(); } else if (err == EROFS) { return JFileSystemReadOnly(); } else if (err == ELOOP) { return JPathContainsLoop(fileName); } else if (err == ENOSPC) { return JFileSystemFull(); } else { return JUnexpectedError(err); } }