home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / WDESAMPL.BIN / jre.c < prev    next >
C/C++ Source or Header  |  1997-11-24  |  3KB  |  118 lines

  1. /*
  2.  * @(#)jre.c    1.4 97/05/19 David Connelly
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
  7.  * modify and redistribute this software in source and binary code form,
  8.  * provided that i) this copyright notice and license appear on all copies of
  9.  * the software; and ii) Licensee does not utilize the software in a manner
  10.  * which is disparaging to Sun.
  11.  *
  12.  * This software is provided "AS IS," without a warranty of any kind. ALL
  13.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  14.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  15.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  16.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  17.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  18.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  19.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  20.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  21.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  22.  * POSSIBILITY OF SUCH DAMAGES.
  23.  *
  24.  * This software is not designed or intended for use in on-line control of
  25.  * aircraft, air traffic, aircraft navigation or aircraft communications; or in
  26.  * the design, construction, operation or maintenance of any nuclear
  27.  * facility. Licensee represents and warrants that it will not use or
  28.  * redistribute the Software for such purposes.
  29.  */
  30.  
  31. /*
  32.  * Portable JRE Support functions.
  33.  */
  34.  
  35. #include <string.h>
  36. #include <stdlib.h>
  37. #include <jni.h>
  38. #include "jre.h"
  39.  
  40. /*
  41.  * Exits the runtime with the specified error message.
  42.  */
  43. void
  44. JRE_FatalError(JNIEnv *env, const char *msg)
  45. {
  46.     if ((*env)->ExceptionOccurred(env)) {
  47.     (*env)->ExceptionDescribe(env);
  48.     }
  49.     (*env)->FatalError(env, msg);
  50. }
  51.  
  52. /*
  53.  * Parses a runtime version string. Returns 0 if the successful, otherwise
  54.  * returns -1 if the format of the version string was invalid.
  55.  */
  56. jint
  57. JRE_ParseVersion(const char *ver, char **majorp, char **minorp, char **microp)
  58. {
  59.     int n1 = 0, n2 = 0, n3 = 0;
  60.  
  61.     sscanf(ver, "%*[0-9]%n.%*[0-9]%n.%*[0-9a-zA-Z]%n", &n1, &n2, &n3);
  62.     if (n1 == 0 || n2 == 0) {
  63.     return -1;
  64.     }
  65.     if (n3 != 0) {
  66.     if (n3 != strlen(ver)) {
  67.         return -1;
  68.     }
  69.     } else if (n2 != strlen(ver)) {
  70.     return -1;
  71.     }
  72.     *majorp = JRE_Malloc(n1 + 1);
  73.     strncpy(*majorp, ver, n1);
  74.     *minorp = JRE_Malloc(n2 - n1);
  75.     strncpy(*minorp, ver + n1 + 1, n2 - n1 - 1);
  76.     if (n3 != 0) {
  77.     *microp = JRE_Malloc(n3 - n2);
  78.     strncpy(*microp, ver + n2 + 1, n3 - n2 - 1);
  79.     }
  80.     return 0;
  81. }
  82.  
  83. /*
  84.  * Creates a version number string from the specified major, minor, and
  85.  * micro version numbers.
  86.  */
  87. char *
  88. JRE_MakeVersion(const char *major, const char *minor, const char *micro)
  89. {
  90.     char *ver = 0;
  91.  
  92.     if (major != 0 && minor != 0) {
  93.     int len = strlen(major) + strlen(minor);
  94.     if (micro != 0) {
  95.         ver = JRE_Malloc(len + strlen(micro) + 3);
  96.         sprintf(ver, "%s.%s.%s", major, minor, micro);
  97.     } else {
  98.         ver = JRE_Malloc(len + 2);
  99.         sprintf(ver, "%s.%s", major, minor);
  100.     }
  101.     }
  102.     return ver;
  103. }
  104.  
  105. /*
  106.  * Allocate memory or die.
  107.  */
  108. void *
  109. JRE_Malloc(size_t size)
  110. {
  111.     void *p = malloc(size);
  112.     if (p == 0) {
  113.     perror("malloc");
  114.     exit(1);
  115.     }
  116.     return p;
  117. }
  118.