+ memcpy( p, path, strlen( path ));
+
+ while ( dir->d_did != DIRDID_ROOT ) {
+ p -= blength(dir->d_m_name) + 1;
+ if (p < mpath) {
+ /* FIXME: pathname too long */
+ return NULL;
+ }
+ memcpy(p, cfrombstr(dir->d_m_name), blength(dir->d_m_name) + 1);
+ if ((dir = dirlookup(vol, dir->d_pdid)) == NULL)
+ return NULL;
+ }
+ return( p );
+
+
+#if 0
+ char buffer[12 + MAXPATHLEN + 1];
+ int buflen = 12 + MAXPATHLEN + 1;
+ char *ret = mpath;
+ char *path = name;
+ char *uname = NULL;
+ struct bstrList *pathlist = NULL;
+ cnid_t cnid = dir->d_pdid;
+
+ /* Create list for path elements, request 16 list elements for now*/
+ if ((pathlist = bstListCreateMin(16)) == NULL) {
+ LOG(log_error, logtype_afpd, "makemacpath: OOM: %s", strerror(errno));
+ return NULL;
+ }
+
+ while ( cnid != DIRDID_ROOT ) {
+
+ /* construct path, copy already found uname to path element list*/
+ if ((bstrListPush(pathlist, bfromcstr(path))) != BSTR_OK) {
+ afp_errno = AFPERR_MISC;
+ ret = NULL;
+ goto exit;
+ }
+
+ /* next part */
+ if ((uname = cnid_resolve(vol->v_cdb, &cnid, buffer, buflen)) == NULL ) {
+ afp_errno = AFPERR_NOOBJ;
+ ret = NULL;
+ goto exit;
+ }