home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / kaffe-0.5p4-src.tgz / tar.out / contrib / kaffe / lib / native / java.lang / System.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  5KB  |  217 lines

  1. /*
  2.  * java.lang.System.c
  3.  *
  4.  * Copyright (c) 1996 Systems Architecture Research Centre,
  5.  *           City University, London, UK.
  6.  *
  7.  * See the file "license.terms" for information on usage and redistribution
  8.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9.  *
  10.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  11.  */
  12.  
  13. #define __jtypes_h
  14. #include "config.h"
  15. #include <stdio.h>
  16. #include <assert.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #if defined(HAVE_SYS_UTSNAME_H)
  20. #include <sys/utsname.h>
  21. #endif
  22. #if defined(HAVE_PWD_H)
  23. #include <pwd.h>
  24. #endif
  25. #if defined(HAVE_UNISTD_H)
  26. #include <unistd.h>
  27. #endif
  28. #if defined(HAVE_DIRECT_H)
  29. #include <dirent.h>
  30. #endif
  31. #if defined(HAVE_DIR_H)
  32. #include <dir.h>
  33. #endif
  34. #include "../../kaffevm/gtypes.h"
  35. #include <native.h>
  36. #include "system.h"
  37. #include "defs.h"
  38. #include "java.lang.stubs/System.h"
  39. #include "../../kaffevm/itypes.h"
  40. #include "../../kaffevm/constants.h"
  41. #include "../../kaffevm/access.h"
  42. #include "../../kaffevm/classMethod.h"
  43. #include "../../kaffevm/support.h"
  44.  
  45. static char cwdpath[MAXPATHLEN];
  46.  
  47. extern jlong currentTime(void);
  48.  
  49.  
  50. IMPORT(struct itypes) types[];
  51. IMPORT(userProperty*) userProperties;
  52.  
  53. /*
  54.  * Copy one part of an array to another.
  55.  */
  56. void
  57. java_lang_System_arraycopy(struct Hjava_lang_System* none, struct Hjava_lang_Object* src, jint srcpos, struct Hjava_lang_Object* dst, jint dstpos, jint len)
  58. {
  59.     char* in;
  60.     char* out;
  61.     int elemsz;
  62.     char* sig;
  63.  
  64.     sig = dst->dtable->class->sig;
  65.  
  66.     /* Must be some array type */
  67.     assert(sig[0] == '[');
  68.  
  69.     /* if sig[1] == 'L' or sig[1] == '[' then I'm copying references.
  70.      * Am I suppose to do something clever here such as calling
  71.      * clone() on each element?
  72.      */
  73.  
  74.     elemsz = TYPE_SIZE_C(sig[1]);
  75.  
  76.     len *= elemsz;
  77.     srcpos *= elemsz;
  78.     dstpos *= elemsz;
  79.  
  80.     in = &((char*)(src+1))[srcpos];
  81.     out = &((char*)(dst+1))[dstpos];
  82.  
  83. #if defined(HAVE_MEMMOVE)
  84.     memmove((void*)out, (void*)in, len);
  85. #else
  86.     /* Do it ourself */
  87.     if (out < in) {
  88.         /* Copy forwards */
  89.         for (; len > 0; len--) {
  90.             *out++ = *in++;
  91.         }
  92.     }
  93.     else {
  94.         /* Copy backwards */
  95.         out += len;
  96.         in += len;
  97.         for (; len > 0; len--) {
  98.             *--out = *--in;
  99.         }
  100.     }
  101. #endif
  102. }
  103.  
  104. /*
  105.  * Initialise system properties to their defaults.
  106.  */
  107. struct Hjava_util_Properties*
  108. java_lang_System_initProperties(struct Hjava_lang_System* none, struct Hjava_util_Properties* p)
  109. {
  110.     int r;
  111.     char* jhome;
  112.     char* cpath;
  113.     char* dir;
  114.     userProperty* prop;
  115. #if defined(HAVE_SYS_UTSNAME_H)
  116.     struct utsname system;
  117. #endif
  118. #if defined(HAVE_PWD_H)
  119.     struct passwd* pw;
  120. #endif
  121.  
  122.     /* Add the default properties:
  123.      * java.version        Java version number
  124.      * java.vendor          Java vendor specific string
  125.      * java.vendor.url      Java vendor URL
  126.      * java.home            Java installation directory
  127.      * java.class.version   Java class version number
  128.      * java.class.path      Java classpath
  129.      * os.name              Operating System Name
  130.      * os.arch              Operating System Architecture
  131.      * os.version           Operating System Version
  132.      * file.separator       File separator ("/" on Unix)
  133.      * path.separator       Path separator (":" on Unix)
  134.      * line.separator       Line separator ("\n" on Unix)
  135.      * user.name            User account name
  136.      * user.home            User home directory
  137.      * user.dir             User's current working directory
  138.      */
  139.  
  140.     setProperty(p, "java.version", kaffe_version);
  141.     setProperty(p, "java.vendor", kaffe_vendor);
  142.     setProperty(p, "java.vendor.url", kaffe_vendor_url);
  143.  
  144.     jhome = getenv(KAFFEHOME);
  145.     if (jhome == 0) {
  146.         jhome = ".";
  147.     }
  148.     setProperty(p, "java.home", jhome);
  149.  
  150.     setProperty(p, "java.class.version", kaffe_class_version);
  151.  
  152.     cpath = getenv(KAFFECLASSPATH);
  153.     if (cpath == 0) {
  154. #if defined(DEFAULT_CLASSPATH)
  155.         cpath = DEFAULT_CLASSPATH;
  156. #else
  157.         cpath = ".";
  158. #endif
  159.     }
  160.     setProperty(p, "java.class.path", cpath);
  161.  
  162.     setProperty(p, "file.separator", file_seperator);
  163.     setProperty(p, "path.separator", path_seperator);
  164.     setProperty(p, "line.separator", line_seperator);
  165.  
  166. #if defined(HAVE_GETCWD)
  167.     dir = getcwd(cwdpath, MAXPATHLEN);
  168. #elif defined(HAVE_GETWD)
  169.     dir = getwd(cwdpath);
  170. #else
  171.     dir = 0;    /* Cannot get current directory */
  172. #endif
  173.     if (dir == 0) {
  174.         dir = ".";
  175.     }
  176.     setProperty(p, "user.dir", dir);
  177.  
  178. #if defined(HAVE_SYS_UTSNAME_H) && defined(HAVE_UNAME)
  179.     /* Setup system properties */
  180.     r = uname(&system);
  181.     assert(r >= 0);
  182.     setProperty(p, "os.name", system.sysname);
  183.     setProperty(p, "os.arch", system.machine);
  184.     setProperty(p, "os.version", system.version);
  185. #else
  186.     setProperty(p, "os.name", "Unknown");
  187.     setProperty(p, "os.arch", "Unknown");
  188.     setProperty(p, "os.version", "Unknown");
  189. #endif
  190. #if defined(HAVE_PWD_H) && defined(HAVE_GETUID)
  191.     /* Setup user properties */
  192.     pw = getpwuid(getuid());
  193.     assert(pw != 0);
  194.     setProperty(p, "user.name", pw->pw_name);
  195.     setProperty(p, "user.home", pw->pw_dir);
  196. #else
  197.     setProperty(p, "user.name", "Unknown");
  198.     setProperty(p, "user.home", "Unknown");
  199. #endif
  200.  
  201.     /* Now process user defined properties */
  202.     for (prop = userProperties; prop != 0; prop = prop->next) {
  203.         setProperty(p, prop->key, prop->value);
  204.     }
  205.  
  206.     return (p);
  207. }
  208.  
  209. /*
  210.  * Return current time.
  211.  */
  212. jlong
  213. java_lang_System_currentTimeMillis(struct Hjava_lang_System* none)
  214. {
  215.     return (currentTime());
  216. }
  217.