⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java_io_vmfile.c

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 C
📖 第 1 页 / 共 2 页
字号:
    }  TARGET_NATIVE_FILE_SIZE (tmpfd, length, result);  if (result != TARGET_NATIVE_OK)    {      TARGET_NATIVE_FILE_CLOSE (tmpfd, result);      return (TARGET_NATIVE_MATH_INT_INT64_CONST_0);    }  TARGET_NATIVE_FILE_CLOSE (tmpfd, result);  (*env)->ReleaseStringUTFChars (env, name, filename);  return ((result ==	   TARGET_NATIVE_OK) ? length : TARGET_NATIVE_MATH_INT_INT64_CONST_0);#else /* not WITHOUT_FILESYSTEM */  return (TARGET_NATIVE_MATH_INT_INT64_CONST_0);#endif /* not WITHOUT_FILESYSTEM */}/*************************************************************************//* * This method returns the modification date of the file. * * Class:     java_io_VMFile * Method:    lastModified * Signature: (Ljava/lang/String;)J */JNIEXPORT jlong JNICALLJava_java_io_VMFile_lastModified (JNIEnv * env,				  jobject obj __attribute__ ((__unused__)),				  jstring name){#ifndef WITHOUT_FILESYSTEM  const char *filename;  jlong mtime;  int result;  /* Don't use the JCL convert function because it throws an exception     on failure */  filename = (*env)->GetStringUTFChars (env, name, 0);  if (filename == NULL)    {      return (TARGET_NATIVE_MATH_INT_INT64_CONST_0);    }  TARGET_NATIVE_FILE_GET_LAST_MODIFIED (filename, mtime, result);  (*env)->ReleaseStringUTFChars (env, name, filename);  return ((result ==	   TARGET_NATIVE_OK) ? mtime : TARGET_NATIVE_MATH_INT_INT64_CONST_0);#else /* not WITHOUT_FILESYSTEM */  return (TARGET_NATIVE_MATH_INT_INT64_CONST_0);#endif /* not WITHOUT_FILESYSTEM */}/*************************************************************************//* * This method sets the modification date of the file. * * Class:     java_io_VMFile * Method:    setLastModified * Signature: (Ljava/lang/String;J)Z */JNIEXPORT jboolean JNICALLJava_java_io_VMFile_setLastModified (JNIEnv * env,				     jobject obj __attribute__ ((__unused__)),				     jstring name, jlong newtime){#ifndef WITHOUT_FILESYSTEM  const char *filename;  int result;  /* Don't use the JCL convert function because it throws an exception     on failure */  filename = (*env)->GetStringUTFChars (env, name, 0);  if (filename == NULL)    {      return (0);    }  TARGET_NATIVE_FILE_SET_LAST_MODIFIED (filename, newtime, result);  (*env)->ReleaseStringUTFChars (env, name, filename);  return ((result == TARGET_NATIVE_OK) ? 1 : 0);#else /* not WITHOUT_FILESYSTEM */  return (0);#endif /* not WITHOUT_FILESYSTEM */}/*************************************************************************//* * This method deletes a file (actually a name for a file - additional * links could exist). * * Class:     java_io_VMFile * Method:    delete * Signature: (Ljava/lang/String;)Z */JNIEXPORT jboolean JNICALLJava_java_io_VMFile_delete (JNIEnv * env,			    jobject obj __attribute__ ((__unused__)),			    jstring name){#ifndef WITHOUT_FILESYSTEM  const char *filename;  int result;  /* Don't use the JCL convert function because it throws an exception     on failure */  filename = (*env)->GetStringUTFChars (env, name, 0);  if (filename == NULL)    {      return (0);    }  TARGET_NATIVE_FILE_DELETE (filename, result);  (*env)->ReleaseStringUTFChars (env, name, filename);  return ((result == TARGET_NATIVE_OK) ? 1 : 0);#else /* not WITHOUT_FILESYSTEM */  return (0);#endif /* not WITHOUT_FILESYSTEM */}/*************************************************************************//* * This method creates a directory. * * Class:     java_io_VMFile * Method:    mkdir * Signature: (Ljava/lang/String;)Z */JNIEXPORT jboolean JNICALLJava_java_io_VMFile_mkdir (JNIEnv * env,			   jobject obj __attribute__ ((__unused__)),			   jstring name){#ifndef WITHOUT_FILESYSTEM  const char *pathname;  int result;  /* Don't use the JCL convert function because it throws an exception     on failure */  pathname = (*env)->GetStringUTFChars (env, name, 0);  if (pathname == NULL)    {      return (0);    }  TARGET_NATIVE_FILE_MAKE_DIR (pathname, result);  (*env)->ReleaseStringUTFChars (env, name, pathname);  return ((result == TARGET_NATIVE_OK) ? 1 : 0);#else /* not WITHOUT_FILESYSTEM */  return (0);#endif /* not WITHOUT_FILESYSTEM */}/*************************************************************************//* * This method renames a (link to a) file. * * Class:     java_io_VMFile * Method:    renameTo * Signature: (Ljava/lang/String;Ljava/lang/String;)Z */JNIEXPORT jboolean JNICALLJava_java_io_VMFile_renameTo (JNIEnv * env,			      jobject obj __attribute__ ((__unused__)),			      jstring t, jstring d){#ifndef WITHOUT_FILESYSTEM  const char *old_filename, *new_filename;  int result;  /* Don't use the JCL convert function because it throws an exception     on failure */  old_filename = (*env)->GetStringUTFChars (env, t, 0);  if (old_filename == NULL)    {      return (0);    }  new_filename = (*env)->GetStringUTFChars (env, d, 0);  if (new_filename == NULL)    {      (*env)->ReleaseStringUTFChars (env, t, old_filename);      return (0);    }  TARGET_NATIVE_FILE_RENAME (old_filename, new_filename, result);  (*env)->ReleaseStringUTFChars (env, d, new_filename);  (*env)->ReleaseStringUTFChars (env, t, old_filename);  return ((result == TARGET_NATIVE_OK) ? 1 : 0);#else /* not WITHOUT_FILESYSTEM */  return (0);#endif /* not WITHOUT_FILESYSTEM */}/*************************************************************************//* * This method returns an array of String representing all the files * in a directory except "." and "..". * * Class:     java_io_VMFile * Method:    list * Signature: (Ljava/lang/String;)[Ljava/lang/String; */JNIEXPORT jobjectArray JNICALLJava_java_io_VMFile_list (JNIEnv * env, jobject obj			  __attribute__ ((__unused__)), jstring name){#ifndef WITHOUT_FILESYSTEM  const int REALLOC_SIZE = 10;  const char *dirname;  int result;  char **filelist;  void *handle;  const char *filename;  unsigned long int filelist_count, max_filelist_count;  char **tmp_filelist;  jclass str_clazz;  jobjectArray filearray;  unsigned long int i;  jstring str;  /* Don't use the JCL convert function because it throws an exception     on failure */  dirname = (*env)->GetStringUTFChars (env, name, 0);  if (dirname == NULL)    {      return (0);    }  /* open directory for reading */  TARGET_NATIVE_FILE_OPEN_DIR (dirname, handle, result);  (*env)->ReleaseStringUTFChars (env, name, dirname);  if (result != TARGET_NATIVE_OK)    {      return (0);    }  /* allocate filelist */  filelist = (char **) JCL_malloc (env, sizeof (char *) * REALLOC_SIZE);  if (filelist == NULL)    {      TARGET_NATIVE_FILE_CLOSE_DIR (handle, result);      return (0);    }  filelist_count = 0;  max_filelist_count = REALLOC_SIZE;  /* read the files from the directory */  TARGET_NATIVE_FILE_READ_DIR (handle, filename, result);  while (result == TARGET_NATIVE_OK)    {      if ((strcmp (filename, ".") != 0) && (strcmp (filename, "..") != 0))	{	  /* allocate more memory if necessary */	  if (filelist_count >= max_filelist_count)	    {	      tmp_filelist = (char **) JCL_realloc (env,						    filelist,						    (max_filelist_count +						     REALLOC_SIZE) *						    sizeof (char *));	      if (tmp_filelist == NULL)		{		  for (i = 0; i < filelist_count; i++)		    {		      JCL_free (env, filelist[i]);		    }		  JCL_free (env, filelist);		  TARGET_NATIVE_FILE_CLOSE_DIR (handle, result);		  return (0);		}	      filelist = tmp_filelist;	      max_filelist_count += REALLOC_SIZE;	    }	  /* save entry in list (avoid strdup, because it is not ANSI C, thus difficult to port) */	  filelist[filelist_count] =	    (char *) JCL_malloc (env, strlen (filename) + 1);	  assert (filelist[filelist_count] != NULL);	  strcpy (filelist[filelist_count], filename);	  filelist_count++;	}      /* read next directory entry */      TARGET_NATIVE_FILE_READ_DIR (handle, filename, result);    }  /* close directory */  TARGET_NATIVE_FILE_CLOSE_DIR (handle, result);  /* put the list of files into a Java String array and return it */  str_clazz = (*env)->FindClass (env, "java/lang/String");  if (str_clazz == NULL)    {      for (i = 0; i < filelist_count; i++)	{	  JCL_free (env, filelist[i]);	}      JCL_free (env, filelist);      return (0);    }  filearray = (*env)->NewObjectArray (env, filelist_count, str_clazz, 0);  if (filearray == NULL)    {      for (i = 0; i < filelist_count; i++)	{	  JCL_free (env, filelist[i]);	}      JCL_free (env, filelist);      return (0);    }  for (i = 0; i < filelist_count; i++)    {      /* create new string */      str = (*env)->NewStringUTF (env, filelist[i]);      if (str == NULL)	{	  /* We don't clean up everything here, but if this failed,	     something serious happened anyway */	  for (i = 0; i < filelist_count; i++)	    {	      JCL_free (env, filelist[i]);	    }	  JCL_free (env, filelist);	  return (0);	}      /* save into array */      (*env)->SetObjectArrayElement (env, filearray, i, str);      /* delete local reference */      (*env)->DeleteLocalRef (env, str);    }  /* free resources */  for (i = 0; i < filelist_count; i++)    {      JCL_free (env, filelist[i]);    }  JCL_free (env, filelist);  return (filearray);#else /* not WITHOUT_FILESYSTEM */  return (0);#endif /* not WITHOUT_FILESYSTEM */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -