/* * Class: magick_ImageInfo * Method: setFileName * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_magick_ImageInfo_setFileName (JNIEnv *env, jobject obj, jstring fileName) { ImageInfo *imageInfo = NULL; jfieldID handleFid = 0; const char *cstr = NULL; imageInfo = (ImageInfo*) getHandle(env, obj, "imageInfoHandle", &handleFid); if (imageInfo == NULL) { imageInfo = (ImageInfo *) AcquireMemory(sizeof(ImageInfo)); if (imageInfo == NULL) { throwMagickException(env, "Unable to allow memory for handle"); return; } GetImageInfo(imageInfo); setHandle(env, obj, "imageInfoHandle", (void*) imageInfo, &handleFid); } cstr = (*env)->GetStringUTFChars(env, fileName, 0); strcpy(imageInfo->filename, cstr); (*env)->ReleaseStringUTFChars(env, fileName, cstr); #ifdef DIAGNOSTIC fprintf(stderr, "Set the file name in ImageInfo to %s\n", imageInfo->filename); #endif }
/* * Class: magick_MontageInfo * Method: init * Signature: (Lmagick/ImageInfo;)V */ JNIEXPORT void JNICALL Java_magick_MontageInfo_init (JNIEnv *env, jobject self, jobject imageInfo) { ImageInfo *info; MontageInfo *montageInfo; /* Obtain the ImageInfo */ info = (ImageInfo*) getHandle(env, imageInfo, "imageInfoHandle", NULL); if (info == NULL) { throwMagickException(env, "Unable to obtain ImageInfo handle"); return; } /* Initialise the MontageInfo handle, allocating memory if required */ montageInfo = (MontageInfo*) getHandle(env, self, "montageInfoHandle", NULL); if (montageInfo == NULL) { montageInfo = (MontageInfo*) AcquireMemory(sizeof(MontageInfo)); if (montageInfo == NULL) { throwMagickException(env, "Unable to allocate " "memory for MontageInfo"); return; } } GetMontageInfo(info, montageInfo); setHandle(env, self, "montageInfoHandle", (void*) montageInfo, NULL); }
/* * Retrieve the byte array from the specified field. * * Input: * env Java VM environment. * obj Java object for which the value is to be retrieved. * fieldName name of the field to be retrieved. * fieldID if non-null, points to field ID. 0 to request retrieval. * * Output: * fieldID if non-null, will contain the field ID. * size the size of the array is returned here. Must not be NULL. * * Return: * The byte array requested. The caller is responsible for * deallocating this byte array. */ unsigned char* getByteArrayFieldValue(JNIEnv *env, jobject obj, const char *fieldName, jfieldID *fieldID, int *size) { jclass objClass = 0; jfieldID objFieldID = 0; jobject byteArrayObj = 0; unsigned char *byteArray = NULL; char *byteArrayCpy = NULL; if (fieldID == NULL) { objClass = (*env)->GetObjectClass(env, obj); if (objClass == 0) { return NULL; } objFieldID = (*env)->GetFieldID(env, objClass, fieldName, "[B"); } else if (*fieldID == 0) { objClass = (*env)->GetObjectClass(env, obj); if (objClass == 0) { return NULL; } objFieldID = *fieldID = (*env)->GetFieldID(env, objClass, fieldName, "[B"); } else { objFieldID = *fieldID; } if (objFieldID == 0) { return NULL; } /* Get the array object */ byteArrayObj = (*env)->GetObjectField(env, obj, objFieldID); if (byteArrayObj == NULL) { return NULL; } /* Determine the size of the array */ *size = (*env)->GetArrayLength(env, byteArrayObj); if (*size == 0) { return NULL; } /* Get and copy the array elements */ byteArray = (jbyte *) (*env)->GetByteArrayElements(env, byteArrayObj, 0); byteArrayCpy = (unsigned char *) AcquireMemory(*size); if (byteArray == NULL) { return NULL; } memcpy(byteArrayCpy, byteArray, *size); (*env)->ReleaseByteArrayElements(env, byteArrayObj, byteArray, JNI_ABORT); return byteArrayCpy; }
/* * Class: magick_ImageInfo * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_magick_ImageInfo_init (JNIEnv *env, jobject obj) { ImageInfo *imageInfo = NULL; jfieldID fid = 0; imageInfo = (ImageInfo*) getHandle(env, obj, "imageInfoHandle", &fid); if (imageInfo == NULL) { imageInfo = (ImageInfo *) AcquireMemory(sizeof(ImageInfo)); if (imageInfo == NULL) { throwMagickException(env, "Unable to allocate memory for handle"); return; } } GetImageInfo(imageInfo); setHandle(env, obj, "imageInfoHandle", (void*) imageInfo, &fid); }
/* * Class: magick_QuantizeInfo * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_magick_QuantizeInfo_init (JNIEnv *env, jobject self) { QuantizeInfo *quantizeInfo = NULL; jfieldID fid = 0; quantizeInfo = (QuantizeInfo*) getHandle(env, self, "quantizeInfoHandle", &fid); if (quantizeInfo == NULL) { quantizeInfo = (QuantizeInfo *) AcquireMemory(sizeof(QuantizeInfo)); if (quantizeInfo == NULL) { throwMagickException(env, "Unable to allow memory for handle"); return; } } GetQuantizeInfo(quantizeInfo); setHandle(env, self, "quantizeInfoHandle", (void*) quantizeInfo, &fid); }
unsigned int CGIToArgv(const char *text,int *argc,char ***argv) { char **vector; const char *p, *q; register int i; int count; if (text == (char *) NULL) return(False); /* Determine the number of arguments by scanning for delimiters */ q=text; count=0; while (1) { int len; p=q; while (!IsCGIDelimiter(*q)) q++; len=q-p; if (len > 0) count++; if (*q == '\0') break; q++; } vector=(char **) AcquireMemory((count+2)*sizeof(char *)); if (vector == (char **) NULL) { MagickError(ResourceLimitError,"Unable to convert string to argv", "Memory allocation failed"); return(False); } /* Convert string to an ASCII list. */ vector[0]=AllocateString("isapimagick"); vector[count+1]=(char *) NULL; q=text; i=1; while (i <= count) { int len; p=q; while (!IsCGIDelimiter(*q)) q++; /* Skip an zero length tokens. This typically happens for the case of xxx=& on a CGI GET or POST were the name value pair has no value */ len=q-p; if (len > 0) { vector[i]=(char *) AcquireMemory(q-p+1); if (vector[i] == (char *) NULL) { MagickError(ResourceLimitError,"Unable to convert string to argv", "Memory allocation failed"); return(False); } (void) strncpy(vector[i],p,q-p); vector[i][q-p]='\0'; /* Convert any special HTML codes in place back to ASCII */ HttpUnescape(vector[i], (char *) NULL); i++; } q++; } *argc=count+1; *argv=vector; return(True); }