Avoid redundant buffer copies for get_record
authorJakub Skoczen <jakub@indexdata.dk>
Tue, 4 May 2010 11:52:55 +0000 (13:52 +0200)
committerJakub Skoczen <jakub@indexdata.dk>
Tue, 4 May 2010 11:52:55 +0000 (13:52 +0200)
src/main/java/org/yaz4j/Record.java
src/main/native/zoom-extra.cpp
src/main/native/zoom-extra.h
src/main/swig/libyaz4j.i

index 3770132..2e99158 100644 (file)
@@ -23,8 +23,7 @@ public class Record implements Cloneable {
     }
 
     public byte[] get(String type) {
-        SWIGTYPE_p_int length = null;
-        return yaz4jlib.ZOOM_record_get_bytes(record, type, length);
+        return yaz4jlib.ZOOM_record_get_bytes(record, type);
     }
 
     public String render() {
index 0521686..2f4cb6f 100644 (file)
@@ -1,12 +1,9 @@
 #include "zoom-extra.h"
 #include <string.h>
 
-struct CharStarByteArray ZOOM_record_get_bytes(ZOOM_record rec, const char *type, int *len)
+struct CharStarByteArray ZOOM_record_get_bytes(ZOOM_record rec, const char *type)
 {
        struct CharStarByteArray node;
-       const char* pageData = ZOOM_record_get(rec, type, len);
-       node.length = strlen(pageData);
-       node.data = (char*) malloc(node.length+1);
-       strcpy(node.data, pageData);
+       node.data = ZOOM_record_get(rec, type, &node.length);
        return node;
 }
index 6d428a8..0792b9a 100644 (file)
@@ -3,9 +3,9 @@
 #include <yaz/zoom.h>
 struct CharStarByteArray
 {
-       char* data;
-       long length;
+       const char* data;
+       int length;
 };
-struct CharStarByteArray ZOOM_record_get_bytes(ZOOM_record rec, const char *type, int *len);
+struct CharStarByteArray ZOOM_record_get_bytes(ZOOM_record rec, const char *type);
 #endif
 
index 61e4693..3e686e2 100644 (file)
@@ -14,7 +14,6 @@
        %typemap(jstype) CharStarByteArray "byte[]"
        %typemap(out) CharStarByteArray {
                $result = SWIG_JavaArrayOutSchar(jenv, (signed char*) $1.data, $1.length);
-               free((void*)$1.data);
        }
        %typemap(javaout) CharStarByteArray { return $jnicall; }
        %define YAZ_BEGIN_CDECL %enddef