summaryrefslogtreecommitdiffstats
path: root/include/asm-sparc64/namei.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-sparc64/namei.h')
-rw-r--r--include/asm-sparc64/namei.h73
1 files changed, 33 insertions, 40 deletions
diff --git a/include/asm-sparc64/namei.h b/include/asm-sparc64/namei.h
index f8fdbb533..af5afb721 100644
--- a/include/asm-sparc64/namei.h
+++ b/include/asm-sparc64/namei.h
@@ -1,4 +1,4 @@
-/* $Id: namei.h,v 1.2 1997/03/19 17:28:27 jj Exp $
+/* $Id: namei.h,v 1.4 1997/06/07 08:32:56 ecd Exp $
* linux/include/asm-sparc64/namei.h
*
* Routines to handle famous /usr/gnemul/s*.
@@ -11,44 +11,37 @@
#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++; \
- } \
-})
+extern int __namei(int, const char *, struct inode *, char *, struct inode **,
+ struct inode **, struct qstr *, struct dentry **, int *);
+
+static inline int
+__prefix_namei(int retrieve_mode, const char * name, struct inode * base,
+ char * buf, struct inode ** res_dir, struct inode ** res_inode,
+ struct qstr * last_name, struct dentry ** last_entry,
+ int * last_error)
+{
+ int error;
+
+ if (!(current->personality & (PER_BSD|PER_SVR4)))
+ return -ENOENT;
+
+ while (*name == '/')
+ name++;
+
+ atomic_inc(&current->fs->root->i_count);
+ error = __namei(NAM_FOLLOW_LINK,
+ current->personality & PER_BSD ?
+ SPARC_BSD_EMUL : SPARC_SOL_EMUL, current->fs->root,
+ buf, NULL, &base, NULL, NULL, NULL);
+ if (error)
+ return error;
+
+ error = __namei(retrieve_mode, name, base, buf, res_dir, res_inode,
+ last_name, last_entry, last_error);
+ if (error)
+ return error;
+
+ return 0;
+}
#endif /* __SPARC64_NAMEI_H */