FreeCalypso > hg > freecalypso-sw
diff target-utils/libtiffs/basicfind.c @ 224:2900fe603f8a
beginning of MPFFS->TIFFS naming convention change
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 12 Jan 2014 07:59:00 +0000 |
parents | target-utils/libmpffs/basicfind.c@ac310ee73788 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/libtiffs/basicfind.c Sun Jan 12 07:59:00 2014 +0000 @@ -0,0 +1,65 @@ +#include <sys/types.h> +#include "types.h" +#include "struct.h" +#include "globals.h" +#include "macros.h" + +extern char *index(); + +static +find_named_child(start, seekname) + char *seekname; +{ + int ino; + struct inode *irec; + + for (ino = start; ino != 0xFFFF; ino = irec->sibling) { + irec = mpffs_active_index + ino; + if (!irec->type) + continue; + if (!strcmp(inode_to_dataptr(irec), seekname)) + return(ino); + } + return(0); +} + +mpffs_pathname_to_inode(pathname) + char *pathname; +{ + int ino, stat; + struct inode *irec; + char *cur, *next; + + stat = mpffs_init(); + if (stat < 0) + return(stat); + cur = pathname; + if (*cur == '/') + cur++; + for (ino = mpffs_root_ino; cur; cur = next) { + if (!*cur) + break; + next = index(cur, '/'); + if (next == cur) { + printf("malformed pathname: multiple adjacent slashes\n"); + return(-1); + } + if (next) + *next++ = '\0'; + irec = mpffs_active_index + ino; + if (irec->type != OBJTYPE_DIR) { + printf("Error: non-terminal non-directory\n"); + if (next) + next[-1] = '/'; + return(-1); + } + ino = find_named_child(irec->descend, cur); + if (next) + next[-1] = '/'; + if (!ino) { + printf("Error: pathname component not found\n"); + return(-1); + } + } + return(ino); +}