From: <ga...@us...> - 2009-01-21 13:34:33
|
Revision: 4900 http://jnode.svn.sourceforge.net/jnode/?rev=4900&view=rev Author: galatnm Date: 2009-01-21 13:34:29 +0000 (Wed, 21 Jan 2009) Log Message: ----------- Updates. Modified Paths: -------------- trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java trunk/fs/src/fs/org/jnode/fs/hfsplus/command/FormatHfsPlusCommand.java Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java 2009-01-21 13:33:54 UTC (rev 4899) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java 2009-01-21 13:34:29 UTC (rev 4900) @@ -144,6 +144,10 @@ // --- log.debug("Write allocation bitmap bits to disk."); // --- + log.debug("Write Catalog to disk."); + long offset = sb.getCatalogFile().getExtents()[0].getStartBlock() * sb.getBlockSize(); + Catalog catalog = new Catalog(params); + this.getApi().write(offset, catalog.getBytes()); log.debug("Write volume header to disk."); this.getApi().write(1024, ByteBuffer.wrap(sb.getBytes())); flush(); Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java 2009-01-21 13:33:54 UTC (rev 4899) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java 2009-01-21 13:34:29 UTC (rev 4900) @@ -23,6 +23,8 @@ private NodeDescriptor btnd; private BTHeaderRecord bthr; private int firstNodeOffset; + + private ByteBuffer buffer; /** * Create new Catalog @@ -30,10 +32,11 @@ * @param params */ public Catalog(HFSPlusParams params) { - btnd = new NodeDescriptor(); - btnd.setKind(HfsPlusConstants.BT_HEADER_NODE); - btnd.setHeight(0); - btnd.setRecordCount(3); + NodeDescriptor nd = new NodeDescriptor(); + nd.setKind(HfsPlusConstants.BT_HEADER_NODE); + nd.setHeight(0); + nd.setRecordCount(3); + btnd = nd; // bthr = new BTHeaderRecord(); bthr.setTreeDepth(1); @@ -47,16 +50,31 @@ bthr.setClumpSize(params.getCatalogClumpSize()); // TODO initialize attributes, max key length and key comparaison type. // Root directory - CatalogKey ck = new CatalogKey(CatalogNodeId.HFSPLUS_POR_CNID, new HFSUnicodeString(params.getVolumeName())); + nd = new NodeDescriptor(); + nd.setKind(HfsPlusConstants.BT_LEAF_NODE); + nd.setHeight(1); + nd.setRecordCount(params.isJournaled() ? 6 : 2); + HFSUnicodeString name = new HFSUnicodeString(params.getVolumeName()); + CatalogKey ck = new CatalogKey(CatalogNodeId.HFSPLUS_POR_CNID, name); CatalogFolder folder = new CatalogFolder(); folder.setFolderId(CatalogNodeId.HFSPLUS_ROOT_CNID); folder.setValence(params.isJournaled() ? 2 : 0); // TODO creation date, content modification date, text encoding and access rights. - ck = new CatalogKey(CatalogNodeId.HFSPLUS_ROOT_CNID, new HFSUnicodeString("")); + ck = new CatalogKey(CatalogNodeId.HFSPLUS_ROOT_CNID, name); CatalogThread ct = new CatalogThread(HfsPlusConstants.RECORD_TYPE_FOLDER_THREAD, CatalogNodeId.HFSPLUS_ROOT_CNID, new HFSUnicodeString("")); + buffer = ByteBuffer.allocate(134); + buffer.put(btnd.getBytes()); + buffer.position(14); + buffer.put(bthr.getBytes()); + buffer.position(120); + buffer.put(nd.getBytes()); } + public ByteBuffer getBytes() { + return buffer; + } + /** * Create Catalog based on meta-data that exist on the file system. * Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/command/FormatHfsPlusCommand.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/command/FormatHfsPlusCommand.java 2009-01-21 13:33:54 UTC (rev 4899) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/command/FormatHfsPlusCommand.java 2009-01-21 13:34:29 UTC (rev 4900) @@ -10,7 +10,7 @@ public class FormatHfsPlusCommand extends AbstractFormatCommand<HfsPlusFileSystem> { - private final StringArgument ARG_VOLUME_NAME = new StringArgument("volumename", Argument.OPTIONAL, + private final StringArgument ARG_VOLUME_NAME = new StringArgument("volumeName", Argument.OPTIONAL, "set volume name"); public FormatHfsPlusCommand() { @@ -26,7 +26,7 @@ @Override protected Formatter<HfsPlusFileSystem> getFormatter() { HFSPlusParams params = new HFSPlusParams(); - params.setVolumeName(ARG_VOLUME_NAME.getValue()); + params.setVolumeName((ARG_VOLUME_NAME.isSet()) ? ARG_VOLUME_NAME.getValue() : "untitled"); params.setBlockSize(params.OPTIMAL_BLOCK_SIZE); params.setJournaled(false); params.setJournalSize(params.DEFAULT_JOURNAL_SIZE); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |