Blame ndmp-src/ndml_fhdb.c

Packit Service 392537
/*
Packit Service 392537
 * Copyright (c) 2001,2002
Packit Service 392537
 *	Traakan, Inc., Los Altos, CA
Packit Service 392537
 *	All rights reserved.
Packit Service 392537
 *
Packit Service 392537
 * Redistribution and use in source and binary forms, with or without
Packit Service 392537
 * modification, are permitted provided that the following conditions
Packit Service 392537
 * are met:
Packit Service 392537
 * 1. Redistributions of source code must retain the above copyright
Packit Service 392537
 *    notice unmodified, this list of conditions, and the following
Packit Service 392537
 *    disclaimer.
Packit Service 392537
 * 2. Redistributions in binary form must reproduce the above copyright
Packit Service 392537
 *    notice, this list of conditions and the following disclaimer in the
Packit Service 392537
 *    documentation and/or other materials provided with the distribution.
Packit Service 392537
 *
Packit Service 392537
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
Packit Service 392537
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit Service 392537
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit Service 392537
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
Packit Service 392537
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 392537
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 392537
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 392537
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit Service 392537
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit Service 392537
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit Service 392537
 * SUCH DAMAGE.
Packit Service 392537
 */
Packit Service 392537
Packit Service 392537
/*
Packit Service 392537
 * Project:  NDMJOB
Packit Service 392537
 * Ident:    $Id: $
Packit Service 392537
 *
Packit Service 392537
 * Description:
Packit Service 392537
 *
Packit Service 392537
 */
Packit Service 392537
Packit Service 392537
Packit Service 392537
#include "ndmlib.h"
Packit Service 392537
Packit Service 392537
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_add_file (struct ndmlog *ixlog, int tagc,
Packit Service 392537
  char *raw_name, ndmp9_file_stat *fstat)
