Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/macosx/native_NOTIOS/com/apple/eio/CFileManager.m
38829 views
/*1* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#import "com_apple_eio_FileManager.h"2627#import <Cocoa/Cocoa.h>28#import <JavaNativeFoundation/JavaNativeFoundation.h>2930#import "ThreadUtilities.h"313233/*34* Class: com_apple_eio_FileManager35* Method: _setFileTypeAndCreator36* Signature: (Ljava/lang/String;II)V37*/38JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileTypeAndCreator39(JNIEnv *env, jclass clz, jstring javaFilename, jint type, jint creator)40{41JNF_COCOA_ENTER(env);42NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);43NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:44[NSNumber numberWithInt:type], NSFileHFSTypeCode,45[NSNumber numberWithInt:creator], NSFileHFSCreatorCode, nil];46[[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];47JNF_COCOA_EXIT(env);48}4950/*51* Class: com_apple_eio_FileManager52* Method: _setFileType53* Signature: (Ljava/lang/String;I)V54*/55JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileType56(JNIEnv *env, jclass ckz, jstring javaFilename, jint type)57{58JNF_COCOA_ENTER(env);59NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);60NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:type] forKey:NSFileHFSTypeCode];61[[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];62JNF_COCOA_EXIT(env);63}6465/*66* Class: com_apple_eio_FileManager67* Method: _setFileCreator68* Signature: (Ljava/lang/String;I)V69*/70JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileCreator71(JNIEnv *env, jclass clz, jstring javaFilename, jint creator)72{73JNF_COCOA_ENTER(env);74NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);75NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:creator] forKey:NSFileHFSCreatorCode];76[[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];77JNF_COCOA_EXIT(env);78}7980/*81* Class: com_apple_eio_FileManager82* Method: _getFileType83* Signature: (Ljava/lang/String;)I84*/85JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileType86(JNIEnv *env, jclass clz, jstring javaFilename)87{88jint type = 0;89JNF_COCOA_ENTER(env);90NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);91NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];92NSNumber *val = [attributes objectForKey:NSFileHFSTypeCode];93type = [val intValue];94JNF_COCOA_EXIT(env);95return type;96}9798/*99* Class: com_apple_eio_FileManager100* Method: _getFileCreator101* Signature: (Ljava/lang/String;)I102*/103JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileCreator104(JNIEnv *env, jclass clz, jstring javaFilename)105{106jint creator = 0;107JNF_COCOA_ENTER(env);108NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);109NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];110NSNumber *val = [attributes objectForKey:NSFileHFSCreatorCode];111creator = [val intValue];112JNF_COCOA_EXIT(env);113return creator;114}115116/*117* Class: com_apple_eio_FileManager118* Method: _findFolder119* Signature: (SIZ)Ljava/lang/String;120*/121JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager__1findFolder__SIZ122(JNIEnv *env, jclass clz, jshort domain, jint folderType, jboolean createIfNeeded)123{124jstring filename = nil;125JNF_COCOA_ENTER(env);126127FSRef foundRef;128createIfNeeded = createIfNeeded || (folderType == kTemporaryFolderType) || (folderType == kChewableItemsFolderType);129if (FSFindFolder((SInt16)domain, (OSType)folderType, (Boolean)createIfNeeded, &foundRef) == noErr) {130char path[PATH_MAX];131if (FSRefMakePath(&foundRef, (UInt8 *)path, sizeof(path)) == noErr) {132NSString *filenameString = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];133filename = JNFNormalizedJavaStringForPath(env, filenameString);134}135}136137JNF_COCOA_EXIT(env);138return filename;139}140141142/*143* Class: com_apple_eio_FileManager144* Method: _openURL145* Signature: (Ljava/lang/String;)V146*/147JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1openURL148(JNIEnv *env, jclass clz, jstring urlString)149{150JNF_COCOA_ENTER(env);151152NSURL *url = [NSURL URLWithString:JNFNormalizedNSStringForPath(env, urlString)];153154// Radar 3208005: Run this on the main thread; file:// style URLs will hang otherwise.155[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){156[[NSWorkspace sharedWorkspace] openURL:url];157}];158159JNF_COCOA_EXIT(env);160}161162163/*164* Class: com_apple_eio_FileManager165* Method: getNativeResourceFromBundle166* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;167*/168JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativeResourceFromBundle169(JNIEnv *env, jclass clz, jstring javaResourceName, jstring javaSubDirName, jstring javaTypeName)170{171jstring filename = NULL;172JNF_COCOA_ENTER(env);173174NSString *resourceName = JNFNormalizedNSStringForPath(env, javaResourceName);175NSString *subDirectory = JNFNormalizedNSStringForPath(env, javaSubDirName);176NSString *typeName = JNFNormalizedNSStringForPath(env, javaTypeName);177178NSString *path = [[NSBundle mainBundle] pathForResource:resourceName179ofType:typeName180inDirectory:subDirectory];181182filename = JNFNormalizedJavaStringForPath(env, path);183184JNF_COCOA_EXIT(env);185return filename;186}187188189/*190* Class: com_apple_eio_FileManager191* Method: getNativePathToApplicationBundle192* Signature: ()Ljava/lang/String;193*/194JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativePathToApplicationBundle195(JNIEnv *env, jclass clazz)196{197jstring filename = nil;198JNF_COCOA_ENTER(env);199200NSBundle *mainBundle = [NSBundle mainBundle];201filename = JNFNormalizedJavaStringForPath(env, [mainBundle bundlePath]);202203JNF_COCOA_EXIT(env);204return filename;205}206207208/*209* Class: com_apple_eio_FileManager210* Method: __moveToTrash211* Signature: (Ljava/lang/String;)V212*/213214JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1moveToTrash215(JNIEnv *env, jclass clz, jstring url)216{217__block jboolean returnValue = JNI_FALSE;218JNF_COCOA_ENTER(env);219220NSString *path = JNFNormalizedNSStringForPath(env, url);221[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){222NSInteger res = 0;223[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation224source:[path stringByDeletingLastPathComponent]225destination:nil226files:[NSArray arrayWithObject:[path lastPathComponent]]227tag:&res];228returnValue = (res == 0);229}];230231JNF_COCOA_EXIT(env);232233return returnValue;234}235236/*237* Class: com_apple_eio_FileManager238* Method: __revealInFinder239* Signature: (Ljava/lang/String;)V240*/241242JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1revealInFinder243(JNIEnv *env, jclass clz, jstring url)244{245__block jboolean returnValue = JNI_FALSE;246JNF_COCOA_ENTER(env);247248NSString *path = JNFNormalizedNSStringForPath(env, url);249[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){250returnValue = [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""];251}];252253JNF_COCOA_EXIT(env);254255return returnValue;256}257258259