- if (*mode=='w') {
- f = creat(file, 0666);
- if (rw && f>=0) {
- close(f);
- f = open(file, 2);
- }
- } else if (*mode=='a') {
- if ((f = open(file, rw? 2: 1)) < 0) {
- if (errno == ENOENT) {
- f = creat(file, 0666);
- if (rw && f>=0) {
- close(f);
- f = open(file, 2);
- }
- }
- }
- if (f >= 0)
- lseek(f, 0L, 2);
- } else
- f = open(file, rw? 2: 0);
+ switch (*mode) {
+ case 'a':
+ oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ case 'r':
+ oflags = rw ? O_RDWR : O_RDONLY;
+ break;
+ case 'w':
+ oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ default:
+ return (NULL);
+ }
+
+ f = open(file, oflags, 0666);