blob: 60ca3f811d74cf3d774e34d51c30e5a519de6a8f [file] [log] [blame]
Jack Jansen426fa791995-08-07 14:02:12 +00001/*
2** mwfopenrf - Open resource fork as stdio file for CodeWarrior.
3**
4** Jack Jansen, CWI, August 1995.
5*/
6
Jack Jansenb852b741996-02-14 16:00:27 +00007#if defined(__MWERKS__) && !defined(USE_GUSI)
Jack Jansen426fa791995-08-07 14:02:12 +00008#include <stdio.h>
9#include <unix.h>
10#include <errno.h>
11#include "errno_unix.h"
12
13FILE *
14fopenRF(name, mode)
15 char *name;
16 char *mode;
17{
18 int fd;
Jack Jansen426fa791995-08-07 14:02:12 +000019 int modebits = -1;
Jack Jansen9c45a651995-08-14 12:21:50 +000020 int extramodebits = 0;
Jack Jansen426fa791995-08-07 14:02:12 +000021 char *modep;
22
23 for(modep=mode; *modep; modep++) {
24 switch(*modep) {
25 case 'r': modebits = O_RDONLY; break;
26 case 'w': modebits = O_WRONLY; extramodebits |= O_CREAT|O_TRUNC; break;
27 case 'a': modebits = O_RDONLY;
28 extramodebits |= O_CREAT|O_APPEND;
29 extramodebits &= ~O_TRUNC;
30 break;
31 case '+': modebits = O_RDWR;
32 extramodebits &= ~O_TRUNC;
33 break;
34 case 'b': extramodebits |= O_BINARY;
35 break;
36 default:
37 errno = EINVAL;
38 return NULL;
39 }
40 }
Jack Jansen9c45a651995-08-14 12:21:50 +000041 if ( modebits == -1 ) {
42 errno = EINVAL;
43 return NULL;
44 }
Jack Jansen426fa791995-08-07 14:02:12 +000045 fd = open(name, modebits|extramodebits|O_RSRC);
46 if ( fd < 0 )
47 return NULL;
48 return fdopen(fd, mode);
49}
50#endif /* __MWERKS__ */