Packit Service 392537
{
Packit Service 392537
	char		prefix[8];
Packit Service 392537
	char		statbuf[100];
Packit Service 392537
	char		namebuf[NDMOS_CONST_PATH_MAX];
Packit Service 392537
Packit Service 392537
	strcpy (prefix, "DHf");
Packit Service 392537
	prefix[0] = tagc;
Packit Service 392537
Packit Service 392537
	ndm_fstat_to_str (fstat, statbuf);
Packit Service 392537
Packit Service 392537
	ndmcstr_from_str (raw_name, namebuf, sizeof namebuf);
Packit Service 392537
Packit Service 392537
	ndmlogf (ixlog, prefix, 0, "%s UNIX %s", namebuf, statbuf);
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_add_dir (struct ndmlog *ixlog, int tagc,
Packit Service 392537
  char *raw_name, ndmp9_u_quad dir_node, ndmp9_u_quad node)
Packit Service 392537
{
Packit Service 392537
	char		prefix[8];
Packit Service 392537
	char		namebuf[NDMOS_CONST_PATH_MAX];
Packit Service 392537
Packit Service 392537
	strcpy (prefix, "DHd");
Packit Service 392537
	prefix[0] = tagc;
Packit Service 392537
Packit Service 392537
	ndmcstr_from_str (raw_name, namebuf, sizeof namebuf);
Packit Service 392537
Packit Service 392537
	ndmlogf (ixlog, prefix, 0, "%llu %s UNIX %llu",
Packit Service 392537
		dir_node, namebuf, node);
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_add_node (struct ndmlog *ixlog, int tagc,
Packit Service 392537
  ndmp9_u_quad node, ndmp9_file_stat *fstat)
Packit Service 392537
{
Packit Service 392537
	char		prefix[8];
Packit Service 392537
	char		statbuf[100];
Packit Service 392537
Packit Service 392537
	strcpy (prefix, "DHn");
Packit Service 392537
	prefix[0] = tagc;
Packit Service 392537
Packit Service 392537
	ndm_fstat_to_str (fstat, statbuf);
Packit Service 392537
Packit Service 392537
	ndmlogf (ixlog, prefix, 0, "%llu UNIX %s", node, statbuf);
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_add_dirnode_root (struct ndmlog *ixlog, int tagc,
Packit Service 392537
  ndmp9_u_quad root_node)
Packit Service 392537
{
Packit Service 392537
	char		prefix[8];
Packit Service 392537
Packit Service 392537
	strcpy (prefix, "DHr");
Packit Service 392537
	prefix[0] = tagc;
Packit Service 392537
Packit Service 392537
	ndmlogf (ixlog, prefix, 0, "%llu", root_node);
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_add_fh_info_to_nlist (FILE *fp, ndmp9_name *nlist, int n_nlist)
Packit Service 392537
{
Packit Service 392537
	struct ndmfhdb		_fhcb, *fhcb = &_fhcb;
Packit Service 392537
	int			i, rc, n_found;
Packit Service 392537
	ndmp9_file_stat		fstat;
Packit Service 392537
Packit Service 392537
	rc = ndmfhdb_open (fp, fhcb);
Packit Service 392537
	if (rc != 0) {
Packit Service 392537
		return -31;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	n_found = 0;
Packit Service 392537
Packit Service 392537
	for (i = 0; i < n_nlist; i++) {
Packit Service 392537
		char *		name = nlist[i].original_path;
Packit Service 392537
Packit Service 392537
		rc = ndmfhdb_lookup (fhcb, name, &fstat);
Packit Service 392537
		if (rc > 0) {
Packit Service 392537
			nlist[i].fh_info = fstat.fh_info;
Packit Service 392537
			if (fstat.fh_info.valid) {
Packit Service 392537
				n_found++;
Packit Service 392537
			}
Packit Service 392537
		}
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return n_found;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_open (FILE *fp, struct ndmfhdb *fhcb)
Packit Service 392537
{
Packit Service 392537
	int		rc;
Packit Service 392537
Packit Service 392537
	NDMOS_MACRO_ZEROFILL (fhcb);
Packit Service 392537
Packit Service 392537
	fhcb->fp = fp;
Packit Service 392537
Packit Service 392537
	rc = ndmfhdb_dirnode_root (fhcb);
Packit Service 392537
	if (rc > 0) {
Packit Service 392537
		fhcb->use_dir_node = 1;
Packit Service 392537
		return 0;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	rc = ndmfhdb_file_root (fhcb);
Packit Service 392537
	if (rc > 0) {
Packit Service 392537
		fhcb->use_dir_node = 0;
Packit Service 392537
		return 0;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return -1;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_lookup (struct ndmfhdb *fhcb, char *path, ndmp9_file_stat *fstat)
Packit Service 392537
{
Packit Service 392537
	if (fhcb->use_dir_node) {
Packit Service 392537
		return ndmfhdb_dirnode_lookup (fhcb, path, fstat);
Packit Service 392537
	} else {
Packit Service 392537
		return ndmfhdb_file_lookup (fhcb, path, fstat);
Packit Service 392537
	}
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_dirnode_root (struct ndmfhdb *fhcb)
Packit Service 392537
{
Packit Service 392537
	int		rc, off;
Packit Service 392537
	char *		p;
Packit Service 392537
	char		key[256];
Packit Service 392537
	char		linebuf[2048];
Packit Service 392537
Packit Service 392537
	sprintf (key, "DHr ");
Packit Service 392537
Packit Service 392537
	p = NDMOS_API_STREND(key);
Packit Service 392537
	off = p - key;
Packit Service 392537
Packit Service 392537
	rc = ndmbstf_first (fhcb->fp, key, linebuf, sizeof linebuf);
Packit Service 392537
Packit Service 392537
	if (rc <= 0) {
Packit Service 392537
		return rc;	/* error or not found */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	fhcb->root_node = NDMOS_API_STRTOLL (linebuf+off, &p, 0);
Packit Service 392537
Packit Service 392537
	if (*p != 0) {
Packit Service 392537
		return -10;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 1;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_dirnode_lookup (struct ndmfhdb *fhcb, char *path,
Packit Service 392537
  ndmp9_file_stat *fstat)
Packit Service 392537
{
Packit Service 392537
	int			rc;
Packit Service 392537
	char *			p;
Packit Service 392537
	char *			q;
Packit Service 392537
	char			component[256+128];
Packit Service 392537
	unsigned long long	dir_node;
Packit Service 392537
	unsigned long long	node;
Packit Service 392537
Packit Service 392537
	/* classic path name reduction */
Packit Service 392537
	node = dir_node = fhcb->root_node;
Packit Service 392537
	p = path;
Packit Service 392537
	for (;;) {
Packit Service 392537
		if (*p == '/') {
Packit Service 392537
			p++;
Packit Service 392537
			continue;
Packit Service 392537
		}
Packit Service 392537
		if (*p == 0) {
Packit Service 392537
			break;
Packit Service 392537
		}
Packit Service 392537
		q = component;
Packit Service 392537
		while (*p != 0 && *p != '/') {
Packit Service 392537
			*q++ = *p++;
Packit Service 392537
		}
Packit Service 392537
		*q = 0;
Packit Service 392537
Packit Service 392537
		dir_node = node;
Packit Service 392537
		rc = ndmfhdb_dir_lookup (fhcb, dir_node, component, &node);
Packit Service 392537
		if (rc <= 0)
Packit Service 392537
			return rc;	/* error or not found */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	rc = ndmfhdb_node_lookup (fhcb, node, fstat);
Packit Service 392537
Packit Service 392537
	return rc;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_dir_lookup (struct ndmfhdb *fhcb, unsigned long long dir_node,
Packit Service 392537
  char *name, unsigned long long *node_p)
Packit Service 392537
{
Packit Service 392537
	int		rc, off;
Packit Service 392537
	char *		p;
Packit Service 392537
	char		key[256+128];
Packit Service 392537
	char		linebuf[2048];
Packit Service 392537
Packit Service 392537
	sprintf (key, "DHd %llu ", dir_node);
Packit Service 392537
	p = NDMOS_API_STREND(key);
Packit Service 392537
Packit Service 392537
	ndmcstr_from_str (name, p, sizeof key - (p-key) - 10);
Packit Service 392537
Packit Service 392537
	strcat (p, " UNIX ");
Packit Service 392537
Packit Service 392537
	p = NDMOS_API_STREND(key);
Packit Service 392537
	off = p - key;
Packit Service 392537
Packit Service 392537
	rc = ndmbstf_first (fhcb->fp, key, linebuf, sizeof linebuf);
Packit Service 392537
Packit Service 392537
	if (rc <= 0) {
Packit Service 392537
		return rc;	/* error or not found */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	*node_p = NDMOS_API_STRTOLL (linebuf+off, &p, 0);
Packit Service 392537
Packit Service 392537
	if (*p != 0) {
Packit Service 392537
		return -10;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 1;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_node_lookup (struct ndmfhdb *fhcb, unsigned long long node,
Packit Service 392537
  ndmp9_file_stat *fstat)
Packit Service 392537
{
Packit Service 392537
	int		rc, off;
Packit Service 392537
	char *		p;
Packit Service 392537
	char		key[128];
Packit Service 392537
	char		linebuf[2048];
Packit Service 392537
Packit Service 392537
	sprintf (key, "DHn %llu UNIX ", node);
Packit Service 392537
Packit Service 392537
	p = NDMOS_API_STREND(key);
Packit Service 392537
	off = p - key;
Packit Service 392537
Packit Service 392537
Packit Service 392537
	rc = ndmbstf_first (fhcb->fp, key, linebuf, sizeof linebuf);
Packit Service 392537
Packit Service 392537
	if (rc <= 0) {
Packit Service 392537
		return rc;	/* error or not found */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
Packit Service 392537
	rc = ndm_fstat_from_str (fstat, linebuf + off);
Packit Service 392537
	if (rc < 0) {
Packit Service 392537
		return rc;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 1;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_file_root (struct ndmfhdb *fhcb)
Packit Service 392537
{
Packit Service 392537
	int			rc;
Packit Service 392537
	ndmp9_file_stat		fstat;
Packit Service 392537
Packit Service 392537
	rc = ndmfhdb_file_lookup (fhcb, "/", &fstat);
Packit Service 392537
	if (rc > 0) {
Packit Service 392537
		if (fstat.node.valid)
Packit Service 392537
			fhcb->root_node = fstat.node.value;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return rc;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndmfhdb_file_lookup (struct ndmfhdb *fhcb, char *path,
Packit Service 392537
  ndmp9_file_stat *fstat)
Packit Service 392537
{
Packit Service 392537
	int		rc, off;
Packit Service 392537
	char *		p;
Packit Service 392537
	char		key[2048];
Packit Service 392537
	char		linebuf[2048];
Packit Service 392537
Packit Service 392537
	sprintf (key, "DHf ");
Packit Service 392537
	p = NDMOS_API_STREND(key);
Packit Service 392537
Packit Service 392537
	ndmcstr_from_str (path, p, sizeof key - (p-key) - 10);
Packit Service 392537
Packit Service 392537
	strcat (p, " UNIX ");
Packit Service 392537
Packit Service 392537
	p = NDMOS_API_STREND(key);
Packit Service 392537
	off = p - key;
Packit Service 392537
Packit Service 392537
	rc = ndmbstf_first (fhcb->fp, key, linebuf, sizeof linebuf);
Packit Service 392537
Packit Service 392537
	if (rc <= 0) {
Packit Service 392537
		return rc;	/* error or not found */
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	rc = ndm_fstat_from_str (fstat, linebuf + off);
Packit Service 392537
	if (rc < 0) {
Packit Service 392537
		return rc;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 1;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
Packit Service 392537
Packit Service 392537
Packit Service 392537
/*
Packit Service 392537
 * Same codes as wraplib.[ch] wrap_parse_fstat_subr()
Packit Service 392537
 * and wrap_send_fstat_subr().
Packit Service 392537
 */
Packit Service 392537
Packit Service 392537
char *
Packit Service 392537
ndm_fstat_to_str (ndmp9_file_stat *fstat, char *buf)
Packit Service 392537
{
Packit Service 392537
	char *			p = buf;
Packit Service 392537
Packit Service 392537
	*p++ = 'f';
Packit Service 392537
	switch (fstat->ftype) {
Packit Service 392537
	case NDMP9_FILE_DIR:	*p++ = 'd';	break;
Packit Service 392537
	case NDMP9_FILE_FIFO:	*p++ = 'p';	break;
Packit Service 392537
	case NDMP9_FILE_CSPEC:	*p++ = 'c';	break;
Packit Service 392537
	case NDMP9_FILE_BSPEC:	*p++ = 'b';	break;
Packit Service 392537
	case NDMP9_FILE_REG:	*p++ = '-';	break;
Packit Service 392537
	case NDMP9_FILE_SLINK:	*p++ = 'l';	break;
Packit Service 392537
	case NDMP9_FILE_SOCK:	*p++ = 's';	break;
Packit Service 392537
	case NDMP9_FILE_REGISTRY: *p++ = 'R';	break;
Packit Service 392537
	case NDMP9_FILE_OTHER:	*p++ = 'o';	break;
Packit Service 392537
	default:		*p++ = '?';	break;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	if (fstat->mode.valid) {
Packit Service 392537
		sprintf (p, " m%04lo", fstat->mode.value & 07777);
Packit Service 392537
	}
Packit Service 392537
	while (*p) p++;
Packit Service 392537
Packit Service 392537
	if (fstat->uid.valid) {
Packit Service 392537
		sprintf (p, " u%ld", fstat->uid.value);
Packit Service 392537
	}
Packit Service 392537
	while (*p) p++;
Packit Service 392537
Packit Service 392537
	if (fstat->gid.valid) {
Packit Service 392537
		sprintf (p, " g%ld", fstat->gid.value);
Packit Service 392537
	}
Packit Service 392537
	while (*p) p++;
Packit Service 392537
Packit Service 392537
	if (fstat->ftype == NDMP9_FILE_REG
Packit Service 392537
	 || fstat->ftype == NDMP9_FILE_SLINK) {
Packit Service 392537
		if (fstat->size.valid) {
Packit Service 392537
			sprintf (p, " s%llu", fstat->size.value);
Packit Service 392537
		}
Packit Service 392537
	} else {
Packit Service 392537
		/* ignore size on other file types */
Packit Service 392537
	}
Packit Service 392537
	while (*p) p++;
Packit Service 392537
Packit Service 392537
	/* tar -t can not recover atime/ctime */
Packit Service 392537
	/* they are also not particularly interesting in the index */
Packit Service 392537
Packit Service 392537
	if (fstat->mtime.valid) {
Packit Service 392537
		sprintf (p, " tm%lu", fstat->mtime.value);
Packit Service 392537
	}
Packit Service 392537
	while (*p) p++;
Packit Service 392537
Packit Service 392537
	if (fstat->fh_info.valid) {
Packit Service 392537
		sprintf (p, " @%lld", fstat->fh_info.value);
Packit Service 392537
	}
Packit Service 392537
	while (*p) p++;
Packit Service 392537
Packit Service 392537
	return buf;
Packit Service 392537
}
Packit Service 392537
Packit Service 392537
int
Packit Service 392537
ndm_fstat_from_str (ndmp9_file_stat *fstat, char *buf)
Packit Service 392537
{
Packit Service 392537
	char *			scan = buf;
Packit Service 392537
	ndmp9_validity *	valid_p;
Packit Service 392537
Packit Service 392537
	NDMOS_MACRO_ZEROFILL (fstat);
Packit Service 392537
Packit Service 392537
	while (*scan) {
Packit Service 392537
		char *		p = scan + 1;
Packit Service 392537
Packit Service 392537
		switch (*scan) {
Packit Service 392537
		case ' ':
Packit Service 392537
			scan++;
Packit Service 392537
			continue;
Packit Service 392537
Packit Service 392537
		case '@':	/* fh_info */
Packit Service 392537
			fstat->fh_info.value = NDMOS_API_STRTOLL (p, &scan, 0);
Packit Service 392537
			valid_p = &fstat->fh_info.valid;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 's':	/* size */
Packit Service 392537
			fstat->size.value = NDMOS_API_STRTOLL (p, &scan, 0);
Packit Service 392537
			valid_p = &fstat->size.valid;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 'i':	/* fileno (inum) */
Packit Service 392537
			fstat->node.value = NDMOS_API_STRTOLL (p, &scan, 0);
Packit Service 392537
			valid_p = &fstat->node.valid;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 'm':	/* mode low twelve bits */
Packit Service 392537
			fstat->mode.value = strtol (p, &scan, 8);
Packit Service 392537
			valid_p = &fstat->mode.valid;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 'l':	/* link count */
Packit Service 392537
			fstat->links.value = strtol (p, &scan, 0);
Packit Service 392537
			valid_p = &fstat->links.valid;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 'u':	/* uid */
Packit Service 392537
			fstat->uid.value = strtol (p, &scan, 0);
Packit Service 392537
			valid_p = &fstat->uid.valid;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 'g':	/* gid */
Packit Service 392537
			fstat->gid.value = strtol (p, &scan, 0);
Packit Service 392537
			valid_p = &fstat->gid.valid;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 't':		/* one of the times */
Packit Service 392537
			p = scan+2;
Packit Service 392537
			switch (scan[1]) {
Packit Service 392537
			case 'm':	/* mtime */
Packit Service 392537
				fstat->mtime.value = strtol (p, &scan, 0);
Packit Service 392537
				valid_p = &fstat->mtime.valid;
Packit Service 392537
				break;
Packit Service 392537
Packit Service 392537
			case 'a':	/* atime */
Packit Service 392537
				fstat->atime.value = strtol (p, &scan, 0);
Packit Service 392537
				valid_p = &fstat->atime.valid;
Packit Service 392537
				break;
Packit Service 392537
Packit Service 392537
			case 'c':	/* ctime */
Packit Service 392537
				fstat->ctime.value = strtol (p, &scan, 0);
Packit Service 392537
				valid_p = &fstat->ctime.valid;
Packit Service 392537
				break;
Packit Service 392537
Packit Service 392537
			default:
Packit Service 392537
				return -13;
Packit Service 392537
			}
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		case 'f':	/* ftype (file type) */
Packit Service 392537
			switch (scan[1]) {
Packit Service 392537
			case 'd': fstat->ftype = NDMP9_FILE_DIR; break;
Packit Service 392537
			case 'p': fstat->ftype = NDMP9_FILE_FIFO; break;
Packit Service 392537
			case 'c': fstat->ftype = NDMP9_FILE_CSPEC; break;
Packit Service 392537
			case 'b': fstat->ftype = NDMP9_FILE_BSPEC; break;
Packit Service 392537
			case '-': fstat->ftype = NDMP9_FILE_REG; break;
Packit Service 392537
			case 'l': fstat->ftype = NDMP9_FILE_SLINK; break;
Packit Service 392537
			case 's': fstat->ftype = NDMP9_FILE_SOCK; break;
Packit Service 392537
			case 'R': fstat->ftype = NDMP9_FILE_REGISTRY; break;
Packit Service 392537
			case 'o': fstat->ftype = NDMP9_FILE_OTHER; break;
Packit Service 392537
			default:
Packit Service 392537
				fstat->ftype = NDMP9_FILE_OTHER;
Packit Service 392537
				return -15;
Packit Service 392537
			}
Packit Service 392537
			scan += 2;
Packit Service 392537
			valid_p = 0;
Packit Service 392537
			break;
Packit Service 392537
Packit Service 392537
		default:
Packit Service 392537
			return -13;
Packit Service 392537
		}
Packit Service 392537
Packit Service 392537
		if (*scan != ' ' && *scan != 0)
Packit Service 392537
			return -11;
Packit Service 392537
Packit Service 392537
		if (valid_p)
Packit Service 392537
			*valid_p = NDMP9_VALIDITY_VALID;
Packit Service 392537
	}
Packit Service 392537
Packit Service 392537
	return 0;
Packit Service 392537
}