FreeCalypso > hg > freecalypso-sw
view target-utils/libtiffs/basicfind.c @ 1030:194967e11b2b
fc-shell: tch record and tch play reworked for libgsm-compatible file format
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 31 May 2016 18:39:06 +0000 |
parents | 2900fe603f8a |
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); }