Author: mmlr Date: 2010-02-28 09:50:01 +0100 (Sun, 28 Feb 2010) New Revision: 35654 Changeset: http://dev.haiku-os.org/changeset/35654/haiku Modified: haiku/trunk/src/add-ons/kernel/file_systems/udf/Icb.cpp haiku/trunk/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp Log: * Finish the partition scanning part so that UDF is recognized and mountable. * Added myself to the copyrights. Modified: haiku/trunk/src/add-ons/kernel/file_systems/udf/Icb.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/file_systems/udf/Icb.cpp 2010-02-28 08:03:41 UTC (rev 35653) +++ haiku/trunk/src/add-ons/kernel/file_systems/udf/Icb.cpp 2010-02-28 08:50:01 UTC (rev 35654) @@ -1,9 +1,9 @@ -//---------------------------------------------------------------------- -// This software is part of the Haiku distribution and is covered -// by the MIT license. -// -// Copyright (c) 2003 Tyler Dauwalder, tyler@xxxxxxxxxxxxx -//--------------------------------------------------------------------- +/* + * Copyright 2003, Tyler Dauwalder, tyler@xxxxxxxxxxxxxx + * Copyright 2010, Michael Lotz, mmlr@xxxxxxxxx + * Distributed under the terms of the MIT License. + */ + #include "Icb.h" #include "time.h" Modified: haiku/trunk/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp 2010-02-28 08:03:41 UTC (rev 35653) +++ haiku/trunk/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp 2010-02-28 08:50:01 UTC (rev 35654) @@ -1,6 +1,7 @@ /* + * Copyright 2003, Tyler Dauwalder, tyler@xxxxxxxxxxxxxx * Copyright 2008, Salvatore Benedetto, salvatore.benedetto@xxxxxxxxxx - * Copyright 2003, Tyler Dauwalder, tyler@xxxxxxxxxxxxxx + * Copyright 2010, Michael Lotz, mmlr@xxxxxxxxx * Distributed under the terms of the MIT License. */ @@ -39,6 +40,11 @@ extern fs_vnode_ops gUDFVnodeOps; +struct identify_cookie { + struct logical_volume_descriptor logical_volume_descriptor; +}; + + // #pragma mark - io callbacks @@ -82,6 +88,12 @@ if (error != B_OK) return -1; + identify_cookie *cookie = new(std::nothrow) identify_cookie; + if (cookie == NULL) + return -1; + + cookie->logical_volume_descriptor = logicalVolumeDescriptor; + *_cookie = cookie; return 0.8f; } @@ -90,15 +102,32 @@ udf_scan_partition(int fd, partition_data *partition, void *_cookie) { TRACE(("udf_scan_partition: fd = %d\n", fd)); + identify_cookie *cookie = (identify_cookie *)_cookie; + logical_volume_descriptor &volumeDescriptor + = cookie->logical_volume_descriptor; -#if 0 - UdfString name(logicalVolumeDescriptor.logical_volume_identifier()); + partition->status = B_PARTITION_VALID; + partition->flags |= B_PARTITION_FILE_SYSTEM; + partition->content_size = partition->size; + // TODO: not actually correct + partition->block_size = volumeDescriptor.logical_block_size(); + + UdfString name(volumeDescriptor.logical_volume_identifier()); partition->content_name = strdup(name.Utf8()); -#endif - return B_ERROR; + if (partition->content_name == NULL) + return B_NO_MEMORY; + + return B_OK; } +static void +udf_free_identify_partition_cookie(partition_data *partition, void *cookie) +{ + delete (identify_cookie *)cookie; +} + + static status_t udf_unmount(fs_volume *_volume) { @@ -696,7 +725,7 @@ &udf_identify_partition, &udf_scan_partition, - NULL, // &udf_free_identify_patition_cookie, + &udf_free_identify_partition_cookie, NULL, // free_partition_content_cookie() &udf_mount,