1 /*
   2  * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 #include <stdio.h>
  27 #include <string.h>
  28 #include <jni.h>
  29 
  30 #include "jli_util.h"
  31 
  32 /*
  33  * Returns a pointer to a block of at least 'size' bytes of memory.
  34  * Prints error message and exits if the memory could not be allocated.
  35  */
  36 void *
  37 JLI_MemAlloc(size_t size)
  38 {
  39     void *p = malloc(size);
  40     if (p == 0) {
  41         perror("malloc");
  42         exit(1);
  43     }
  44     return p;
  45 }
  46 
  47 /*
  48  * Equivalent to realloc(size).
  49  * Prints error message and exits if the memory could not be reallocated.
  50  */
  51 void *
  52 JLI_MemRealloc(void *ptr, size_t size)
  53 {
  54     void *p = realloc(ptr, size);
  55     if (p == 0) {
  56         perror("realloc");
  57         exit(1);
  58     }
  59     return p;
  60 }
  61 
  62 /*
  63  * Wrapper over strdup(3C) which prints an error message and exits if memory
  64  * could not be allocated.
  65  */
  66 char *
  67 JLI_StringDup(const char *s1)
  68 {
  69     char *s = strdup(s1);
  70     if (s == NULL) {
  71         perror("strdup");
  72         exit(1);
  73     }
  74     return s;
  75 }
  76 
  77 /*
  78  * Very equivalent to free(ptr).
  79  * Here to maintain pairing with the above routines.
  80  */
  81 void
  82 JLI_MemFree(void *ptr)
  83 {
  84     free(ptr);
  85 }
  86 
  87 /*
  88  * debug helpers we use
  89  */
  90 static jboolean _launcher_debug = JNI_FALSE;
  91 
  92 void
  93 JLI_TraceLauncher(const char* fmt, ...)
  94 {
  95     va_list vl;
  96     if (_launcher_debug != JNI_TRUE) return;
  97     va_start(vl, fmt);
  98     vprintf(fmt,vl);
  99     va_end(vl);
 100 }
 101 
 102 void
 103 JLI_SetTraceLauncher()
 104 {
 105    if (getenv(JLDEBUG_ENV_ENTRY) != 0) {
 106         _launcher_debug = JNI_TRUE;
 107         JLI_TraceLauncher("----%s----\n", JLDEBUG_ENV_ENTRY);
 108    }
 109 }
 110 
 111 jboolean
 112 JLI_IsTraceLauncher()
 113 {
 114    return _launcher_debug;
 115 }
 116 
 117 int
 118 JLI_StrCCmp(const char *s1, const char* s2)
 119 {
 120    return JLI_StrNCmp(s1, s2, JLI_StrLen(s2));
 121 }