Revision: 5617 http://jnode.svn.sourceforge.net/jnode/?rev=5617&view=rev Author: galatnm Date: 2009-07-22 13:28:52 +0000 (Wed, 22 Jul 2009)
Log Message: ----------- Check remaining space when insert a record in a node. Modified Paths: -------------- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogNode.java trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/AbstractNode.java trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/Node.java Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogNode.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogNode.java 2009-07-22 10:07:29 UTC (rev 5616) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogNode.java 2009-07-22 13:28:52 UTC (rev 5617) @@ -42,8 +42,8 @@ public CatalogNode(NodeDescriptor descriptor, final int nodeSize) { this.descriptor = descriptor; this.size = nodeSize; - this.records = new ArrayList<NodeRecord>(this.descriptor.getNumRecords()); - this.offsets = new ArrayList<Integer>(this.descriptor.getNumRecords() + 1); + this.records = new ArrayList<NodeRecord>(descriptor.getNumRecords()); + this.offsets = new ArrayList<Integer>(descriptor.getNumRecords() + 1); this.offsets.add(Integer.valueOf(NodeDescriptor.BT_NODE_DESCRIPTOR_LENGTH)); } Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/AbstractNode.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/AbstractNode.java 2009-07-22 10:07:29 UTC (rev 5616) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/AbstractNode.java 2009-07-22 13:28:52 UTC (rev 5617) @@ -52,13 +52,40 @@ public abstract NodeRecord getNodeRecord(int index); @Override - public void addNodeRecord(NodeRecord record) { + public boolean addNodeRecord(NodeRecord record) { + int freeSpace = getFreeSize(); + if(freeSpace < record.getSize() + 2){ + return false; + } Integer lastOffset = offsets.get(offsets.size() - 1); Integer newOffset = lastOffset + record.getSize(); offsets.add(newOffset); records.add(record); + return true; } - + + public boolean check(int treeHeigth){ + // Node type is correct. + if(this.getNodeDescriptor().getKind() < NodeDescriptor.BT_LEAF_NODE || this.getNodeDescriptor().getKind() > NodeDescriptor.BT_MAP_NODE){ + return false; + } + + if(this.getNodeDescriptor().getHeight() > treeHeigth){ + return false; + } + return true; + } + + /** + * Return amount of free space remaining. + * @return remaining free space. + */ + protected int getFreeSize(){ + int freeOffset = offsets.get(offsets.size() - 1); + int freeSize = size - freeOffset - (descriptor.getNumRecords() << 1) - OFFSET_SIZE; + return freeSize; + } + public byte[] getBytes() { byte[] datas = new byte[size]; System.arraycopy(descriptor.getBytes(), 0, datas, 0, NodeDescriptor.BT_NODE_DESCRIPTOR_LENGTH); Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/Node.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/Node.java 2009-07-22 10:07:29 UTC (rev 5616) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/Node.java 2009-07-22 13:28:52 UTC (rev 5617) @@ -17,16 +17,29 @@ * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ - + package org.jnode.fs.hfsplus.tree; +public interface Node { + public final static int OFFSET_SIZE = 2; -public interface Node { public NodeDescriptor getNodeDescriptor(); + public boolean isIndexNode(); + public boolean isLeafNode(); + public int getRecordOffset(int index); + public NodeRecord getNodeRecord(int index); - public void addNodeRecord(NodeRecord record); + + /** + * Insert a record in the node. + * + * @param record The record to insert. + * @return True if record is correctly inserted, false if there is not + * enough place to insert the record. + */ + public boolean addNodeRecord(NodeRecord record); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ _______________________________________________ Jnode-svn-commits mailing list Jnode-svn-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jnode-svn-commits