diff options
Diffstat (limited to 'include/asm-sparc/namei.h')
-rw-r--r-- | include/asm-sparc/namei.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/include/asm-sparc/namei.h b/include/asm-sparc/namei.h new file mode 100644 index 000000000..b71537565 --- /dev/null +++ b/include/asm-sparc/namei.h @@ -0,0 +1,54 @@ +/* $Id: namei.h,v 1.3 1997/01/26 23:36:36 davem Exp $ + * linux/include/asm-sparc/namei.h + * + * Routines to handle famous /usr/gnemul/s*. + * Included from linux/fs/namei.c + */ + +#ifndef __SPARC_NAMEI_H +#define __SPARC_NAMEI_H + +#define SPARC_BSD_EMUL "usr/gnemul/sunos/" +#define SPARC_SOL_EMUL "usr/gnemul/solaris/" + +#define translate_namei(pathname, base, follow_links, res_inode) ({ \ + if ((current->personality & (PER_BSD|PER_SVR4)) && !base && *pathname == '/') { \ + struct inode *emul_ino; \ + int namelen; \ + const char *name; \ + \ + while (*pathname == '/') \ + pathname++; \ + current->fs->root->i_count++; \ + if (dir_namei (current->personality & PER_BSD ? SPARC_BSD_EMUL : SPARC_SOL_EMUL, \ + &namelen, &name, current->fs->root, &emul_ino) >= 0 && emul_ino) { \ + *res_inode = NULL; \ + if (_namei (pathname, emul_ino, follow_links, res_inode) >= 0 && *res_inode) \ + return 0; \ + } \ + base = current->fs->root; \ + base->i_count++; \ + } \ +}) + +#define translate_open_namei(pathname, flag, mode, res_inode, base) ({ \ + if ((current->personality & (PER_BSD|PER_SVR4)) && !base && *pathname == '/') { \ + struct inode *emul_ino; \ + int namelen; \ + const char *name; \ + \ + while (*pathname == '/') \ + pathname++; \ + current->fs->root->i_count++; \ + if (dir_namei (current->personality & PER_BSD ? SPARC_BSD_EMUL : SPARC_SOL_EMUL, \ + &namelen, &name, current->fs->root, &emul_ino) >= 0 && emul_ino) { \ + *res_inode = NULL; \ + if (open_namei (pathname, flag, mode, res_inode, emul_ino) >= 0 && *res_inode) \ + return 0; \ + } \ + base = current->fs->root; \ + base->i_count++; \ + } \ +}) + +#endif /* __SPARC_NAMEI_H */ |