/* Copyright 1992 Carnegie Mellon University All rights reserved.
  $Disclaimer: 
 * Permission to use, copy, modify, and distribute this software and its 
 * documentation for any purpose is hereby granted without fee, 
 * provided that the above copyright notice appear in all copies and that 
 * both that copyright notice, this permission notice, and the following 
 * disclaimer appear in supporting documentation, and that the names of 
 * IBM, Carnegie Mellon University, and other copyright holders, not be 
 * used in advertising or publicity pertaining to distribution of the software 
 * without specific, written prior permission.
 * 
 * IBM, CARNEGIE MELLON UNIVERSITY, AND THE OTHER COPYRIGHT HOLDERS 
 * DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT 
 * SHALL IBM, CARNEGIE MELLON UNIVERSITY, OR ANY OTHER COPYRIGHT HOLDER 
 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 
 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 
 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 * OF THIS SOFTWARE.
 *  $
 */

#include <andrewos.h>
#include <sys/param.h>
#include <stdio.h>

FILE *pathopen(path, file, mode)
char *path;
char *file;
char *mode;
{
    char realpath[MAXPATHLEN+1];
    char *p=path;
    FILE *fp=NULL;
    while (*p && fp==NULL) {
	int len;
	char *q=index(p, ':');
	if(q==NULL) len=strlen(p);
	else len = q-p;
	if(len+strlen(file)+2<MAXPATHLEN) {
	    strncpy(realpath, p, len);
	    strcpy(realpath+len, "/");
	    strcat(realpath+len, file);
	    fp=fopen(realpath, mode);
	}
	p+=len;
	if(*p) p++;
    }
    if(fp==NULL) {
	perror(realpath);
	return NULL;
    }
    return fp;
}
