From: <ga...@us...> - 2009-01-16 15:23:39
|
Revision: 4874 http://jnode.svn.sourceforge.net/jnode/?rev=4874&view=rev Author: galatnm Date: 2009-01-16 15:23:29 +0000 (Fri, 16 Jan 2009) Log Message: ----------- Updates Modified Paths: -------------- trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java 2009-01-16 15:16:27 UTC (rev 4873) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java 2009-01-16 15:23:29 UTC (rev 4874) @@ -1,6 +1,8 @@ package org.jnode.fs.hfsplus; import java.io.IOException; +import java.util.Calendar; +import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -10,6 +12,7 @@ import org.jnode.fs.hfsplus.catalog.CatalogFolder; import org.jnode.fs.hfsplus.catalog.CatalogKey; import org.jnode.fs.hfsplus.catalog.CatalogNodeId; +import org.jnode.fs.hfsplus.catalog.CatalogThread; import org.jnode.fs.hfsplus.tree.LeafRecord; import org.jnode.fs.spi.AbstractFSDirectory; import org.jnode.fs.spi.FSEntryTable; @@ -37,16 +40,32 @@ throw new ReadOnlyFileSystemException(); } Superblock volumeHeader = ((HfsPlusFileSystem) getFileSystem()).getVolumeHeader(); + + Calendar now = Calendar.getInstance(); + now.setTime(new Date()); + int macDate = (int) HFSUtils.getDate(now.getTimeInMillis() / 1000, true); + + HFSUnicodeString dirName = new HFSUnicodeString(name); + CatalogThread thread = new CatalogThread(HfsPlusConstants.RECORD_TYPE_FOLDER_THREAD,this.folder.getFolderId(),dirName); + CatalogFolder newFolder = new CatalogFolder(); newFolder.setFolderId(new CatalogNodeId(volumeHeader.getNextCatalogId())); + newFolder.setCreateDate(macDate); + newFolder.setContentModDate(macDate); + newFolder.setAttrModDate(macDate); log.debug("New catalog folder :\n" + newFolder.toString()); - CatalogKey key = new CatalogKey(this.folder.getFolderId(), new HFSUnicodeString(name)); + + CatalogKey key = new CatalogKey(this.folder.getFolderId(), dirName); log.debug("New catalog key :\n" + key.toString()); + + LeafRecord folderRecord = new LeafRecord(key, newFolder.getBytes()); log.debug("New record folder :\n" + folderRecord.toString()); + HFSPlusEntry newEntry = new HFSPlusEntry((HfsPlusFileSystem) getFileSystem(), null, this, name, folderRecord); volumeHeader.setFolderCount(volumeHeader.getFolderCount() + 1); log.debug("New volume header :\n" + volumeHeader.toString()); + return newEntry; } @@ -56,7 +75,9 @@ } public synchronized void remove(String name) throws IOException { - throw new ReadOnlyFileSystemException(); + if (!canWrite()) { + throw new ReadOnlyFileSystemException(); + } } @Override Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java 2009-01-16 15:16:27 UTC (rev 4873) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/HfsPlusFileSystem.java 2009-01-16 15:23:29 UTC (rev 4874) @@ -127,8 +127,7 @@ params.initializeDefaultsValues(this.getApi().getLength(), this.getFSApi().getSectorSize()); sb.create(params); //--- - long volumeBlockUsed = sb.getTotalBlocks() - sb.getFreeBlocks(); - if(sb.getBlockSize() != 512) volumeBlockUsed++; + long volumeBlockUsed = sb.getTotalBlocks() - sb.getFreeBlocks() - ((sb.getBlockSize() == 512)?2:1); //--- log.debug("Write allocation bitmap bits to disk."); //--- Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java 2009-01-16 15:16:27 UTC (rev 4873) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java 2009-01-16 15:23:29 UTC (rev 4874) @@ -47,13 +47,25 @@ return BigEndian.getInt32(data, 12); } + public void setCreateDate(int time){ + BigEndian.setInt32(data, 12, time); + } + public final int getContentModDate() { return BigEndian.getInt32(data, 16); } + + public void setContentModDate(int time){ + BigEndian.setInt32(data, 16, time); + } public final int getAttrModDate() { return BigEndian.getInt32(data, 20); } + + public void setAttrModDate(int time){ + BigEndian.setInt32(data, 20, time); + } public byte[] getBytes() { return data; @@ -66,9 +78,9 @@ s.append("Folder ID: ").append(getFolderId().getId()).append("\n"); s.append("Creation Date :").append(HFSUtils.printDate(getCreateDate(), "EEE MMM d HH:mm:ss yyyy")).append("\n"); s.append("Content Mod Date :").append(HFSUtils.printDate(getContentModDate(), "EEE MMM d HH:mm:ss yyyy")) - .append("\n"); + .append("\n"); s.append("Attr Mod Date :").append(HFSUtils.printDate(getAttrModDate(), "EEE MMM d HH:mm:ss yyyy")).append( - "\n"); + "\n"); return s.toString(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |