diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2009-07-01 20:56:58 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2009-07-02 10:11:55 +0100 |
commit | 5186251f8f681f2ebb028423bb49a748861fd11e (patch) | |
tree | b95ea92a8ed1b9443dc04aaf7cdacc8191291bc0 /java | |
parent | f20854ec61eef1aea313920f0cf193a78c1a9219 (diff) | |
download | libguestfs-5186251f8f681f2ebb028423bb49a748861fd11e.tar.gz libguestfs-5186251f8f681f2ebb028423bb49a748861fd11e.tar.xz libguestfs-5186251f8f681f2ebb028423bb49a748861fd11e.zip |
Add 'readdir' call.
This adds a readdir call (mostly intended for programs). The
return value is a list of guestfs_dirent structures.
This adds the new types 'struct guestfs_dirent' and
'struct guestfs_dirent_list', along with all the code to
return these in the different language bindings.
Also includes additional tests for OCaml and Perl bindings
to test this.
Diffstat (limited to 'java')
-rw-r--r-- | java/Makefile.am | 1 | ||||
-rw-r--r-- | java/com/redhat/et/libguestfs/Dirent.java | 34 | ||||
-rw-r--r-- | java/com/redhat/et/libguestfs/GuestFS.java | 27 | ||||
-rw-r--r-- | java/com_redhat_et_libguestfs_GuestFS.c | 36 |
4 files changed, 98 insertions, 0 deletions
diff --git a/java/Makefile.am b/java/Makefile.am index 633ecdad..ea90a482 100644 --- a/java/Makefile.am +++ b/java/Makefile.am @@ -25,6 +25,7 @@ java_sources = \ $(CPTH)/LV.java \ $(CPTH)/Stat.java \ $(CPTH)/StatVFS.java \ + $(CPTH)/Dirent.java \ $(CPTH)/GuestFS.java java_tests = \ diff --git a/java/com/redhat/et/libguestfs/Dirent.java b/java/com/redhat/et/libguestfs/Dirent.java new file mode 100644 index 00000000..f6ef3d8d --- /dev/null +++ b/java/com/redhat/et/libguestfs/Dirent.java @@ -0,0 +1,34 @@ +/* libguestfs generated file + * WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'. + * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST. + * + * Copyright (C) 2009 Red Hat Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package com.redhat.et.libguestfs; + +/** + * Libguestfs Dirent structure. + * + * @author rjones + * @see GuestFS + */ +public class Dirent { + public long ino; + public char ftyp; + public String name; +} diff --git a/java/com/redhat/et/libguestfs/GuestFS.java b/java/com/redhat/et/libguestfs/GuestFS.java index cc94a987..e8f36ff4 100644 --- a/java/com/redhat/et/libguestfs/GuestFS.java +++ b/java/com/redhat/et/libguestfs/GuestFS.java @@ -29,6 +29,7 @@ import com.redhat.et.libguestfs.LV; import com.redhat.et.libguestfs.Stat; import com.redhat.et.libguestfs.StatVFS; import com.redhat.et.libguestfs.IntBool; +import com.redhat.et.libguestfs.Dirent; /** * The GuestFS object is a libguestfs handle. @@ -4054,4 +4055,30 @@ public HashMap<String,String> test0rhashtableerr () private native int _umask (long g, int mask) throws LibGuestFSException; + /** + * read directories entries + * <p> + * This returns the list of directory entries in directory + * "dir". + * <p> + * All entries in the directory are returned, including "." + * and "..". The entries are *not* sorted, but returned in + * the same order as the underlying filesystem. + * <p> + * This function is primarily intended for use by programs. + * To get a simple list of names, use "g.ls". To get a + * printable directory for human consumption, use "g.ll". + * <p> + * @throws LibGuestFSException + */ + public Dirent[] readdir (String dir) + throws LibGuestFSException + { + if (g == 0) + throw new LibGuestFSException ("readdir: handle is closed"); + return _readdir (g, dir); + } + private native Dirent[] _readdir (long g, String dir) + throws LibGuestFSException; + } diff --git a/java/com_redhat_et_libguestfs_GuestFS.c b/java/com_redhat_et_libguestfs_GuestFS.c index 91095a48..52137ecd 100644 --- a/java/com_redhat_et_libguestfs_GuestFS.c +++ b/java/com_redhat_et_libguestfs_GuestFS.c @@ -4635,3 +4635,39 @@ Java_com_redhat_et_libguestfs_GuestFS__1umask return (jint) r; } +JNIEXPORT jobjectArray JNICALL +Java_com_redhat_et_libguestfs_GuestFS__1readdir + (JNIEnv *env, jobject obj, jlong jg, jstring jdir) +{ + guestfs_h *g = (guestfs_h *) (long) jg; + jobjectArray jr; + jclass cl; + jfieldID fl; + jobject jfl; + struct guestfs_dirent_list *r; + const char *dir; + int i; + + dir = (*env)->GetStringUTFChars (env, jdir, NULL); + r = guestfs_readdir (g, dir); + (*env)->ReleaseStringUTFChars (env, jdir, dir); + if (r == NULL) { + throw_exception (env, guestfs_last_error (g)); + return NULL; + } + cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/Dirent"); + jr = (*env)->NewObjectArray (env, r->len, cl, NULL); + for (i = 0; i < r->len; ++i) { + jfl = (*env)->AllocObject (env, cl); + fl = (*env)->GetFieldID (env, cl, "ino", "J"); + (*env)->SetLongField (env, jfl, fl, r->val[i].ino); + fl = (*env)->GetFieldID (env, cl, "ftyp", "J"); + (*env)->SetLongField (env, jfl, fl, r->val[i].ftyp); + fl = (*env)->GetFieldID (env, cl, "name", "Ljava/lang/String;"); + (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].name)); + (*env)->SetObjectArrayElement (env, jfl, i, jfl); + } + guestfs_free_dirent_list (r); + return jr; +} + |