void ntfs_ie_filename_dump(INDEX_ENTRY *ie) { char *s; s = ntfs_ie_filename_get(ie); ntfs_log_debug("'%s' ", s); ntfs_attr_name_free(&s); }
status_t fs_read_attrib_dir(fs_volume *_vol, fs_vnode *_node, void *_cookie, struct dirent *entry, size_t bufsize, uint32 *num) { nspace *ns = (nspace *)_vol->private_volume; vnode *node = (vnode *)_node->private_node; char *name = NULL; attrdircookie *cookie = (attrdircookie *)_cookie; uint32 numEntries = 0; status_t result = B_NO_ERROR; if (cookie->ctx == NULL) panic("cookie->ctx == NULL"); LOCK_VOL(ns); TRACE("%s - ENTER\n", __FUNCTION__); while (!(result = ntfs_attrs_walk(cookie->ctx))) { ATTR_RECORD *attr = cookie->ctx->attr; if (attr->type == AT_DATA) { // it's the actual file body if (attr->name_length == 0) continue; name = ntfs_attr_name_get((const ntfschar *)(((char *)attr) + attr->name_offset), attr->name_length); dprintf("found AT_DATA '%s'\n", name); bufsize = MIN(bufsize, sizeof(struct dirent) + strlen(name) + 1); entry->d_ino = node->vnid; entry->d_dev = ns->id; entry->d_reclen = sizeof(struct dirent) + strlen(name); //XXX size strcpy(entry->d_name, name); ntfs_attr_name_free(&name); numEntries++; if (numEntries >= *num) break; break; } } if (result && errno != ENOENT) { result = errno; goto exit; } else result = B_OK; exit: TRACE("%s - EXIT, result is %s, *num %d\n", __FUNCTION__, strerror(result), *num); UNLOCK_VOL(ns); if (result) *num = 0; else *num = numEntries; return result; }