+/* -------------------------- */
+int of_stat (struct path *path)
+{
+int ret;
+ path->st_errno = 0;
+ path->st_valid = 1;
+ if ((ret = stat(path->u_name, &path->st)) < 0)
+ path->st_errno = errno;
+ return ret;
+}
+
+/* -------------------------- */
+int of_statdir (const struct vol *vol, struct path *path)
+{
+static char pathname[ MAXPATHLEN + 1];
+int ret;
+
+ if (*path->m_name) {
+ /* not curdir */
+ return of_stat (path);
+ }
+ path->st_errno = 0;
+ path->st_valid = 1;
+ /* FIXME, what about: we don't have r-x perm anymore ? */
+ strcpy(pathname, "../");
+ strlcat(pathname, path->d_dir->d_u_name, MAXPATHLEN);
+
+ if (!(ret = stat(pathname, &path->st)))
+ return 0;
+
+ path->st_errno = errno;
+ /* hmm, can't stat curdir anymore */
+ if (errno == EACCES && curdir->d_parent ) {
+ if (movecwd(vol, curdir->d_parent))
+ return -1;
+ path->st_errno = 0;
+ if ((ret = stat(path->d_dir->d_u_name, &path->st)) < 0)
+ path->st_errno = errno;
+ }
+ return ret;
+}
+
+/* -------------------------- */