- /* FIXME: THIS IS NOT TO BE USED OUT-OF-THE-BOX.
- It is a proof-of-concept implementation. E.g. a stream may only be fully
- buffered IF IT CAN BE DETERMINED NOT TO REFER TO AN INTERACTIVE DEVICE.
- This logic is not represented here, as this is the EXAMPLE platform, and
- actual platform overlays may differ widely. Another point is the value
- for permissions being hardcoded to 0664 for file creations.
- */
- int osmode;
- switch ( mode & ~_PDCLIB_FBIN )
- {
- case _PDCLIB_FREAD: /* "r" */
- osmode = O_RDONLY;
- break;
- case _PDCLIB_FWRITE: /* "w" */
- osmode = O_WRONLY | O_CREAT | O_TRUNC;
- break;
- case _PDCLIB_FAPPEND: /* "a" */
- osmode = O_APPEND | O_CREAT;
- break;
- case _PDCLIB_FREAD | _PDCLIB_FRW: /* "r+" */
- osmode = O_RDWR;
- break;
- case _PDCLIB_FWRITE | _PDCLIB_FRW: /* "w+" */
- osmode = O_RDWR | O_CREAT | O_TRUNC;
- break;
- case _PDCLIB_FAPPEND | _PDCLIB_FRW: /* "a+" */
- osmode = O_RDWR | O_APPEND | O_CREAT;
- break;
- default: /* Invalid mode */
- return -1;
- }
- if ( osmode & O_CREAT )
- {
- return open( filename, osmode, S_IRUSR | S_IWUSR );
- }
- else
- {
- return open( filename, osmode );
- }