You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Simon Spero (JIRA)" <ji...@apache.org> on 2017/06/20 21:23:00 UTC
[jira] [Commented] (COMPRESS-281) Archives don't contain resource
fork on Macs
[ https://issues.apache.org/jira/browse/COMPRESS-281?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16056488#comment-16056488 ]
Simon Spero commented on COMPRESS-281:
--------------------------------------
Things changed so that now this info is stored as an xattr, with the legacy "..namedfork/rsrc" being just another attribute. Before, extended attributes were stored as a special fork.
In <sys/xattr.h>
{{#define XATTR_RESOURCEFORK_NAME "com.apple.ResourceFork"}}
The MacOS release of openjdk doesn't an extended attribute (UserDefined) file view. An implementation would be quite similar to the Linux version; however, no-one has added it since JDK 7 came out; support isn't included in JDK-9 either. You could implement the required code, and write a shim around default FileSystemProvider to do the extra attribute wrangling.
The default provider can be replaced using the mechanism discussed in [FileSystems::getDefault | https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystems.html#getDefault()], which requires setting a system property. This probably has to be done on the command line, since by the time any user code is executed the default file system will probably have been instantiated. Note that the value of the property can be a list of classes; these will be instantiated in the order in which they are given. Each instance will be passed as an argument to the next, with the first class being passed an instance of the system default classloader; the final class will become the actual default.
The wrapper implementation delegate most methods to the passed in provider. The obvious places where changes are needed
are in the attribute related methods. The wrapper also needs to create a mostly delegating instance of FileSystem, with changes to return the right provider and add "user" to the list of supported file views.
It probably also needs to provide an implementation of UserDefinedFileAttributeView, and some native code to invoke the appropriate system call.
The Linux implementation, which needs a few extra system call wrappers in its Dispatcher:
[LinuxUserDefinedFileAttributeView.java|http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/e03f9868f7df/src/solaris/classes/sun/nio/fs/LinuxUserDefinedFileAttributeView.java] which relies on a few NIO methods in
[LinuxNativeDispatcher.c| http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/e03f9868f7df/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c#l83 ]
Or the Solaris implementation, which uses a solaris-specific flag - the jdk 8 sources are a little solaris biased, as you may have spotted from the url path.
[SolarisUserDefineFileAttributeView.java|http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/e03f9868f7df/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java]
This is probably a bit out of scope.
An alternative disgustingly hacky approach would be to use /usr/bin/xattr, which can make the system calls, and can read/dump the contents of an attribute in hex. Did I mention that /usr/bin/xattr is a python script? Feel the performance flow through you.
> Archives don't contain resource fork on Macs
> --------------------------------------------
>
> Key: COMPRESS-281
> URL: https://issues.apache.org/jira/browse/COMPRESS-281
> Project: Commons Compress
> Issue Type: Wish
> Reporter: Dimple Rohara
> Priority: Critical
>
> Currently, we are able to create archive on windows. But for Mac,it doesn't save the resource fork information. I wish there was more compatibility among the archives created on different Operating systems and could be used easily cross-platform.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)