Exemple #1
0
JNIEXPORT jlong JNICALL
Java_java_util_zip_ZipFile_00024ZFEnum_resetZip (JNIEnv * env, jobject recv,
                                                 jlong descriptor)
{
  PORT_ACCESS_FROM_ENV (env);

  IDATA nextEntryPointer;
  JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) descriptor;

  if (jclZipFile == (void *) -1)
    {
      throwNewIllegalStateException (env, "");
      return 0;
    }
  zip_resetZipFile (privatePortLibrary,
		    &(jclZipFile->hyZipFile), 
                    &nextEntryPointer);
  return nextEntryPointer;
}
Exemple #2
0
JNIEXPORT void JNICALL
Java_java_util_zip_Deflater_setLevelsImpl (JNIEnv * env, jobject recv,
					   int level, int strategy,
					   jlong handle)
{
  JCLZipStream *stream;
  jbyte b = 0;
  int err = 0;

  if (handle == -1)
    {
      throwNewIllegalStateException (env, "");
      return;
    }
  stream = (JCLZipStream *) ((IDATA) handle);
  stream->stream->next_out = (Bytef *) & b;
  err = deflateParams (stream->stream, level, strategy);
  if (err != Z_OK) {
    THROW_ZIP_EXCEPTION(env, err, IllegalStateException);
  }
}
Exemple #3
0
JNIEXPORT jbyteArray JNICALL
Java_java_util_zip_ZipFile_inflateEntryImpl2 (JNIEnv * env, jobject recv,
					                          jlong descriptor,
                                              jstring entryName)
{
  PORT_ACCESS_FROM_ENV (env);

  I_32 retval;
  HyZipFile *zipFile;
  HyZipEntry zipEntry;
  const char *entryCopy;
  jbyteArray buf;
  JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) descriptor;

  /* Build the zipFile */
  if (jclZipFile == (void *) -1)
    {
      throwNewIllegalStateException (env, "");
      return NULL;
    }
  zipFile = &(jclZipFile->hyZipFile);
  entryCopy = (*env)->GetStringUTFChars (env, entryName, NULL);
  if (entryCopy == NULL)
    return NULL;

  zip_initZipEntry (privatePortLibrary, &zipEntry);
  retval =
    zip_getZipEntry (privatePortLibrary, zipFile, &zipEntry, entryCopy, TRUE);
  (*env)->ReleaseStringUTFChars (env, entryName, entryCopy);
  if (retval)
    {
      zip_freeZipEntry (privatePortLibrary, &zipEntry);
      if (retval == ZIP_ERR_OUT_OF_MEMORY)
        throwNewOutOfMemoryError (env, "");
      return NULL;
    }

  buf = (*env)->NewByteArray (env, zipEntry.uncompressedSize);
  if (!buf)
    {
      throwNewOutOfMemoryError (env, "");
      return NULL;
    }

  retval =
    zip_getZipEntryData (privatePortLibrary, zipFile, &zipEntry, NULL,
                         zipEntry.uncompressedSize);
  if (retval == 0)
    (*env)->SetByteArrayRegion (env, buf, 0, zipEntry.uncompressedSize,
                                zipEntry.data);
  zip_freeZipEntry (privatePortLibrary, &zipEntry);
  if (!retval)
    return buf;

  if (retval == ZIP_ERR_OUT_OF_MEMORY)
    throwNewOutOfMemoryError (env, "");
  else
    throwJavaZIOException (env, "");

  return NULL;
}
Exemple #4
0
JNIEXPORT jobject JNICALL
Java_java_util_zip_ZipFile_00024ZFEnum_getNextEntry (JNIEnv * env,
                                                     jobject recv,
                                                     jlong descriptor,
                                                     jlong nextEntry)
{
  PORT_ACCESS_FROM_ENV (env);

  I_32 retval;
  HyZipFile *zipFile;
  HyZipEntry zipEntry;
  jobject java_ZipEntry, extra;
  jclass javaClass;
  jmethodID mid;
  jstring entryName = NULL;
  IDATA nextEntryPointer;
  JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) descriptor;

  if (jclZipFile == (void *) -1)
    {
      throwNewIllegalStateException (env, "");
      return NULL;
    }
  zipFile = &(jclZipFile->hyZipFile);
  zip_initZipEntry (PORTLIB, &zipEntry);

  nextEntryPointer = (IDATA) nextEntry;
  retval =
    zip_getNextZipEntry (PORTLIB, zipFile, &zipEntry, &nextEntryPointer);
  if (retval)
    {
      if (retval != ZIP_ERR_NO_MORE_ENTRIES)
        {
          char buf[40];
          sprintf (buf, "Error %d getting next zip entry", retval);
          throwNewInternalError (env, buf);
        }
      return (jobject) NULL;
    }

  /* Build a new ZipEntry from the C struct */
  entryName = ((*env)->NewStringUTF (env, zipEntry.filename));

  if (((*env)->ExceptionCheck (env)))
    return NULL;

  extra = NULL;
  if (zipEntry.extraFieldLength > 0)
    {
      zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL,
                                 zipEntry.extraFieldLength);
      extra = ((*env)->NewByteArray (env, zipEntry.extraFieldLength));
      if (((*env)->ExceptionCheck (env)))
        {
          /* free the extraField entry */
          zip_freeZipEntry (PORTLIB, &zipEntry);
          return NULL;
        }
      ((*env)->
       SetByteArrayRegion (env, extra, 0, zipEntry.extraFieldLength,
                           zipEntry.extraField));
      jclmem_free_memory (env, zipEntry.extraField);
      zipEntry.extraField = NULL;
    }

  javaClass = JCL_CACHE_GET (env, CLS_java_util_zip_ZipEntry);
  javaClass = (*env)->NewLocalRef(env, javaClass);
  if (javaClass == NULL) {
      return NULL;
  }
  mid = JCL_CACHE_GET (env, MID_java_util_zip_ZipEntry_init);
  java_ZipEntry = ((*env)->NewObject (env, javaClass, mid, entryName, NULL,     /* comment */
                                      extra,
                                      (jlong) zipEntry.lastModTime,
                                      (jlong) zipEntry.uncompressedSize,
                                      (jlong) zipEntry.compressedSize,
                                      (jlong) zipEntry.crc32,
                                      zipEntry.compressionMethod,
                                      (jlong) zipEntry.lastModDate,
                                      (jlong) zipEntry.dataPointer));
  zip_freeZipEntry (PORTLIB, &zipEntry);
  (*env)->SetLongField (env, recv,
                        JCL_CACHE_GET (env,
                                       FID_java_util_zip_ZipFile_nextEntryPointer),
                        nextEntryPointer);
  return java_ZipEntry;
}
Exemple #5
0
JNIEXPORT jobject JNICALL
Java_java_util_zip_ZipFile_getEntryImpl (JNIEnv * env, jobject recv,
                                         jlong zipPointer, jstring entryName)
{
  PORT_ACCESS_FROM_ENV (env);

  I_32 retval;
  HyZipFile *zipFile;
  HyZipEntry zipEntry;
  jobject java_ZipEntry, extra;
  jclass entryClass;
  jmethodID mid;
  const char *entryCopy;
  JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) zipPointer;

  if (jclZipFile == (void *) -1)
    {
      throwNewIllegalStateException (env, "");
      return NULL;
    }
  zipFile = &(jclZipFile->hyZipFile);
  entryCopy = (*env)->GetStringUTFChars (env, entryName, NULL);
  if (entryCopy == NULL)
    return (jobject) NULL;

  zip_initZipEntry (PORTLIB, &zipEntry);
  retval = zip_getZipEntry (PORTLIB, zipFile, &zipEntry, entryCopy, TRUE);
  (*env)->ReleaseStringUTFChars (env, entryName, entryCopy);
  if (retval)
    {
      zip_freeZipEntry (PORTLIB, &zipEntry);
      return (jobject) NULL;
    }

  extra = NULL;
  if (zipEntry.extraFieldLength > 0)
    {
      zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL,
                                 zipEntry.extraFieldLength);
      if (zipEntry.extraField == NULL)
        {
          zip_freeZipEntry (PORTLIB, &zipEntry);
          return (jobject) NULL;
        }
      extra = ((*env)->NewByteArray (env, zipEntry.extraFieldLength));
      if (((*env)->ExceptionCheck (env)))
        {
          zip_freeZipEntry (PORTLIB, &zipEntry);
          return (jobject) NULL;
        }
      ((*env)->
       SetByteArrayRegion (env, extra, 0, zipEntry.extraFieldLength,
                           zipEntry.extraField));
    }

  entryClass = JCL_CACHE_GET (env, CLS_java_util_zip_ZipEntry);
  entryClass = (*env)->NewLocalRef(env, entryClass);
  if (entryClass == NULL) {
    zip_freeZipEntry (PORTLIB, &zipEntry);
    return (jobject) NULL;
  }
  mid = JCL_CACHE_GET (env, MID_java_util_zip_ZipEntry_init);
  /* Build a new ZipEntry from the C struct */
  java_ZipEntry = ((*env)->NewObject (env, entryClass, mid, entryName, NULL,
                                      extra,
                                      (jlong) zipEntry.lastModTime,
                                      (jlong) zipEntry.uncompressedSize,
                                      (jlong) zipEntry.compressedSize,
                                      (jlong) zipEntry.crc32,
                                      zipEntry.compressionMethod,
                                      (jlong) zipEntry.lastModDate,
                                      (jlong) zipEntry.dataPointer));
  zip_freeZipEntry (PORTLIB, &zipEntry);
  return java_ZipEntry;
}