You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by dl...@apache.org on 2007/08/13 00:24:39 UTC

svn commit: r565183 - /harmony/enhanced/sandbox/bootjvm/bootJVM/jvm/src/tmparea.c

Author: dlydick
Date: Sun Aug 12 15:24:38 2007
New Revision: 565183

URL: http://svn.apache.org/viewvc?view=rev&rev=565183
Log:
Conditionally compile temporary directory area support.
Though technically deprecated for the JVM itself, it will
be supported to facilitate usage in other contexts.

Modified:
    harmony/enhanced/sandbox/bootjvm/bootJVM/jvm/src/tmparea.c

Modified: harmony/enhanced/sandbox/bootjvm/bootJVM/jvm/src/tmparea.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/sandbox/bootjvm/bootJVM/jvm/src/tmparea.c?view=diff&rev=565183&r1=565182&r2=565183
==============================================================================
--- harmony/enhanced/sandbox/bootjvm/bootJVM/jvm/src/tmparea.c (original)
+++ harmony/enhanced/sandbox/bootjvm/bootJVM/jvm/src/tmparea.c Sun Aug 12 15:24:38 2007
@@ -4,6 +4,12 @@
  * @brief Create and manage temporary directory area for class files,
  * etc.
  *
+ * @deprecated Used for facilitating Java archiving activities
+ * during initial development, it is now available for any general
+ * purpose should it prove useful in another capacity.
+ *
+ * @see JVMCFG_TMPAREA_IN_USE
+ *
  *
  * @section Control
  *
@@ -47,16 +53,31 @@
 
  
 #include "jvmcfg.h"
+#include "classfile.h"
 #include "exit.h"
 #include "heap.h" 
+#include "jvm.h"
+#include "pjvm.h" 
 #include "util.h"
 
 
+#if JVMCFG_TMPAREA_IN_USE
 /*!
  * @brief Initialize the class area of the JVM model
  *
  *
- * @b Parameters: @link #rvoid rvoid@endlink
+ * @param[in]  argv               Pointer to rboolean, set
+ *
+ * @param[in]  heap_get_data      Heap allocation function to use
+ *                                for geting heap areas to use.
+ *
+ * @param[in]  heap_free_data     Heap delallocation function to use
+ *                                for freeing up heap areas.
+ *
+ * @param[out] tmparea_init_flag  Pointer to rboolean, changed to
+ *                                @link #rtrue rtrue@endlink
+ *                                to indicate temporary area
+ *                                now available.
  *
  *
  * @returns @link #rvoid rvoid@endlink
@@ -64,12 +85,15 @@
  */
 static rchar *env_tmpdir = CHEAT_AND_USE_NULL_TO_INITIALIZE;
 
-static rchar tmparea[100];
-
-rvoid tmparea_init(char **argv)
+rvoid tmparea_init(char     **argv,
+                   rvoid     *(* heap_get_data)(rint, rboolean),
+                   rvoid      (* heap_free_data)(rvoid *),
+                   rboolean  *tmparea_init_flag)
 {
     ARCH_FUNCTION_NAME(tmparea_init);
 
+    rchar tmparea[100];
+
     rvoid *statbfr; /* Portability library does (struct stat) part */
     char *argv0name = portable_strrchr(argv[0],
                                        JVMCFG_PATHNAME_DELIMITER_CHAR);
@@ -100,30 +124,33 @@
         env_tmpdir = JVMCFG_TMPAREA_DEFAULT;
     }
 
+    /* Create temporary area name and allocate string for keeping name*/
     sprintfLocal(tmparea,
                  "%s%ctmp.%s.%d",
                  env_tmpdir,
                  JVMCFG_PATHNAME_DELIMITER_CHAR,
                  argv0name,
                  pid);
+    pjvm->tmparea = heap_get_data(portable_strlen(tmparea), rfalse);
+    portable_strcpy(pjvm->tmparea, tmparea);
 
     /* Could use <sys/stat.h> constants for directory creation mode */
-    (rvoid) portable_mkdir(tmparea, 0755);
+    (rvoid) portable_mkdir(pjvm->tmparea, 0755);
 
     /* Verify existence of directory */
