/*
- * $Id: ofork.c,v 1.26 2008-08-16 21:11:36 didg Exp $
+ * $Id: ofork.c,v 1.30.2.1 2010-01-02 10:22:32 franklahm Exp $
*
* Copyright (c) 1996 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
/* OR some of each character for the hash*/
-static __inline__ unsigned long hashfn(const struct file_key *key)
+static unsigned long hashfn(const struct file_key *key)
{
#if 0
unsigned long i = 0;
return key->inode & (OFORK_HASHSIZE - 1);
}
-static __inline__ void of_hash(struct ofork *of)
+static void of_hash(struct ofork *of)
{
struct ofork **table;
of->prevp = table;
}
-static __inline__ void of_unhash(struct ofork *of)
+static void of_unhash(struct ofork *of)
{
if (of->prevp) {
if (of->next)
}
#ifdef DEBUG1
-void of_pforkdesc( f )
-FILE *f;
+void of_pforkdesc( FILE *f)
{
int ofrefnum;
return( 0 );
}
-int of_rename(vol, s_of, olddir, oldpath, newdir, newpath)
-const struct vol *vol;
-struct ofork *s_of;
-struct dir *olddir, *newdir;
-const char *oldpath _U_, *newpath;
+int of_rename(
+ const struct vol *vol,
+ struct ofork *s_of,
+ struct dir *olddir, const char *oldpath _U_,
+ struct dir *newdir, const char *newpath)
{
struct ofork *of, *next, *d_ofork;
int done = 0;
#define min(a,b) ((a)<(b)?(a):(b))
struct ofork *
- of_alloc(vol, dir, path, ofrefnum, eid, ad, st)
-struct vol *vol;
-struct dir *dir;
-char *path;
-u_int16_t *ofrefnum;
-const int eid;
-struct adouble *ad;
-struct stat *st;
+of_alloc(struct vol *vol,
+ struct dir *dir,
+ char *path,
+ u_int16_t *ofrefnum,
+ const int eid,
+ struct adouble *ad,
+ struct stat *st)
{
struct ofork *of, *d_ofork;
u_int16_t refnum, of_refnum;
int ret;
path->st_errno = 0;
path->st_valid = 1;
- if ((ret = stat(path->u_name, &path->st)) < 0)
+ if ((ret = lstat(path->u_name, &path->st)) < 0)
path->st_errno = errno;
return ret;
}
-/* -------------------------- */
-int of_statdir (const struct vol *vol, struct path *path)
+/* --------------------------
+ stat the current directory.
+ stat(".") works even if "." is deleted thus
+ we have to stat ../name because we want to know if it's there
+*/
+int of_statdir (struct vol *vol, struct path *path)
{
-static char pathname[ MAXPATHLEN + 1];
+static char pathname[ MAXPATHLEN + 1] = "../";
int ret;
if (*path->m_name) {
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);
+ strlcpy(pathname +3, path->d_dir->d_u_name, sizeof (pathname) -3);
- if (!(ret = stat(pathname, &path->st)))
+ if (!(ret = lstat(pathname, &path->st)))
return 0;
path->st_errno = errno;
if (movecwd(vol, curdir->d_parent))
return -1;
path->st_errno = 0;
- if ((ret = stat(path->d_dir->d_u_name, &path->st)) < 0)
+ if ((ret = lstat(path->d_dir->d_u_name, &path->st)) < 0)
path->st_errno = errno;
}
return ret;
return NULL;
}
-void of_dealloc( of )
-struct ofork *of;
+void of_dealloc( struct ofork *of)
{
if (!oforks)
return;