Xinu7/src/cmd/fs/openfile.c

/* openfile.c - openfile */

#include "fs.h"

/*------------------------------------------------------------------------
 *  openfile  -  open a file given its name and Xinu mode; return UNIX fd
 *------------------------------------------------------------------------
 */
openfile(name, xmode)
char	*name;
int	xmode;
{
	int	umode;
	int	fd;
	char	*subdir;
	char	fname[RNAMLEN];

	umode = fmode(xmode);
	if (xmode & FLOLD)
		return(open(name, umode, FILEMODE));
	for (subdir=index(name+1, '/') ; subdir != NULL ;
		subdir=index(subdir+1,'/')) {
		strncpy(fname, name, subdir - name);
		fname[subdir - name] = NULLCH;
		if (mkdir(fname, DIRMODE) < 0 && errno != EEXIST)
			return(SYSERR);
	}
	if ((fd=open(name, umode, FILEMODE)) >= 0)
		return(fd);
	return( open(name, umode&~O_CREAT, FILEMODE) );
}