diff --git a/src/add-ons/kernel/file_systems/udf/Icb.cpp b/src/add-ons/kernel/file_systems/udf/Icb.cpp index f2607c9ee5..61d3f31be6 100644 --- a/src/add-ons/kernel/file_systems/udf/Icb.cpp +++ b/src/add-ons/kernel/file_systems/udf/Icb.cpp @@ -16,8 +16,8 @@ status_t DirectoryIterator::GetNextEntry(char *name, uint32 *length, ino_t *id) { - TRACE(("DirectoryIterator::GetNextEntry: name = %p, length = %p, id = %p\n", - name, length, id)); + TRACE(("DirectoryIterator::GetNextEntry: name = %s, length = %ld, id = %p\n", + name, *length, id)); if (!id || !name || !length) return B_BAD_VALUE; @@ -27,6 +27,7 @@ DirectoryIterator::GetNextEntry(char *name, uint32 *length, ino_t *id) status_t status = B_OK; if (fAtBeginning) { + TRACE(("DirectoryIterator::GetNextEntry: .\n")); sprintf(name, "."); *length = 2; *id = Parent()->Id(); @@ -52,14 +53,16 @@ DirectoryIterator::GetNextEntry(char *name, uint32 *length, ino_t *id) offset += entry->total_length(); if (entry->is_parent()) { + TRACE(("DirectoryIterator::GetNextEntry: ..\n")); sprintf(name, ".."); *length = 3; } else { + TRACE(("DirectoryIterator::GetNextEntry: UfdString\n")); UdfString string(entry->id(), entry->id_length()); TRACE(("\tid == `%s'\n", string.Utf8())); DUMP(entry->icb()); sprintf(name, "%s", string.Utf8()); - *length = string.Utf8Length(); + *length = string.Utf8Length() + 1; } *id = to_vnode_id(entry->icb()); } @@ -172,7 +175,7 @@ Icb::ModificationTime() status_t Icb::Read(off_t pos, void *buffer, size_t *length, uint32 *block) { - TRACE(("Icb::Read: pos = %Ld, buffer = %p, length = (%p)->%ld", + TRACE(("Icb::Read: pos = %Ld, buffer = %p, length = (%p)->%ld\n", pos, buffer, length, (length ? *length : 0))); if (!buffer || !length || pos < 0) diff --git a/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp b/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp index 4f90ee5cc8..494c0ffc07 100644 --- a/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp @@ -184,12 +184,13 @@ udf_lookup(fs_volume *_volume, fs_vnode *_directory, const char *file, static status_t udf_put_vnode(fs_volume *volume, fs_vnode *node, bool reenter) { + TRACE(("udf_put_vnode: volume = %p, node = %p\n", volume, node)); // No debug-to-file in release_vnode; can cause a deadlock in // rare circumstances. #if !DEBUG_TO_FILE DEBUG_INIT_ETC(NULL, ("node: %p", node)); #endif - Icb *icb = reinterpret_cast(node); + Icb *icb = (Icb *)node->private_node; delete icb; #if !DEBUG_TO_FILE RETURN(B_OK); @@ -199,6 +200,14 @@ udf_put_vnode(fs_volume *volume, fs_vnode *node, bool reenter) } +static status_t +udf_remove_vnode(fs_volume* _volume, fs_vnode* _node, bool reenter) +{ + TRACE(("udf_remove_vnode: _volume = %p, _node = %p\n", _volume, _node)); + return B_ERROR; +} + + static status_t udf_read_stat(fs_volume *_volume, fs_vnode *node, struct stat *stat) { @@ -353,14 +362,15 @@ udf_read_dir(fs_volume *_volume, fs_vnode *vnode, void *cookie, return B_BAD_VALUE; } - uint32 nameLength = bufferSize - sizeof(dirent) + 1; + uint32 nameLength = bufferSize - sizeof(struct dirent) + 1; ino_t id; status_t status = iterator->GetNextEntry(dirent->d_name, &nameLength, &id); + TRACE(("udf_read_dir: dirent->d_name = %s, length = %ld\n", dirent->d_name, nameLength)); if (!status) { *_num = 1; dirent->d_dev = volume->ID(); dirent->d_ino = id; - dirent->d_reclen = sizeof(dirent) + nameLength - 1; + dirent->d_reclen = sizeof(struct dirent) + nameLength - 1; } else { *_num = 0; // Clear the status for end of directory @@ -375,24 +385,24 @@ udf_read_dir(fs_volume *_volume, fs_vnode *vnode, void *cookie, status_t udf_rewind_dir(fs_volume *volume, fs_vnode *vnode, void *cookie) { - DEBUG_INIT_ETC(NULL, - ("dir: %p, iterator: %p", node, cookie)); + TRACE(("udf_rewind_dir: volume = %p, vnode = %p, cookie = %p\n", + volume, vnode, cookie)); if (!volume || !vnode || !cookie) RETURN(B_BAD_VALUE); Icb *dir = (Icb *)vnode->private_node; - DirectoryIterator *iterator = reinterpret_cast(cookie); + DirectoryIterator *iterator = (DirectoryIterator *)cookie; if (dir != iterator->Parent()) { - PRINT(("Icb does not match parent Icb of given DirectoryIterator! (iterator->Parent = %p)\n", - iterator->Parent())); + PRINT(("udf_rewind_dir: icb does not match parent Icb of given " + "DirectoryIterator! (iterator->Parent = %p)\n", iterator->Parent())); return B_BAD_VALUE; } iterator->Rewind(); - RETURN(B_OK); + return B_OK; } @@ -548,7 +558,7 @@ fs_vnode_ops gUDFVnodeOps = { &udf_lookup, NULL, // get_vnode_name &udf_put_vnode, - NULL, // remove_vnode + &udf_remove_vnode, /* VM file access */ NULL, // can_page