FreeCalypso > hg > freecalypso-reveng
view pirollback/pathname.c @ 103:a10acb1688e0
thumbdis: buglet in the decoding of sub-from-sp
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Mon, 31 Mar 2014 01:59:28 +0000 |
parents | 18472a2ccf55 |
children |
line wrap: on
line source
#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include "types.h" #include "struct.h" #include "pathname.h" extern struct inode_info inode[]; pathname_of_inode(ino, pnbuf) char *pnbuf; { int level, revpath[MAX_DIR_NEST]; struct inode_info *inf; char *op; for (level = 0; ino != 1; ino = inode[ino].parent) { if (!inode[ino].parent) return(-1); if (level >= MAX_DIR_NEST) return(-1); revpath[level++] = ino; } op = pnbuf; *op++ = '/'; while (level) { level--; inf = inode + revpath[level]; switch (inf->type) { case 0xE1: case 0xF1: /* good only for the last component */ if (!level) break; else return(-1); case 0xF2: /* good for all components */ break; default: /* bad */ return(-1); } strcpy(op, inf->dataptr); op += strlen(inf->dataptr); if (inf->type == 0xF2) *op++ = '/'; } *op = '\0'; return(0); }