X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=etc%2Fafpd%2Fofork.c;h=47a1260990d0696e9069fbf730c0d7494ab00f3d;hp=ed5f732814e7dd5d35ad2aa088c319a2f3d3d8e6;hb=b362b6f7b22b6e4e9e74760989f389149677917b;hpb=5116ed2346ea7ee6e5a9858dee94f3eacdc00d7e diff --git a/etc/afpd/ofork.c b/etc/afpd/ofork.c index ed5f7328..47a12609 100644 --- a/etc/afpd/ofork.c +++ b/etc/afpd/ofork.c @@ -21,19 +21,17 @@ #include #include #include +#include +#include -#include "globals.h" #include "volume.h" #include "directory.h" #include "fork.h" -#include "fce_api.h" -/* we need to have a hashed list of oforks (by dev inode). just hash - * by first letter. */ +/* we need to have a hashed list of oforks (by dev inode) */ #define OFORK_HASHSIZE 64 -static struct ofork *ofork_table[OFORK_HASHSIZE]; - -static struct ofork **oforks = NULL; +static struct ofork *ofork_table[OFORK_HASHSIZE]; /* forks hashed by dev/inode */ +static struct ofork **oforks = NULL; /* point to allocated table of open forks pointers */ static int nforks = 0; static u_short lastrefnum = 0; @@ -41,12 +39,6 @@ static u_short lastrefnum = 0; /* OR some of each character for the hash*/ static unsigned long hashfn(const struct file_key *key) { -#if 0 - unsigned long i = 0; - while (*name) { - i = ((i << 4) | (8*sizeof(i) - 4)) ^ *name++; - } -#endif return key->inode & (OFORK_HASHSIZE - 1); } @@ -256,14 +248,14 @@ struct ofork *of_find(const u_int16_t ofrefnum ) } /* -------------------------- */ -int of_stat(struct path *path) +int of_stat(const struct vol *vol, struct path *path) { int ret; path->st_errno = 0; path->st_valid = 1; - if ((ret = lstat(path->u_name, &path->st)) < 0) { + if ((ret = ostat(path->u_name, &path->st, vol_syml_opt(vol))) < 0) { LOG(log_debug, logtype_afpd, "of_stat('%s/%s': %s)", cfrombstr(curdir->d_fullpath), path->u_name, strerror(errno)); path->st_errno = errno; @@ -302,7 +294,7 @@ int of_statdir(struct vol *vol, struct path *path) if (*path->m_name) { /* not curdir */ - return of_stat (path); + return of_stat(vol, path); } path->st_errno = 0; path->st_valid = 1; @@ -314,7 +306,7 @@ int of_statdir(struct vol *vol, struct path *path) LOG(log_debug, logtype_afpd, "of_statdir: stating: '%s'", pathname); - if (!(ret = lstat(pathname, &path->st))) + if (!(ret = ostat(pathname, &path->st, vol_syml_opt(vol)))) return 0; path->st_errno = errno; @@ -325,7 +317,7 @@ int of_statdir(struct vol *vol, struct path *path) return -1; path->st_errno = 0; - if ((ret = lstat(cfrombstr(path->d_dir->d_u_name), &path->st)) < 0) + if ((ret = ostat(cfrombstr(path->d_dir->d_u_name), &path->st, vol_syml_opt(vol))) < 0) path->st_errno = errno; } @@ -333,13 +325,13 @@ int of_statdir(struct vol *vol, struct path *path) } /* -------------------------- */ -struct ofork *of_findname(struct path *path) +struct ofork *of_findname(const struct vol *vol, struct path *path) { struct ofork *of; struct file_key key; if (!path->st_valid) { - of_stat(path); + of_stat(vol, path); } if (path->st_errno) @@ -463,7 +455,7 @@ struct adouble *of_ad(const struct vol *vol, struct path *path, struct adouble * struct ofork *of; struct adouble *adp; - if ((of = of_findname(path))) { + if ((of = of_findname(vol, path))) { adp = of->of_ad; } else { ad_init(ad, vol->v_adouble, vol->v_ad_options);