1BSD/portlib/copen.c

Compare this file to the similar file:
Show the results in this format:

/**
 **	open a file
 **/

int	__Filemode	0644;

copen(filename, xmode)
char	*filename;
int	xmode;
{
	register int	fn;
	register int	mode;

	mode = xmode;
	switch (mode)
	{

	  case 'r':		/* read mode */
		mode = 0;
	  case 0:
		fn = open(filename, 0);
		break;

	  case 'm':		/* modify */
		mode = 3;
	  case 3:
		fn = open(filename, 2);
		break;

	  case 'a':		/* append */
		mode = 2;
	  case 2:
		fn = open(filename, 1);
		if (fn >= 0)
			break;

	  case 'w':		/* write */
		mode = 1;
	  case 1:
		fn = creat(filename, __Filemode);
		break;

	  default:
		__error("copen: bad file mode %o on %s", mode, filename);
	}
	if (fn >= 0)
		__makbuf(fn, mode);
	return (fn);
}