[comp.os.minix] open.c buglet, POSIX compatible open

michl@cernvax.UUCP (michl) (02/11/89)

Subject: open.c buglet, POSIX compatible open (2) (REPOST)

[This got lost the first and second time I tried to post it, seems as if
 there's a black hole between here and cernvax, that's why I'm posting
 from a friends account, mail to my address still works]

In the process of doing the code for non blocking IO for my named pipe
implementation (see previous article), I noticed a buglet in do_open;
it doesn't check the return codes of the block  and character specific
open routines, resulting in the open always succeding even if something
goes wrong.

To  fix  this problem and reduce  the  amount of  duplicate code, I've
merged the code of  do_create (which doesn't have the  above mentioned
bug) and do_open  in to one  routine, this makes the implementation of
the O_CREAT,  O_EXCL, O_TRUNC flags  trivial.   One thing that I'm not
quite  sure about, is where  do store  the flags in   the filp struct,
while it would be more space efficient to store  them in the filp_mode
field,  this would mean that  the conventional values for O_APPEND and
O_NONBLOCK can't be  used (only a  problem if there are programs  that
don't use the defines in fcntl.h).  Currently I think the best  way is
to have a a field flip_flags that contains these values,  this has the
added advantage (at the cost of 128 bytes) that fcntl  (not  done yet)
can return the conventional values for O_RDONLY etc..

Anybody got something to say to this?

[PS: in the mean time I just seen another error in read_write (line
     9857 & 9858, the return code of pipe_check is ignored, it should
     really be used in the return statement]

-- 
----------------------------------------------------------------------------
UUCP:   ...mcvax!cernvax!forty2!poole			Simon Poole
BITNET: K538915@CZHRZU1A
----------------------------------------------------------------------------

michl@cernvax.UUCP (michl) (02/11/89)

In article <930@cernvax.UUCP> michl@cernvax.UUCP () writes:
...
>
>[PS: in the mean time I just seen another error in read_write (line
>     9857 & 9858, the return code of pipe_check is ignored, it should
>     really be used in the return statement]
STUPID, this bug only exists in the book, not in the current code (well
at least I wasn't totally wrong :-() sorry.

-- 
----------------------------------------------------------------------------
UUCP:   ...mcvax!cernvax!forty2!poole			Simon Poole
BITNET: K538915@CZHRZU1A
----------------------------------------------------------------------------