FreeCalypso > hg > freecalypso-sw
view target-utils/libmpffs/basicfind.c @ 198:c9ea2f7441a5
fc-tmsh: abb[rw] commands implemented
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 15 Dec 2013 08:48:52 +0000 |
parents | ac310ee73788 |
children |
line wrap: on
line source
#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); }