src/java.base/share/native/libzip/Deflater.c

Print this page




  59     finishedID = (*env)->GetFieldID(env, cls, "finished", "Z");
  60     CHECK_NULL(finishedID);
  61     bufID = (*env)->GetFieldID(env, cls, "buf", "[B");
  62     CHECK_NULL(bufID);
  63     offID = (*env)->GetFieldID(env, cls, "off", "I");
  64     CHECK_NULL(offID);
  65     lenID = (*env)->GetFieldID(env, cls, "len", "I");
  66     CHECK_NULL(lenID);
  67 }
  68 
  69 JNIEXPORT jlong JNICALL
  70 Java_java_util_zip_Deflater_init(JNIEnv *env, jclass cls, jint level,
  71                                  jint strategy, jboolean nowrap)
  72 {
  73     z_stream *strm = calloc(1, sizeof(z_stream));
  74 
  75     if (strm == 0) {
  76         JNU_ThrowOutOfMemoryError(env, 0);
  77         return jlong_zero;
  78     } else {
  79         char *msg;
  80         switch (deflateInit2(strm, level, Z_DEFLATED,
  81                              nowrap ? -MAX_WBITS : MAX_WBITS,
  82                              DEF_MEM_LEVEL, strategy)) {
  83           case Z_OK:
  84             return ptr_to_jlong(strm);
  85           case Z_MEM_ERROR:
  86             free(strm);
  87             JNU_ThrowOutOfMemoryError(env, 0);
  88             return jlong_zero;
  89           case Z_STREAM_ERROR:
  90             free(strm);
  91             JNU_ThrowIllegalArgumentException(env, 0);
  92             return jlong_zero;



  93           default:

  94             msg = strm->msg;

  95             free(strm);
  96             JNU_ThrowInternalError(env, msg);
  97             return jlong_zero;
  98         }
  99     }
 100 }
 101 
 102 JNIEXPORT void JNICALL
 103 Java_java_util_zip_Deflater_setDictionary(JNIEnv *env, jclass cls, jlong addr,
 104                                           jarray b, jint off, jint len)
 105 {
 106     Bytef *buf = (*env)->GetPrimitiveArrayCritical(env, b, 0);
 107     int res;
 108     if (buf == 0) {/* out of memory */
 109         return;
 110     }
 111     res = deflateSetDictionary((z_stream *)jlong_to_ptr(addr), buf + off, len);
 112     (*env)->ReleasePrimitiveArrayCritical(env, b, buf, 0);
 113     switch (res) {
 114     case Z_OK:




  59     finishedID = (*env)->GetFieldID(env, cls, "finished", "Z");
  60     CHECK_NULL(finishedID);
  61     bufID = (*env)->GetFieldID(env, cls, "buf", "[B");
  62     CHECK_NULL(bufID);
  63     offID = (*env)->GetFieldID(env, cls, "off", "I");
  64     CHECK_NULL(offID);
  65     lenID = (*env)->GetFieldID(env, cls, "len", "I");
  66     CHECK_NULL(lenID);
  67 }
  68 
  69 JNIEXPORT jlong JNICALL
  70 Java_java_util_zip_Deflater_init(JNIEnv *env, jclass cls, jint level,
  71                                  jint strategy, jboolean nowrap)
  72 {
  73     z_stream *strm = calloc(1, sizeof(z_stream));
  74 
  75     if (strm == 0) {
  76         JNU_ThrowOutOfMemoryError(env, 0);
  77         return jlong_zero;
  78     } else {
  79         char *msg = 0;
  80         switch (deflateInit2(strm, level, Z_DEFLATED,
  81                              nowrap ? -MAX_WBITS : MAX_WBITS,
  82                              DEF_MEM_LEVEL, strategy)) {
  83           case Z_OK:
  84             return ptr_to_jlong(strm);
  85           case Z_MEM_ERROR:
  86             free(strm);
  87             JNU_ThrowOutOfMemoryError(env, 0);
  88             return jlong_zero;
  89           case Z_STREAM_ERROR:
  90             free(strm);
  91             JNU_ThrowIllegalArgumentException(env, 0);
  92             return jlong_zero;
  93           case Z_VERSION_ERROR:
  94             msg = "Incompatible zlib version";
  95             /* intentionally no break */
  96           default:
  97             if (msg == 0) {
  98                 msg = strm->msg;
  99             }
 100             free(strm);
 101             JNU_ThrowInternalError(env, msg);
 102             return jlong_zero;
 103         }
 104     }
 105 }
 106 
 107 JNIEXPORT void JNICALL
 108 Java_java_util_zip_Deflater_setDictionary(JNIEnv *env, jclass cls, jlong addr,
 109                                           jarray b, jint off, jint len)
 110 {
 111     Bytef *buf = (*env)->GetPrimitiveArrayCritical(env, b, 0);
 112     int res;
 113     if (buf == 0) {/* out of memory */
 114         return;
 115     }
 116     res = deflateSetDictionary((z_stream *)jlong_to_ptr(addr), buf + off, len);
 117     (*env)->ReleasePrimitiveArrayCritical(env, b, buf, 0);
 118     switch (res) {
 119     case Z_OK: