FreeCalypso > hg > freecalypso-tools
view target-utils/libtiffs/basicfind.c @ 776:fac3176de18d
simagent: bare Tx implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 12 Mar 2021 23:36:46 +0000 |
parents | 87cb03b35f77 |
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 = tiffs_active_index + ino; if (!irec->type) continue; if (!strcmp(inode_to_dataptr(irec), seekname)) return(ino); } return(0); } tiffs_pathname_to_inode(pathname) char *pathname; { int ino, stat; struct inode *irec; char *cur, *next; stat = tiffs_init(); if (stat < 0) return(stat); cur = pathname; if (*cur == '/') cur++; for (ino = tiffs_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 = tiffs_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); }