3333
3434namespace android {
3535
36- static jfieldID gFileStatusDevFieldID ;
37- static jfieldID gFileStatusInoFieldID ;
38- static jfieldID gFileStatusModeFieldID ;
39- static jfieldID gFileStatusNlinkFieldID ;
40- static jfieldID gFileStatusUidFieldID ;
41- static jfieldID gFileStatusGidFieldID ;
42- static jfieldID gFileStatusSizeFieldID ;
43- static jfieldID gFileStatusBlksizeFieldID ;
44- static jfieldID gFileStatusBlocksFieldID ;
45- static jfieldID gFileStatusAtimeFieldID ;
46- static jfieldID gFileStatusMtimeFieldID ;
47- static jfieldID gFileStatusCtimeFieldID ;
48-
4936jint android_os_FileUtils_setPermissions (JNIEnv* env, jobject clazz,
5037 jstring file, jint mode,
5138 jint uid, jint gid)
@@ -68,39 +55,6 @@ jint android_os_FileUtils_setPermissions(JNIEnv* env, jobject clazz,
6855 return chmod (file8.string (), mode) == 0 ? 0 : errno;
6956}
7057
71- jint android_os_FileUtils_getPermissions (JNIEnv* env, jobject clazz,
72- jstring file, jintArray outArray)
73- {
74- const jchar* str = env->GetStringCritical (file, 0 );
75- String8 file8;
76- if (str) {
77- file8 = String8 (str, env->GetStringLength (file));
78- env->ReleaseStringCritical (file, str);
79- }
80- if (file8.size () <= 0 ) {
81- return ENOENT ;
82- }
83- struct stat st;
84- if (stat (file8.string (), &st) != 0 ) {
85- return errno;
86- }
87- jint* array = (jint*)env->GetPrimitiveArrayCritical (outArray, 0 );
88- if (array) {
89- int len = env->GetArrayLength (outArray);
90- if (len >= 1 ) {
91- array[0 ] = st.st_mode ;
92- }
93- if (len >= 2 ) {
94- array[1 ] = st.st_uid ;
95- }
96- if (len >= 3 ) {
97- array[2 ] = st.st_gid ;
98- }
99- }
100- env->ReleasePrimitiveArrayCritical (outArray, array, 0 );
101- return 0 ;
102- }
103-
10458jint android_os_FileUtils_setUMask (JNIEnv* env, jobject clazz, jint mask)
10559{
10660 return umask (mask);
@@ -127,63 +81,16 @@ jint android_os_FileUtils_getFatVolumeId(JNIEnv* env, jobject clazz, jstring pat
12781 return result;
12882}
12983
130- jboolean android_os_FileUtils_getFileStatus (JNIEnv* env, jobject clazz, jstring path, jobject fileStatus) {
131- const char * pathStr = env->GetStringUTFChars (path, NULL );
132- jboolean ret = false ;
133-
134- struct stat s;
135- int res = stat (pathStr, &s);
136- if (res == 0 ) {
137- ret = true ;
138- if (fileStatus != NULL ) {
139- env->SetIntField (fileStatus, gFileStatusDevFieldID , s.st_dev );
140- env->SetIntField (fileStatus, gFileStatusInoFieldID , s.st_ino );
141- env->SetIntField (fileStatus, gFileStatusModeFieldID , s.st_mode );
142- env->SetIntField (fileStatus, gFileStatusNlinkFieldID , s.st_nlink );
143- env->SetIntField (fileStatus, gFileStatusUidFieldID , s.st_uid );
144- env->SetIntField (fileStatus, gFileStatusGidFieldID , s.st_gid );
145- env->SetLongField (fileStatus, gFileStatusSizeFieldID , s.st_size );
146- env->SetIntField (fileStatus, gFileStatusBlksizeFieldID , s.st_blksize );
147- env->SetLongField (fileStatus, gFileStatusBlocksFieldID , s.st_blocks );
148- env->SetLongField (fileStatus, gFileStatusAtimeFieldID , s.st_atime );
149- env->SetLongField (fileStatus, gFileStatusMtimeFieldID , s.st_mtime );
150- env->SetLongField (fileStatus, gFileStatusCtimeFieldID , s.st_ctime );
151- }
152- }
153-
154- env->ReleaseStringUTFChars (path, pathStr);
155-
156- return ret;
157- }
158-
15984static const JNINativeMethod methods[] = {
16085 {" setPermissions" , " (Ljava/lang/String;III)I" , (void *)android_os_FileUtils_setPermissions},
161- {" getPermissions" , " (Ljava/lang/String;[I)I" , (void *)android_os_FileUtils_getPermissions},
16286 {" setUMask" , " (I)I" , (void *)android_os_FileUtils_setUMask},
16387 {" getFatVolumeId" , " (Ljava/lang/String;)I" , (void *)android_os_FileUtils_getFatVolumeId},
164- {" getFileStatusNative" , " (Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z" , (void *)android_os_FileUtils_getFileStatus},
16588};
16689
16790static const char * const kFileUtilsPathName = " android/os/FileUtils" ;
16891
16992int register_android_os_FileUtils (JNIEnv* env)
17093{
171- jclass fileStatusClass = env->FindClass (" android/os/FileUtils$FileStatus" );
172- LOG_FATAL_IF (fileStatusClass == NULL , " Unable to find class android.os.FileUtils$FileStatus" );
173-
174- gFileStatusDevFieldID = env->GetFieldID (fileStatusClass, " dev" , " I" );
175- gFileStatusInoFieldID = env->GetFieldID (fileStatusClass, " ino" , " I" );
176- gFileStatusModeFieldID = env->GetFieldID (fileStatusClass, " mode" , " I" );
177- gFileStatusNlinkFieldID = env->GetFieldID (fileStatusClass, " nlink" , " I" );
178- gFileStatusUidFieldID = env->GetFieldID (fileStatusClass, " uid" , " I" );
179- gFileStatusGidFieldID = env->GetFieldID (fileStatusClass, " gid" , " I" );
180- gFileStatusSizeFieldID = env->GetFieldID (fileStatusClass, " size" , " J" );
181- gFileStatusBlksizeFieldID = env->GetFieldID (fileStatusClass, " blksize" , " I" );
182- gFileStatusBlocksFieldID = env->GetFieldID (fileStatusClass, " blocks" , " J" );
183- gFileStatusAtimeFieldID = env->GetFieldID (fileStatusClass, " atime" , " J" );
184- gFileStatusMtimeFieldID = env->GetFieldID (fileStatusClass, " mtime" , " J" );
185- gFileStatusCtimeFieldID = env->GetFieldID (fileStatusClass, " ctime" , " J" );
186-
18794 return AndroidRuntime::registerNativeMethods (
18895 env, kFileUtilsPathName ,
18996 methods, NELEM (methods));
0 commit comments