-    statbfr = portable_stat(tmparea);
-    HEAP_FREE_DATA(statbfr);
+    statbfr = portable_stat(pjvm->tmparea);
+    heap_free_data(statbfr);
 
     if (rnull == statbfr)
     {
         sysErrMsg(arch_function_name,
                   "Cannot create temp directory %s",
-                  tmparea);
+                  pjvm->tmparea);
         exit_jvm(EXIT_TMPAREA_MKDIR);
 /*NOTREACHED*/
     }
     /* Declare this module initialized */
-    jvm_tmparea_initialized = rtrue;
+    *tmparea_init_flag = rtrue;
 
     return;
 
@@ -140,11 +167,11 @@
  * @returns Null-terminated string to temp area.
  *
  */
-const rchar *tmparea_get()
+const rchar *tmparea_get(rvoid)
 {
     ARCH_FUNCTION_NAME(tmparea_get);
 
-    return((const rchar *) tmparea);
+    return((const rchar *) pjvm->tmparea);
 
 } /* END of tmparea_get() */
 
@@ -153,26 +180,37 @@
  * @brief Shut down the temporary directory area after JVM execution.
  *
  *
- * @b Parameters: @link #rvoid rvoid@endlink
+ * @param[in]  heap_get_data      Heap allocation function to use
+ *                                for geting heap areas to use.
+ *
+ * @param[in]  heap_free_data     Heap delallocation function to use
+ *                                for freeing up heap areas.
+ *
+ * @param[out] tmparea_init_flag  Pointer to rboolean, changed to
+ *                                @link #rfalse rfalse@endlink
+ *                                to indicate temporary area
+ *                                no longer available.
  *
  *
  * @returns @link #rvoid rvoid@endlink
  *
  */
-rvoid tmparea_shutdown(rvoid)
+rvoid tmparea_shutdown(rvoid    *(* heap_get_data)(rint, rboolean),
+                       rvoid     (* heap_free_data)(rvoid *),
+                       rboolean *tmparea_init_flag)
 {
     ARCH_FUNCTION_NAME(tmparea_shutdown);
 
 
 /* Normal method requires directory to be empty:
  *
- *  int rc = rmdir(tmparea);
+ *  int rc = rmdir(pjvm->tmparea);
  *
  *  if (0 != rc)
  *  {
  *      sysErrMsg(arch_function_name,
  *                "Cannot remove temp directory %s",
- *                tmparea);
+ *                pjvm->tmparea);
  *      exit_jvm(EXIT_TMPAREA_RMDIR);
 **NOTREACHED**
  *  }
@@ -186,34 +224,40 @@
 
     rchar *rmscript =        /* format spec %s make strlen longer than
                                 it needs to be, but it is benign */
-        HEAP_GET_DATA(portable_strlen(JVMCFG_TMPAREA_REMOVE_SCRIPT) +
-                          portable_strlen(tmparea) +
+        heap_get_data(portable_strlen(JVMCFG_TMPAREA_REMOVE_SCRIPT) +
+                          portable_strlen(pjvm->tmparea) +
                           sizeof(rchar) /* NUL byte */,
                       rfalse);
 
-    sprintfLocal(rmscript, JVMCFG_TMPAREA_REMOVE_SCRIPT, tmparea);
+    sprintfLocal(rmscript, JVMCFG_TMPAREA_REMOVE_SCRIPT, pjvm->tmparea);
 
     /* int rc = */ portable_system(rmscript);
 
     /* Verify missing directory */
-    statbfr = portable_stat(tmparea);
-    HEAP_FREE_DATA(statbfr);
+    statbfr = portable_stat(pjvm->tmparea);
+    heap_free_data(statbfr);
 
     if (rnull != statbfr)
     {
         sysErrMsg(arch_function_name,
                   "Cannot remove temp directory %s",
-                  tmparea);
+                  pjvm->tmparea);
+        heap_free_data(pjvm->tmparea);
         exit_jvm(EXIT_TMPAREA_RMDIR);
 /*NOTREACHED*/
     }
 
+    /* Clean up */
+    heap_free_data(pjvm->tmparea);
+    pjvm->tmparea = (rchar *) rnull;
+
     /* Declare this module uninitialized */
-    jvm_tmparea_initialized = rfalse;
+    *tmparea_init_flag = rfalse;
 
     return;
 
 } /* END of tmparea_shutdown() */
 
+#endif /* JVMCFG_TMPAREA_IN_USE */
 
 /* EOF */