X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Fofork.c;h=f5f8a38de8d7fff65a380ac83674fe9c755c190a;hb=64c01c136e708085840814c92ff7cf829a794317;hp=a6359ad29329373e5db2fdb7b673cfbf3fee6241;hpb=8cfcbaea66c691c147a334b39e9f8b4561f34343;p=netatalk.git diff --git a/etc/afpd/ofork.c b/etc/afpd/ofork.c index a6359ad2..f5f8a38d 100644 --- a/etc/afpd/ofork.c +++ b/etc/afpd/ofork.c @@ -108,7 +108,7 @@ int of_rename(const struct vol *vol, struct dir *olddir, const char *oldpath _U_, struct dir *newdir, const char *newpath) { - struct ofork *of, *next, *d_ofork; + struct ofork *of, *next; int done = 0; if (!s_of) @@ -118,30 +118,16 @@ int of_rename(const struct vol *vol, while ((of = next)) { next = next->next; /* so we can unhash and still be all right. */ - if (vol == of->of_vol && olddir == of->of_dir && - s_of->key.dev == of->key.dev && - s_of->key.inode == of->key.inode ) { + if (vol == of->of_vol + && olddir->d_did == of->of_did + && s_of->key.dev == of->key.dev + && s_of->key.inode == of->key.inode ) { if (!done) { strlcpy( of_name(of), newpath, of->of_ad->ad_m_namelen); done = 1; } - if (newdir != olddir) { - of->of_d_prev->of_d_next = of->of_d_next; - of->of_d_next->of_d_prev = of->of_d_prev; - if (of->of_dir->d_ofork == of) { - of->of_dir->d_ofork = (of == of->of_d_next) ? NULL : of->of_d_next; - } - of->of_dir = newdir; - if (!(d_ofork = newdir->d_ofork)) { - newdir->d_ofork = of; - of->of_d_next = of->of_d_prev = of; - } else { - of->of_d_next = d_ofork; - of->of_d_prev = d_ofork->of_d_prev; - of->of_d_prev->of_d_next = of; - d_ofork->of_d_prev = of; - } - } + if (newdir != olddir) + of->of_did = newdir->d_did; } } @@ -159,7 +145,7 @@ of_alloc(struct vol *vol, struct adouble *ad, struct stat *st) { - struct ofork *of, *d_ofork; + struct ofork *of; u_int16_t refnum, of_refnum; int i; @@ -247,17 +233,7 @@ of_alloc(struct vol *vol, of->of_ad = ad; of->of_vol = vol; - of->of_dir = dir; - - if (!(d_ofork = dir->d_ofork)) { - dir->d_ofork = of; - of->of_d_next = of->of_d_prev = of; - } else { - of->of_d_next = d_ofork; - of->of_d_prev = d_ofork->of_d_prev; - d_ofork->of_d_prev->of_d_next = of; - d_ofork->of_d_prev = of; - } + of->of_did = dir->d_did; *ofrefnum = refnum; of->of_refnum = refnum; @@ -290,7 +266,7 @@ int of_stat(struct path *path) if ((ret = lstat(path->u_name, &path->st)) < 0) { LOG(log_debug, logtype_afpd, "of_stat('%s/%s': %s)", - cfrombstring(curdir->d_fullpath), path->u_name, strerror(errno)); + cfrombstr(curdir->d_fullpath), path->u_name, strerror(errno)); path->st_errno = errno; } @@ -335,7 +311,7 @@ int of_statdir(struct vol *vol, struct path *path) len = blength(path->d_dir->d_u_name); if (len > (MAXPATHLEN - 3)) len = MAXPATHLEN - 3; - strncpy(pathname + 3, cfrombstring(path->d_dir->d_u_name), len + 1); + strncpy(pathname + 3, cfrombstr(path->d_dir->d_u_name), len + 1); LOG(log_debug, logtype_afpd, "of_statdir: stating: '%s'", pathname); @@ -350,7 +326,7 @@ int of_statdir(struct vol *vol, struct path *path) return -1; path->st_errno = 0; - if ((ret = lstat(cfrombstring(path->d_dir->d_u_name), &path->st)) < 0) + if ((ret = lstat(cfrombstr(path->d_dir->d_u_name), &path->st)) < 0) path->st_errno = errno; } @@ -423,14 +399,6 @@ void of_dealloc( struct ofork *of) return; of_unhash(of); - - /* detach ofork */ - of->of_d_prev->of_d_next = of->of_d_next; - of->of_d_next->of_d_prev = of->of_d_prev; - if (of->of_dir->d_ofork == of) { - of->of_dir->d_ofork = (of == of->of_d_next) ? NULL : of->of_d_next; - } - oforks[ of->of_refnum % nforks ] = NULL; /* decrease refcount */