Generated code for head/tail commands.
[libguestfs.git] / java / com_redhat_et_libguestfs_GuestFS.c
index 466ced8..501e8d1 100644 (file)
@@ -62,126 +62,161 @@ Java_com_redhat_et_libguestfs_GuestFS__1close
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1launch
-  (JNIEnv *env, jobject obj, jlong jg)
+Java_com_redhat_et_libguestfs_GuestFS__1test0
+  (JNIEnv *env, jobject obj, jlong jg, jstring jstr, jstring joptstr, jobjectArray jstrlist, jboolean jb, jint jinteger, jstring jfilein, jstring jfileout)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
+  const char *str;
+  const char *optstr;
+  int strlist_len;
+  const char **strlist;
+  int b;
+  int integer;
+  const char *filein;
+  const char *fileout;
+  int i;
 
-  r = guestfs_launch (g);
+  str = (*env)->GetStringUTFChars (env, jstr, NULL);
+  optstr = joptstr ? (*env)->GetStringUTFChars (env, joptstr, NULL) : NULL;
+  strlist_len = (*env)->GetArrayLength (env, jstrlist);
+  strlist = guestfs_safe_malloc (g, sizeof (char *) * (strlist_len+1));
+  for (i = 0; i < strlist_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jstrlist, i);
+    strlist[i] = (*env)->GetStringUTFChars (env, o, NULL);
+  }
+  strlist[strlist_len] = NULL;
+  b = jb;
+  integer = jinteger;
+  filein = (*env)->GetStringUTFChars (env, jfilein, NULL);
+  fileout = (*env)->GetStringUTFChars (env, jfileout, NULL);
+  r = guestfs_test0 (g, str, optstr, strlist, b, integer, filein, fileout);
+  (*env)->ReleaseStringUTFChars (env, jstr, str);
+  if (joptstr)
+    (*env)->ReleaseStringUTFChars (env, joptstr, optstr);
+  for (i = 0; i < strlist_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jstrlist, i);
+    (*env)->ReleaseStringUTFChars (env, o, strlist[i]);
+  }
+  free (strlist);
+  (*env)->ReleaseStringUTFChars (env, jfilein, filein);
+  (*env)->ReleaseStringUTFChars (env, jfileout, fileout);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1wait_1ready
-  (JNIEnv *env, jobject obj, jlong jg)
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rint
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
+  const char *val;
 
-  r = guestfs_wait_ready (g);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rint (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jint) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1kill_1subprocess
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rinterr
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
 
-  r = guestfs_kill_subprocess (g);
+  r = guestfs_test0rinterr (g);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jint) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1add_1drive
-  (JNIEnv *env, jobject obj, jlong jg, jstring jfilename)
+JNIEXPORT jlong JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rint64
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *filename;
+  int64_t r;
+  const char *val;
 
-  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
-  r = guestfs_add_drive (g, filename);
-  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rint64 (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jlong) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1add_1cdrom
-  (JNIEnv *env, jobject obj, jlong jg, jstring jfilename)
+JNIEXPORT jlong JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rint64err
+  (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *filename;
+  int64_t r;
 
-  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
-  r = guestfs_add_cdrom (g, filename);
-  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
+  r = guestfs_test0rint64err (g);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jlong) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1config
-  (JNIEnv *env, jobject obj, jlong jg, jstring jqemuparam, jstring jqemuvalue)
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rbool
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *qemuparam;
-  const char *qemuvalue;
+  const char *val;
 
-  qemuparam = (*env)->GetStringUTFChars (env, jqemuparam, NULL);
-  qemuvalue = (*env)->GetStringUTFChars (env, jqemuvalue, NULL);
-  r = guestfs_config (g, qemuparam, qemuvalue);
-  (*env)->ReleaseStringUTFChars (env, jqemuparam, qemuparam);
-  (*env)->ReleaseStringUTFChars (env, jqemuvalue, qemuvalue);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rbool (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jboolean) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1qemu
-  (JNIEnv *env, jobject obj, jlong jg, jstring jqemu)
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rboolerr
+  (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *qemu;
 
-  qemu = (*env)->GetStringUTFChars (env, jqemu, NULL);
-  r = guestfs_set_qemu (g, qemu);
-  (*env)->ReleaseStringUTFChars (env, jqemu, qemu);
+  r = guestfs_test0rboolerr (g);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jboolean) r;
 }
 
 JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1get_1qemu
-  (JNIEnv *env, jobject obj, jlong jg)
+Java_com_redhat_et_libguestfs_GuestFS__1test0rconststring
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   const char *r;
+  const char *val;
 
-  r = guestfs_get_qemu (g);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rconststring (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -189,31 +224,14 @@ Java_com_redhat_et_libguestfs_GuestFS__1get_1qemu
   return (*env)->NewStringUTF (env, r);
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1path
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *path;
-
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_set_path (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
 JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1get_1path
+Java_com_redhat_et_libguestfs_GuestFS__1test0rconststringerr
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   const char *r;
 
-  r = guestfs_get_path (g);
+  r = guestfs_test0rconststringerr (g);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -221,509 +239,359 @@ Java_com_redhat_et_libguestfs_GuestFS__1get_1path
   return (*env)->NewStringUTF (env, r);
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1autosync
-  (JNIEnv *env, jobject obj, jlong jg, jboolean jautosync)
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstring
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  int autosync;
+  jstring jr;
+  char *r;
+  const char *val;
 
-  autosync = jautosync;
-  r = guestfs_set_autosync (g, autosync);
-  if (r == -1) {
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rstring (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
   }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1get_1autosync
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstringerr
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
+  jstring jr;
+  char *r;
 
-  r = guestfs_get_autosync (g);
-  if (r == -1) {
+  r = guestfs_test0rstringerr (g);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return NULL;
   }
-  return (jboolean) r;
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1verbose
-  (JNIEnv *env, jobject obj, jlong jg, jboolean jverbose)
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstringlist
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  int verbose;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *val;
+  int i;
 
-  verbose = jverbose;
-  r = guestfs_set_verbose (g, verbose);
-  if (r == -1) {
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rstringlist (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
   }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1get_1verbose
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstringlisterr
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int i;
 
-  r = guestfs_get_verbose (g);
-  if (r == -1) {
+  r = guestfs_test0rstringlisterr (g);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return NULL;
   }
-  return (jboolean) r;
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1is_1ready
-  (JNIEnv *env, jobject obj, jlong jg)
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rintbool
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_int_bool *r;
+  const char *val;
 
-  r = guestfs_is_ready (g);
-  if (r == -1) {
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rintbool (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return NULL;
   }
-  return (jboolean) r;
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/IntBool");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "i", "I");
+  (*env)->SetIntField (env, jr, fl, r->i);
+  fl = (*env)->GetFieldID (env, cl, "i", "Z");
+  (*env)->SetBooleanField (env, jr, fl, r->b);
+  guestfs_free_int_bool (r);
+  return jr;
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1is_1config
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rintboolerr
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_int_bool *r;
 
-  r = guestfs_is_config (g);
-  if (r == -1) {
+  r = guestfs_test0rintboolerr (g);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return NULL;
   }
-  return (jboolean) r;
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/IntBool");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "i", "I");
+  (*env)->SetIntField (env, jr, fl, r->i);
+  fl = (*env)->GetFieldID (env, cl, "i", "Z");
+  (*env)->SetBooleanField (env, jr, fl, r->b);
+  guestfs_free_int_bool (r);
+  return jr;
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1is_1launching
-  (JNIEnv *env, jobject obj, jlong jg)
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rpvlist
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_is_launching (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return 0;
-  }
-  return (jboolean) r;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1is_1busy
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_is_busy (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return 0;
-  }
-  return (jboolean) r;
-}
-
-JNIEXPORT jint JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1get_1state
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_get_state (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return 0;
-  }
-  return (jint) r;
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1busy
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_set_busy (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1ready
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_set_ready (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mount
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring jmountpoint)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *device;
-  const char *mountpoint;
-
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
-  r = guestfs_mount (g, device, mountpoint);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1sync
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_sync (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1touch
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *path;
-
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_touch (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1cat
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jstring jr;
-  char *r;
-  const char *path;
+  jobjectArray jr;
+  jclass cl;
+  jfieldID fl;
+  jobject jfl;
+  struct guestfs_lvm_pv_list *r;
+  const char *val;
+  int i;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_cat (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rpvlist (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  jr = (*env)->NewStringUTF (env, r);
-  free (r);
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/PV");
+  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, "pv_name", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_name));
+    {
+      char s[33];
+      memcpy (s, r->val[i].pv_uuid, 32);
+      s[32] = 0;
+      fl = (*env)->GetFieldID (env, cl, "pv_uuid", "Ljava/lang/String;");
+      (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));
+    }
+    fl = (*env)->GetFieldID (env, cl, "pv_fmt", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_fmt));
+    fl = (*env)->GetFieldID (env, cl, "pv_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_size);
+    fl = (*env)->GetFieldID (env, cl, "dev_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].dev_size);
+    fl = (*env)->GetFieldID (env, cl, "pv_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_free);
+    fl = (*env)->GetFieldID (env, cl, "pv_used", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_used);
+    fl = (*env)->GetFieldID (env, cl, "pv_attr", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_attr));
+    fl = (*env)->GetFieldID (env, cl, "pv_pe_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_pe_alloc_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_alloc_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_tags", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_tags));
+    fl = (*env)->GetFieldID (env, cl, "pe_start", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pe_start);
+    fl = (*env)->GetFieldID (env, cl, "pv_mda_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_mda_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_free);
+    (*env)->SetObjectArrayElement (env, jfl, i, jfl);
+  }
+  guestfs_free_lvm_pv_list (r);
   return jr;
 }
 
-JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1ll
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory)
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rpvlisterr
+  (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jstring jr;
-  char *r;
-  const char *directory;
+  jobjectArray jr;
+  jclass cl;
+  jfieldID fl;
+  jobject jfl;
+  struct guestfs_lvm_pv_list *r;
+  int i;
 
-  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
-  r = guestfs_ll (g, directory);
-  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  r = guestfs_test0rpvlisterr (g);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  jr = (*env)->NewStringUTF (env, r);
-  free (r);
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/PV");
+  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, "pv_name", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_name));
+    {
+      char s[33];
+      memcpy (s, r->val[i].pv_uuid, 32);
+      s[32] = 0;
+      fl = (*env)->GetFieldID (env, cl, "pv_uuid", "Ljava/lang/String;");
+      (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));
+    }
+    fl = (*env)->GetFieldID (env, cl, "pv_fmt", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_fmt));
+    fl = (*env)->GetFieldID (env, cl, "pv_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_size);
+    fl = (*env)->GetFieldID (env, cl, "dev_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].dev_size);
+    fl = (*env)->GetFieldID (env, cl, "pv_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_free);
+    fl = (*env)->GetFieldID (env, cl, "pv_used", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_used);
+    fl = (*env)->GetFieldID (env, cl, "pv_attr", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_attr));
+    fl = (*env)->GetFieldID (env, cl, "pv_pe_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_pe_alloc_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_alloc_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_tags", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_tags));
+    fl = (*env)->GetFieldID (env, cl, "pe_start", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pe_start);
+    fl = (*env)->GetFieldID (env, cl, "pv_mda_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_mda_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_free);
+    (*env)->SetObjectArrayElement (env, jfl, i, jfl);
+  }
+  guestfs_free_lvm_pv_list (r);
   return jr;
 }
 
 JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1ls
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory)
+Java_com_redhat_et_libguestfs_GuestFS__1test0rvglist
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   jobjectArray jr;
-  int r_len;
   jclass cl;
-  jstring jstr;
-  char **r;
-  const char *directory;
+  jfieldID fl;
+  jobject jfl;
+  struct guestfs_lvm_vg_list *r;
+  const char *val;
   int i;
 
-  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
-  r = guestfs_ls (g, directory);
-  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rvglist (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
-  free (r);
-  return jr;
-}
-
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1list_1devices
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
-  jclass cl;
-  jstring jstr;
-  char **r;
-  int i;
-
-  r = guestfs_list_devices (g);
-  if (r == NULL) {
-    throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
-  free (r);
-  return jr;
-}
-
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1list_1partitions
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
-  jclass cl;
-  jstring jstr;
-  char **r;
-  int i;
-
-  r = guestfs_list_partitions (g);
-  if (r == NULL) {
-    throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
-  free (r);
-  return jr;
-}
-
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1pvs
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
-  jclass cl;
-  jstring jstr;
-  char **r;
-  int i;
-
-  r = guestfs_pvs (g);
-  if (r == NULL) {
-    throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
-  free (r);
-  return jr;
-}
-
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1vgs
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
-  jclass cl;
-  jstring jstr;
-  char **r;
-  int i;
-
-  r = guestfs_vgs (g);
-  if (r == NULL) {
-    throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
-  free (r);
-  return jr;
-}
-
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1lvs
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
-  jclass cl;
-  jstring jstr;
-  char **r;
-  int i;
-
-  r = guestfs_lvs (g);
-  if (r == NULL) {
-    throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
-  free (r);
-  return jr;
-}
-
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1pvs_1full
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  jclass cl;
-  jfieldID fl;
-  jobject jfl;
-  struct guestfs_lvm_pv_list *r;
-  int i;
-
-  r = guestfs_pvs_full (g);
-  if (r == NULL) {
-    throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/PV");
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/VG");
   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, "pv_name", "Ljava/lang/String;");
-    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_name));
+    fl = (*env)->GetFieldID (env, cl, "vg_name", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_name));
     {
       char s[33];
-      memcpy (s, r->val[i].pv_uuid, 32);
+      memcpy (s, r->val[i].vg_uuid, 32);
       s[32] = 0;
-      fl = (*env)->GetFieldID (env, cl, "pv_uuid", "Ljava/lang/String;");
+      fl = (*env)->GetFieldID (env, cl, "vg_uuid", "Ljava/lang/String;");
       (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));
     }
-    fl = (*env)->GetFieldID (env, cl, "pv_fmt", "Ljava/lang/String;");
-    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_fmt));
-    fl = (*env)->GetFieldID (env, cl, "pv_size", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_size);
-    fl = (*env)->GetFieldID (env, cl, "dev_size", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].dev_size);
-    fl = (*env)->GetFieldID (env, cl, "pv_free", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_free);
-    fl = (*env)->GetFieldID (env, cl, "pv_used", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_used);
-    fl = (*env)->GetFieldID (env, cl, "pv_attr", "Ljava/lang/String;");
-    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_attr));
-    fl = (*env)->GetFieldID (env, cl, "pv_pe_count", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_count);
-    fl = (*env)->GetFieldID (env, cl, "pv_pe_alloc_count", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_alloc_count);
-    fl = (*env)->GetFieldID (env, cl, "pv_tags", "Ljava/lang/String;");
-    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_tags));
-    fl = (*env)->GetFieldID (env, cl, "pe_start", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pe_start);
-    fl = (*env)->GetFieldID (env, cl, "pv_mda_count", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_count);
-    fl = (*env)->GetFieldID (env, cl, "pv_mda_free", "J");
-    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_free);
+    fl = (*env)->GetFieldID (env, cl, "vg_fmt", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_fmt));
+    fl = (*env)->GetFieldID (env, cl, "vg_attr", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_attr));
+    fl = (*env)->GetFieldID (env, cl, "vg_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_size);
+    fl = (*env)->GetFieldID (env, cl, "vg_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_free);
+    fl = (*env)->GetFieldID (env, cl, "vg_sysid", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_sysid));
+    fl = (*env)->GetFieldID (env, cl, "vg_extent_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_extent_size);
+    fl = (*env)->GetFieldID (env, cl, "vg_extent_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_extent_count);
+    fl = (*env)->GetFieldID (env, cl, "vg_free_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_free_count);
+    fl = (*env)->GetFieldID (env, cl, "max_lv", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].max_lv);
+    fl = (*env)->GetFieldID (env, cl, "max_pv", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].max_pv);
+    fl = (*env)->GetFieldID (env, cl, "pv_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_count);
+    fl = (*env)->GetFieldID (env, cl, "lv_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_count);
+    fl = (*env)->GetFieldID (env, cl, "snap_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].snap_count);
+    fl = (*env)->GetFieldID (env, cl, "vg_seqno", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_seqno);
+    fl = (*env)->GetFieldID (env, cl, "vg_tags", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_tags));
+    fl = (*env)->GetFieldID (env, cl, "vg_mda_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_mda_count);
+    fl = (*env)->GetFieldID (env, cl, "vg_mda_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_mda_free);
     (*env)->SetObjectArrayElement (env, jfl, i, jfl);
   }
-  guestfs_free_lvm_pv_list (r);
+  guestfs_free_lvm_vg_list (r);
   return jr;
 }
 
 JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1vgs_1full
+Java_com_redhat_et_libguestfs_GuestFS__1test0rvglisterr
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
@@ -734,7 +602,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1vgs_1full
   struct guestfs_lvm_vg_list *r;
   int i;
 
-  r = guestfs_vgs_full (g);
+  r = guestfs_test0rvglisterr (g);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -793,8 +661,8 @@ Java_com_redhat_et_libguestfs_GuestFS__1vgs_1full
 }
 
 JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1lvs_1full
-  (JNIEnv *env, jobject obj, jlong jg)
+Java_com_redhat_et_libguestfs_GuestFS__1test0rlvlist
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   jobjectArray jr;
@@ -802,9 +670,12 @@ Java_com_redhat_et_libguestfs_GuestFS__1lvs_1full
   jfieldID fl;
   jobject jfl;
   struct guestfs_lvm_lv_list *r;
+  const char *val;
   int i;
 
-  r = guestfs_lvs_full (g);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rlvlist (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -852,13 +723,1821 @@ Java_com_redhat_et_libguestfs_GuestFS__1lvs_1full
     (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].modules));
     (*env)->SetObjectArrayElement (env, jfl, i, jfl);
   }
-  guestfs_free_lvm_lv_list (r);
-  return jr;
+  guestfs_free_lvm_lv_list (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rlvlisterr
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  jclass cl;
+  jfieldID fl;
+  jobject jfl;
+  struct guestfs_lvm_lv_list *r;
+  int i;
+
+  r = guestfs_test0rlvlisterr (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/LV");
+  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, "lv_name", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].lv_name));
+    {
+      char s[33];
+      memcpy (s, r->val[i].lv_uuid, 32);
+      s[32] = 0;
+      fl = (*env)->GetFieldID (env, cl, "lv_uuid", "Ljava/lang/String;");
+      (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));
+    }
+    fl = (*env)->GetFieldID (env, cl, "lv_attr", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].lv_attr));
+    fl = (*env)->GetFieldID (env, cl, "lv_major", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_major);
+    fl = (*env)->GetFieldID (env, cl, "lv_minor", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_minor);
+    fl = (*env)->GetFieldID (env, cl, "lv_kernel_major", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_kernel_major);
+    fl = (*env)->GetFieldID (env, cl, "lv_kernel_minor", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_kernel_minor);
+    fl = (*env)->GetFieldID (env, cl, "lv_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_size);
+    fl = (*env)->GetFieldID (env, cl, "seg_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].seg_count);
+    fl = (*env)->GetFieldID (env, cl, "origin", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].origin));
+    fl = (*env)->GetFieldID (env, cl, "snap_percent", "F");
+    (*env)->SetFloatField (env, jfl, fl, r->val[i].snap_percent);
+    fl = (*env)->GetFieldID (env, cl, "copy_percent", "F");
+    (*env)->SetFloatField (env, jfl, fl, r->val[i].copy_percent);
+    fl = (*env)->GetFieldID (env, cl, "move_pv", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].move_pv));
+    fl = (*env)->GetFieldID (env, cl, "lv_tags", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].lv_tags));
+    fl = (*env)->GetFieldID (env, cl, "mirror_log", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].mirror_log));
+    fl = (*env)->GetFieldID (env, cl, "modules", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].modules));
+    (*env)->SetObjectArrayElement (env, jfl, i, jfl);
+  }
+  guestfs_free_lvm_lv_list (r);
+  return jr;
+}
+
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstat
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_stat *r;
+  const char *val;
+
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rstat (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/Stat");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "dev", "J");
+  (*env)->SetLongField (env, jr, fl, r->dev);
+  fl = (*env)->GetFieldID (env, cl, "ino", "J");
+  (*env)->SetLongField (env, jr, fl, r->ino);
+  fl = (*env)->GetFieldID (env, cl, "mode", "J");
+  (*env)->SetLongField (env, jr, fl, r->mode);
+  fl = (*env)->GetFieldID (env, cl, "nlink", "J");
+  (*env)->SetLongField (env, jr, fl, r->nlink);
+  fl = (*env)->GetFieldID (env, cl, "uid", "J");
+  (*env)->SetLongField (env, jr, fl, r->uid);
+  fl = (*env)->GetFieldID (env, cl, "gid", "J");
+  (*env)->SetLongField (env, jr, fl, r->gid);
+  fl = (*env)->GetFieldID (env, cl, "rdev", "J");
+  (*env)->SetLongField (env, jr, fl, r->rdev);
+  fl = (*env)->GetFieldID (env, cl, "size", "J");
+  (*env)->SetLongField (env, jr, fl, r->size);
+  fl = (*env)->GetFieldID (env, cl, "blksize", "J");
+  (*env)->SetLongField (env, jr, fl, r->blksize);
+  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
+  (*env)->SetLongField (env, jr, fl, r->blocks);
+  fl = (*env)->GetFieldID (env, cl, "atime", "J");
+  (*env)->SetLongField (env, jr, fl, r->atime);
+  fl = (*env)->GetFieldID (env, cl, "mtime", "J");
+  (*env)->SetLongField (env, jr, fl, r->mtime);
+  fl = (*env)->GetFieldID (env, cl, "ctime", "J");
+  (*env)->SetLongField (env, jr, fl, r->ctime);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstaterr
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_stat *r;
+
+  r = guestfs_test0rstaterr (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/Stat");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "dev", "J");
+  (*env)->SetLongField (env, jr, fl, r->dev);
+  fl = (*env)->GetFieldID (env, cl, "ino", "J");
+  (*env)->SetLongField (env, jr, fl, r->ino);
+  fl = (*env)->GetFieldID (env, cl, "mode", "J");
+  (*env)->SetLongField (env, jr, fl, r->mode);
+  fl = (*env)->GetFieldID (env, cl, "nlink", "J");
+  (*env)->SetLongField (env, jr, fl, r->nlink);
+  fl = (*env)->GetFieldID (env, cl, "uid", "J");
+  (*env)->SetLongField (env, jr, fl, r->uid);
+  fl = (*env)->GetFieldID (env, cl, "gid", "J");
+  (*env)->SetLongField (env, jr, fl, r->gid);
+  fl = (*env)->GetFieldID (env, cl, "rdev", "J");
+  (*env)->SetLongField (env, jr, fl, r->rdev);
+  fl = (*env)->GetFieldID (env, cl, "size", "J");
+  (*env)->SetLongField (env, jr, fl, r->size);
+  fl = (*env)->GetFieldID (env, cl, "blksize", "J");
+  (*env)->SetLongField (env, jr, fl, r->blksize);
+  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
+  (*env)->SetLongField (env, jr, fl, r->blocks);
+  fl = (*env)->GetFieldID (env, cl, "atime", "J");
+  (*env)->SetLongField (env, jr, fl, r->atime);
+  fl = (*env)->GetFieldID (env, cl, "mtime", "J");
+  (*env)->SetLongField (env, jr, fl, r->mtime);
+  fl = (*env)->GetFieldID (env, cl, "ctime", "J");
+  (*env)->SetLongField (env, jr, fl, r->ctime);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstatvfs
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_statvfs *r;
+  const char *val;
+
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rstatvfs (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/StatVFS");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "bsize", "J");
+  (*env)->SetLongField (env, jr, fl, r->bsize);
+  fl = (*env)->GetFieldID (env, cl, "frsize", "J");
+  (*env)->SetLongField (env, jr, fl, r->frsize);
+  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
+  (*env)->SetLongField (env, jr, fl, r->blocks);
+  fl = (*env)->GetFieldID (env, cl, "bfree", "J");
+  (*env)->SetLongField (env, jr, fl, r->bfree);
+  fl = (*env)->GetFieldID (env, cl, "bavail", "J");
+  (*env)->SetLongField (env, jr, fl, r->bavail);
+  fl = (*env)->GetFieldID (env, cl, "files", "J");
+  (*env)->SetLongField (env, jr, fl, r->files);
+  fl = (*env)->GetFieldID (env, cl, "ffree", "J");
+  (*env)->SetLongField (env, jr, fl, r->ffree);
+  fl = (*env)->GetFieldID (env, cl, "favail", "J");
+  (*env)->SetLongField (env, jr, fl, r->favail);
+  fl = (*env)->GetFieldID (env, cl, "fsid", "J");
+  (*env)->SetLongField (env, jr, fl, r->fsid);
+  fl = (*env)->GetFieldID (env, cl, "flag", "J");
+  (*env)->SetLongField (env, jr, fl, r->flag);
+  fl = (*env)->GetFieldID (env, cl, "namemax", "J");
+  (*env)->SetLongField (env, jr, fl, r->namemax);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rstatvfserr
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_statvfs *r;
+
+  r = guestfs_test0rstatvfserr (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/StatVFS");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "bsize", "J");
+  (*env)->SetLongField (env, jr, fl, r->bsize);
+  fl = (*env)->GetFieldID (env, cl, "frsize", "J");
+  (*env)->SetLongField (env, jr, fl, r->frsize);
+  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
+  (*env)->SetLongField (env, jr, fl, r->blocks);
+  fl = (*env)->GetFieldID (env, cl, "bfree", "J");
+  (*env)->SetLongField (env, jr, fl, r->bfree);
+  fl = (*env)->GetFieldID (env, cl, "bavail", "J");
+  (*env)->SetLongField (env, jr, fl, r->bavail);
+  fl = (*env)->GetFieldID (env, cl, "files", "J");
+  (*env)->SetLongField (env, jr, fl, r->files);
+  fl = (*env)->GetFieldID (env, cl, "ffree", "J");
+  (*env)->SetLongField (env, jr, fl, r->ffree);
+  fl = (*env)->GetFieldID (env, cl, "favail", "J");
+  (*env)->SetLongField (env, jr, fl, r->favail);
+  fl = (*env)->GetFieldID (env, cl, "fsid", "J");
+  (*env)->SetLongField (env, jr, fl, r->fsid);
+  fl = (*env)->GetFieldID (env, cl, "flag", "J");
+  (*env)->SetLongField (env, jr, fl, r->flag);
+  fl = (*env)->GetFieldID (env, cl, "namemax", "J");
+  (*env)->SetLongField (env, jr, fl, r->namemax);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rhashtable
+  (JNIEnv *env, jobject obj, jlong jg, jstring jval)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  char **r;
+  const char *val;
+
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_test0rhashtable (g, val);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  throw_exception (env, "test0rhashtable: internal error: please let us know how to make a Java HashMap from JNI bindings!");
+  return NULL;
+}
+
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1test0rhashtableerr
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  char **r;
+
+  r = guestfs_test0rhashtableerr (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  throw_exception (env, "test0rhashtableerr: internal error: please let us know how to make a Java HashMap from JNI bindings!");
+  return NULL;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1launch
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_launch (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1wait_1ready
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_wait_ready (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1kill_1subprocess
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_kill_subprocess (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1add_1drive
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfilename)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *filename;
+
+  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
+  r = guestfs_add_drive (g, filename);
+  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1add_1cdrom
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfilename)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *filename;
+
+  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
+  r = guestfs_add_cdrom (g, filename);
+  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1add_1drive_1ro
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfilename)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *filename;
+
+  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
+  r = guestfs_add_drive_ro (g, filename);
+  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1config
+  (JNIEnv *env, jobject obj, jlong jg, jstring jqemuparam, jstring jqemuvalue)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *qemuparam;
+  const char *qemuvalue;
+
+  qemuparam = (*env)->GetStringUTFChars (env, jqemuparam, NULL);
+  qemuvalue = jqemuvalue ? (*env)->GetStringUTFChars (env, jqemuvalue, NULL) : NULL;
+  r = guestfs_config (g, qemuparam, qemuvalue);
+  (*env)->ReleaseStringUTFChars (env, jqemuparam, qemuparam);
+  if (jqemuvalue)
+    (*env)->ReleaseStringUTFChars (env, jqemuvalue, qemuvalue);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1qemu
+  (JNIEnv *env, jobject obj, jlong jg, jstring jqemu)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *qemu;
+
+  qemu = (*env)->GetStringUTFChars (env, jqemu, NULL);
+  r = guestfs_set_qemu (g, qemu);
+  (*env)->ReleaseStringUTFChars (env, jqemu, qemu);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1qemu
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  const char *r;
+
+  r = guestfs_get_qemu (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  return (*env)->NewStringUTF (env, r);
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1path
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_set_path (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1path
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  const char *r;
+
+  r = guestfs_get_path (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  return (*env)->NewStringUTF (env, r);
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1append
+  (JNIEnv *env, jobject obj, jlong jg, jstring jappend)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *append;
+
+  append = (*env)->GetStringUTFChars (env, jappend, NULL);
+  r = guestfs_set_append (g, append);
+  (*env)->ReleaseStringUTFChars (env, jappend, append);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1append
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  const char *r;
+
+  r = guestfs_get_append (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  return (*env)->NewStringUTF (env, r);
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1autosync
+  (JNIEnv *env, jobject obj, jlong jg, jboolean jautosync)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  int autosync;
+
+  autosync = jautosync;
+  r = guestfs_set_autosync (g, autosync);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1autosync
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_get_autosync (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1verbose
+  (JNIEnv *env, jobject obj, jlong jg, jboolean jverbose)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  int verbose;
+
+  verbose = jverbose;
+  r = guestfs_set_verbose (g, verbose);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1verbose
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_get_verbose (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1is_1ready
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_is_ready (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1is_1config
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_is_config (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1is_1launching
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_is_launching (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1is_1busy
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_is_busy (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1state
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_get_state (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jint) r;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1busy
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_set_busy (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1ready
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_set_ready (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1end_1busy
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_end_busy (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1mount
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring jmountpoint)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *device;
+  const char *mountpoint;
+
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
+  r = guestfs_mount (g, device, mountpoint);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1sync
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_sync (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1touch
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_touch (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1cat
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jstring jr;
+  char *r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_cat (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1ll
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jstring jr;
+  char *r;
+  const char *directory;
+
+  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
+  r = guestfs_ll (g, directory);
+  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1ls
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *directory;
+  int i;
+
+  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
+  r = guestfs_ls (g, directory);
+  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1list_1devices
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int i;
+
+  r = guestfs_list_devices (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1list_1partitions
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int i;
+
+  r = guestfs_list_partitions (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1pvs
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int i;
+
+  r = guestfs_pvs (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1vgs
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int i;
+
+  r = guestfs_vgs (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1lvs
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int i;
+
+  r = guestfs_lvs (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1pvs_1full
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  jclass cl;
+  jfieldID fl;
+  jobject jfl;
+  struct guestfs_lvm_pv_list *r;
+  int i;
+
+  r = guestfs_pvs_full (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/PV");
+  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, "pv_name", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_name));
+    {
+      char s[33];
+      memcpy (s, r->val[i].pv_uuid, 32);
+      s[32] = 0;
+      fl = (*env)->GetFieldID (env, cl, "pv_uuid", "Ljava/lang/String;");
+      (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));
+    }
+    fl = (*env)->GetFieldID (env, cl, "pv_fmt", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_fmt));
+    fl = (*env)->GetFieldID (env, cl, "pv_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_size);
+    fl = (*env)->GetFieldID (env, cl, "dev_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].dev_size);
+    fl = (*env)->GetFieldID (env, cl, "pv_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_free);
+    fl = (*env)->GetFieldID (env, cl, "pv_used", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_used);
+    fl = (*env)->GetFieldID (env, cl, "pv_attr", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_attr));
+    fl = (*env)->GetFieldID (env, cl, "pv_pe_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_pe_alloc_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_pe_alloc_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_tags", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].pv_tags));
+    fl = (*env)->GetFieldID (env, cl, "pe_start", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pe_start);
+    fl = (*env)->GetFieldID (env, cl, "pv_mda_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_count);
+    fl = (*env)->GetFieldID (env, cl, "pv_mda_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_mda_free);
+    (*env)->SetObjectArrayElement (env, jfl, i, jfl);
+  }
+  guestfs_free_lvm_pv_list (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1vgs_1full
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  jclass cl;
+  jfieldID fl;
+  jobject jfl;
+  struct guestfs_lvm_vg_list *r;
+  int i;
+
+  r = guestfs_vgs_full (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/VG");
+  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, "vg_name", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_name));
+    {
+      char s[33];
+      memcpy (s, r->val[i].vg_uuid, 32);
+      s[32] = 0;
+      fl = (*env)->GetFieldID (env, cl, "vg_uuid", "Ljava/lang/String;");
+      (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));
+    }
+    fl = (*env)->GetFieldID (env, cl, "vg_fmt", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_fmt));
+    fl = (*env)->GetFieldID (env, cl, "vg_attr", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_attr));
+    fl = (*env)->GetFieldID (env, cl, "vg_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_size);
+    fl = (*env)->GetFieldID (env, cl, "vg_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_free);
+    fl = (*env)->GetFieldID (env, cl, "vg_sysid", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_sysid));
+    fl = (*env)->GetFieldID (env, cl, "vg_extent_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_extent_size);
+    fl = (*env)->GetFieldID (env, cl, "vg_extent_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_extent_count);
+    fl = (*env)->GetFieldID (env, cl, "vg_free_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_free_count);
+    fl = (*env)->GetFieldID (env, cl, "max_lv", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].max_lv);
+    fl = (*env)->GetFieldID (env, cl, "max_pv", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].max_pv);
+    fl = (*env)->GetFieldID (env, cl, "pv_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].pv_count);
+    fl = (*env)->GetFieldID (env, cl, "lv_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_count);
+    fl = (*env)->GetFieldID (env, cl, "snap_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].snap_count);
+    fl = (*env)->GetFieldID (env, cl, "vg_seqno", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_seqno);
+    fl = (*env)->GetFieldID (env, cl, "vg_tags", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].vg_tags));
+    fl = (*env)->GetFieldID (env, cl, "vg_mda_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_mda_count);
+    fl = (*env)->GetFieldID (env, cl, "vg_mda_free", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].vg_mda_free);
+    (*env)->SetObjectArrayElement (env, jfl, i, jfl);
+  }
+  guestfs_free_lvm_vg_list (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1lvs_1full
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  jclass cl;
+  jfieldID fl;
+  jobject jfl;
+  struct guestfs_lvm_lv_list *r;
+  int i;
+
+  r = guestfs_lvs_full (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/LV");
+  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, "lv_name", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].lv_name));
+    {
+      char s[33];
+      memcpy (s, r->val[i].lv_uuid, 32);
+      s[32] = 0;
+      fl = (*env)->GetFieldID (env, cl, "lv_uuid", "Ljava/lang/String;");
+      (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, s));
+    }
+    fl = (*env)->GetFieldID (env, cl, "lv_attr", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].lv_attr));
+    fl = (*env)->GetFieldID (env, cl, "lv_major", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_major);
+    fl = (*env)->GetFieldID (env, cl, "lv_minor", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_minor);
+    fl = (*env)->GetFieldID (env, cl, "lv_kernel_major", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_kernel_major);
+    fl = (*env)->GetFieldID (env, cl, "lv_kernel_minor", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_kernel_minor);
+    fl = (*env)->GetFieldID (env, cl, "lv_size", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].lv_size);
+    fl = (*env)->GetFieldID (env, cl, "seg_count", "J");
+    (*env)->SetLongField (env, jfl, fl, r->val[i].seg_count);
+    fl = (*env)->GetFieldID (env, cl, "origin", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].origin));
+    fl = (*env)->GetFieldID (env, cl, "snap_percent", "F");
+    (*env)->SetFloatField (env, jfl, fl, r->val[i].snap_percent);
+    fl = (*env)->GetFieldID (env, cl, "copy_percent", "F");
+    (*env)->SetFloatField (env, jfl, fl, r->val[i].copy_percent);
+    fl = (*env)->GetFieldID (env, cl, "move_pv", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].move_pv));
+    fl = (*env)->GetFieldID (env, cl, "lv_tags", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].lv_tags));
+    fl = (*env)->GetFieldID (env, cl, "mirror_log", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].mirror_log));
+    fl = (*env)->GetFieldID (env, cl, "modules", "Ljava/lang/String;");
+    (*env)->SetObjectField (env, jfl, fl, (*env)->NewStringUTF (env, r->val[i].modules));
+    (*env)->SetObjectArrayElement (env, jfl, i, jfl);
+  }
+  guestfs_free_lvm_lv_list (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1read_1lines
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *path;
+  int i;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_read_lines (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1init
+  (JNIEnv *env, jobject obj, jlong jg, jstring jroot, jint jflags)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *root;
+  int flags;
+
+  root = (*env)->GetStringUTFChars (env, jroot, NULL);
+  flags = jflags;
+  r = guestfs_aug_init (g, root, flags);
+  (*env)->ReleaseStringUTFChars (env, jroot, root);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1close
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_aug_close (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1defvar
+  (JNIEnv *env, jobject obj, jlong jg, jstring jname, jstring jexpr)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *name;
+  const char *expr;
+
+  name = (*env)->GetStringUTFChars (env, jname, NULL);
+  expr = jexpr ? (*env)->GetStringUTFChars (env, jexpr, NULL) : NULL;
+  r = guestfs_aug_defvar (g, name, expr);
+  (*env)->ReleaseStringUTFChars (env, jname, name);
+  if (jexpr)
+    (*env)->ReleaseStringUTFChars (env, jexpr, expr);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jint) r;
+}
+
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1defnode
+  (JNIEnv *env, jobject obj, jlong jg, jstring jname, jstring jexpr, jstring jval)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_int_bool *r;
+  const char *name;
+  const char *expr;
+  const char *val;
+
+  name = (*env)->GetStringUTFChars (env, jname, NULL);
+  expr = (*env)->GetStringUTFChars (env, jexpr, NULL);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_aug_defnode (g, name, expr, val);
+  (*env)->ReleaseStringUTFChars (env, jname, name);
+  (*env)->ReleaseStringUTFChars (env, jexpr, expr);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/IntBool");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "i", "I");
+  (*env)->SetIntField (env, jr, fl, r->i);
+  fl = (*env)->GetFieldID (env, cl, "i", "Z");
+  (*env)->SetBooleanField (env, jr, fl, r->b);
+  guestfs_free_int_bool (r);
+  return jr;
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1get
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jstring jr;
+  char *r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_aug_get (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1set
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath, jstring jval)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+  const char *val;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  val = (*env)->GetStringUTFChars (env, jval, NULL);
+  r = guestfs_aug_set (g, path, val);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  (*env)->ReleaseStringUTFChars (env, jval, val);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1insert
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath, jstring jlabel, jboolean jbefore)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+  const char *label;
+  int before;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  label = (*env)->GetStringUTFChars (env, jlabel, NULL);
+  before = jbefore;
+  r = guestfs_aug_insert (g, path, label, before);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  (*env)->ReleaseStringUTFChars (env, jlabel, label);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1rm
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_aug_rm (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jint) r;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1mv
+  (JNIEnv *env, jobject obj, jlong jg, jstring jsrc, jstring jdest)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *src;
+  const char *dest;
+
+  src = (*env)->GetStringUTFChars (env, jsrc, NULL);
+  dest = (*env)->GetStringUTFChars (env, jdest, NULL);
+  r = guestfs_aug_mv (g, src, dest);
+  (*env)->ReleaseStringUTFChars (env, jsrc, src);
+  (*env)->ReleaseStringUTFChars (env, jdest, dest);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1match
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *path;
+  int i;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_aug_match (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1save
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_aug_save (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1load
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_aug_load (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1aug_1ls
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *path;
+  int i;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_aug_ls (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1rm
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_rm (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1rmdir
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_rmdir (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1rm_1rf
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_rm_rf (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1mkdir
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_mkdir (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1mkdir_1p
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_mkdir_p (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1chmod
+  (JNIEnv *env, jobject obj, jlong jg, jint jmode, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  int mode;
+  const char *path;
+
+  mode = jmode;
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_chmod (g, mode, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1chown
+  (JNIEnv *env, jobject obj, jlong jg, jint jowner, jint jgroup, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  int owner;
+  int group;
+  const char *path;
+
+  owner = jowner;
+  group = jgroup;
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_chown (g, owner, group, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1exists
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_exists (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1is_1file
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_is_file (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1is_1dir
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_is_dir (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1pvcreate
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *device;
+
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_pvcreate (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1vgcreate
+  (JNIEnv *env, jobject obj, jlong jg, jstring jvolgroup, jobjectArray jphysvols)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *volgroup;
+  int physvols_len;
+  const char **physvols;
+  int i;
+
+  volgroup = (*env)->GetStringUTFChars (env, jvolgroup, NULL);
+  physvols_len = (*env)->GetArrayLength (env, jphysvols);
+  physvols = guestfs_safe_malloc (g, sizeof (char *) * (physvols_len+1));
+  for (i = 0; i < physvols_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jphysvols, i);
+    physvols[i] = (*env)->GetStringUTFChars (env, o, NULL);
+  }
+  physvols[physvols_len] = NULL;
+  r = guestfs_vgcreate (g, volgroup, physvols);
+  (*env)->ReleaseStringUTFChars (env, jvolgroup, volgroup);
+  for (i = 0; i < physvols_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jphysvols, i);
+    (*env)->ReleaseStringUTFChars (env, o, physvols[i]);
+  }
+  free (physvols);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1lvcreate
+  (JNIEnv *env, jobject obj, jlong jg, jstring jlogvol, jstring jvolgroup, jint jmbytes)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *logvol;
+  const char *volgroup;
+  int mbytes;
+
+  logvol = (*env)->GetStringUTFChars (env, jlogvol, NULL);
+  volgroup = (*env)->GetStringUTFChars (env, jvolgroup, NULL);
+  mbytes = jmbytes;
+  r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
+  (*env)->ReleaseStringUTFChars (env, jlogvol, logvol);
+  (*env)->ReleaseStringUTFChars (env, jvolgroup, volgroup);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1mkfs
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfstype, jstring jdevice)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *fstype;
+  const char *device;
+
+  fstype = (*env)->GetStringUTFChars (env, jfstype, NULL);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_mkfs (g, fstype, device);
+  (*env)->ReleaseStringUTFChars (env, jfstype, fstype);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1sfdisk
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jint jcyls, jint jheads, jint jsectors, jobjectArray jlines)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *device;
+  int cyls;
+  int heads;
+  int sectors;
+  int lines_len;
+  const char **lines;
+  int i;
+
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  cyls = jcyls;
+  heads = jheads;
+  sectors = jsectors;
+  lines_len = (*env)->GetArrayLength (env, jlines);
+  lines = guestfs_safe_malloc (g, sizeof (char *) * (lines_len+1));
+  for (i = 0; i < lines_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jlines, i);
+    lines[i] = (*env)->GetStringUTFChars (env, o, NULL);
+  }
+  lines[lines_len] = NULL;
+  r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  for (i = 0; i < lines_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jlines, i);
+    (*env)->ReleaseStringUTFChars (env, o, lines[i]);
+  }
+  free (lines);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1write_1file
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath, jstring jcontent, jint jsize)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *path;
+  const char *content;
+  int size;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  content = (*env)->GetStringUTFChars (env, jcontent, NULL);
+  size = jsize;
+  r = guestfs_write_file (g, path, content, size);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  (*env)->ReleaseStringUTFChars (env, jcontent, content);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1umount
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpathordevice)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *pathordevice;
+
+  pathordevice = (*env)->GetStringUTFChars (env, jpathordevice, NULL);
+  r = guestfs_umount (g, pathordevice);
+  (*env)->ReleaseStringUTFChars (env, jpathordevice, pathordevice);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
 }
 
 JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1read_1lines
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+Java_com_redhat_et_libguestfs_GuestFS__1mounts
+  (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   jobjectArray jr;
@@ -866,12 +2545,9 @@ Java_com_redhat_et_libguestfs_GuestFS__1read_1lines
   jclass cl;
   jstring jstr;
   char **r;
-  const char *path;
   int i;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_read_lines (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  r = guestfs_mounts (g);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -890,18 +2566,13 @@ Java_com_redhat_et_libguestfs_GuestFS__1read_1lines
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1init
-  (JNIEnv *env, jobject obj, jlong jg, jstring jroot, jint jflags)
+Java_com_redhat_et_libguestfs_GuestFS__1umount_1all
+  (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *root;
-  int flags;
 
-  root = (*env)->GetStringUTFChars (env, jroot, NULL);
-  flags = jflags;
-  r = guestfs_aug_init (g, root, flags);
-  (*env)->ReleaseStringUTFChars (env, jroot, root);
+  r = guestfs_umount_all (g);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -909,76 +2580,21 @@ Java_com_redhat_et_libguestfs_GuestFS__1aug_1init
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1close
+Java_com_redhat_et_libguestfs_GuestFS__1lvm_1remove_1all
   (JNIEnv *env, jobject obj, jlong jg)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
 
-  r = guestfs_aug_close (g);
+  r = guestfs_lvm_remove_all (g);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT jint JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1defvar
-  (JNIEnv *env, jobject obj, jlong jg, jstring jname, jstring jexpr)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *name;
-  const char *expr;
-
-  name = (*env)->GetStringUTFChars (env, jname, NULL);
-  expr = (*env)->GetStringUTFChars (env, jexpr, NULL);
-  r = guestfs_aug_defvar (g, name, expr);
-  (*env)->ReleaseStringUTFChars (env, jname, name);
-  (*env)->ReleaseStringUTFChars (env, jexpr, expr);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return 0;
-  }
-  return (jint) r;
-}
-
-JNIEXPORT jobject JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1defnode
-  (JNIEnv *env, jobject obj, jlong jg, jstring jname, jstring jexpr, jstring jval)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  jobject jr;
-  jclass cl;
-  jfieldID fl;
-  struct guestfs_int_bool *r;
-  const char *name;
-  const char *expr;
-  const char *val;
-
-  name = (*env)->GetStringUTFChars (env, jname, NULL);
-  expr = (*env)->GetStringUTFChars (env, jexpr, NULL);
-  val = (*env)->GetStringUTFChars (env, jval, NULL);
-  r = guestfs_aug_defnode (g, name, expr, val);
-  (*env)->ReleaseStringUTFChars (env, jname, name);
-  (*env)->ReleaseStringUTFChars (env, jexpr, expr);
-  (*env)->ReleaseStringUTFChars (env, jval, val);
-  if (r == NULL) {
-    throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/IntBool");
-  jr = (*env)->AllocObject (env, cl);
-  fl = (*env)->GetFieldID (env, cl, "i", "I");
-  (*env)->SetIntField (env, jr, fl, r->i);
-  fl = (*env)->GetFieldID (env, cl, "i", "Z");
-  (*env)->SetBooleanField (env, jr, fl, r->b);
-  guestfs_free_int_bool (r);
-  return jr;
-}
-
 JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1get
+Java_com_redhat_et_libguestfs_GuestFS__1file
   (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
@@ -987,7 +2603,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1aug_1get
   const char *path;
 
   path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_aug_get (g, path);
+  r = guestfs_file (g, path);
   (*env)->ReleaseStringUTFChars (env, jpath, path);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
@@ -998,208 +2614,259 @@ Java_com_redhat_et_libguestfs_GuestFS__1aug_1get
   return jr;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1set
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath, jstring jval)
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1command
+  (JNIEnv *env, jobject obj, jlong jg, jobjectArray jarguments)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *path;
-  const char *val;
+  jstring jr;
+  char *r;
+  int arguments_len;
+  const char **arguments;
+  int i;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  val = (*env)->GetStringUTFChars (env, jval, NULL);
-  r = guestfs_aug_set (g, path, val);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
-  (*env)->ReleaseStringUTFChars (env, jval, val);
-  if (r == -1) {
+  arguments_len = (*env)->GetArrayLength (env, jarguments);
+  arguments = guestfs_safe_malloc (g, sizeof (char *) * (arguments_len+1));
+  for (i = 0; i < arguments_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
+    arguments[i] = (*env)->GetStringUTFChars (env, o, NULL);
+  }
+  arguments[arguments_len] = NULL;
+  r = guestfs_command (g, arguments);
+  for (i = 0; i < arguments_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
+    (*env)->ReleaseStringUTFChars (env, o, arguments[i]);
+  }
+  free (arguments);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
   }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1insert
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath, jstring jlabel, jboolean jbefore)
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1command_1lines
+  (JNIEnv *env, jobject obj, jlong jg, jobjectArray jarguments)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *path;
-  const char *label;
-  int before;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int arguments_len;
+  const char **arguments;
+  int i;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  label = (*env)->GetStringUTFChars (env, jlabel, NULL);
-  before = jbefore;
-  r = guestfs_aug_insert (g, path, label, before);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
-  (*env)->ReleaseStringUTFChars (env, jlabel, label);
-  if (r == -1) {
+  arguments_len = (*env)->GetArrayLength (env, jarguments);
+  arguments = guestfs_safe_malloc (g, sizeof (char *) * (arguments_len+1));
+  for (i = 0; i < arguments_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
+    arguments[i] = (*env)->GetStringUTFChars (env, o, NULL);
+  }
+  arguments[arguments_len] = NULL;
+  r = guestfs_command_lines (g, arguments);
+  for (i = 0; i < arguments_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
+    (*env)->ReleaseStringUTFChars (env, o, arguments[i]);
+  }
+  free (arguments);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
   }
+  free (r);
+  return jr;
 }
 
-JNIEXPORT jint JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1rm
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1stat
   (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
+  jobject jr;
+  jclass cl;
+  jfieldID fl;
+  struct guestfs_stat *r;
   const char *path;
 
   path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_aug_rm (g, path);
+  r = guestfs_stat (g, path);
   (*env)->ReleaseStringUTFChars (env, jpath, path);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return 0;
-  }
-  return (jint) r;
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1mv
-  (JNIEnv *env, jobject obj, jlong jg, jstring jsrc, jstring jdest)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *src;
-  const char *dest;
-
-  src = (*env)->GetStringUTFChars (env, jsrc, NULL);
-  dest = (*env)->GetStringUTFChars (env, jdest, NULL);
-  r = guestfs_aug_mv (g, src, dest);
-  (*env)->ReleaseStringUTFChars (env, jsrc, src);
-  (*env)->ReleaseStringUTFChars (env, jdest, dest);
-  if (r == -1) {
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
   }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/Stat");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "dev", "J");
+  (*env)->SetLongField (env, jr, fl, r->dev);
+  fl = (*env)->GetFieldID (env, cl, "ino", "J");
+  (*env)->SetLongField (env, jr, fl, r->ino);
+  fl = (*env)->GetFieldID (env, cl, "mode", "J");
+  (*env)->SetLongField (env, jr, fl, r->mode);
+  fl = (*env)->GetFieldID (env, cl, "nlink", "J");
+  (*env)->SetLongField (env, jr, fl, r->nlink);
+  fl = (*env)->GetFieldID (env, cl, "uid", "J");
+  (*env)->SetLongField (env, jr, fl, r->uid);
+  fl = (*env)->GetFieldID (env, cl, "gid", "J");
+  (*env)->SetLongField (env, jr, fl, r->gid);
+  fl = (*env)->GetFieldID (env, cl, "rdev", "J");
+  (*env)->SetLongField (env, jr, fl, r->rdev);
+  fl = (*env)->GetFieldID (env, cl, "size", "J");
+  (*env)->SetLongField (env, jr, fl, r->size);
+  fl = (*env)->GetFieldID (env, cl, "blksize", "J");
+  (*env)->SetLongField (env, jr, fl, r->blksize);
+  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
+  (*env)->SetLongField (env, jr, fl, r->blocks);
+  fl = (*env)->GetFieldID (env, cl, "atime", "J");
+  (*env)->SetLongField (env, jr, fl, r->atime);
+  fl = (*env)->GetFieldID (env, cl, "mtime", "J");
+  (*env)->SetLongField (env, jr, fl, r->mtime);
+  fl = (*env)->GetFieldID (env, cl, "ctime", "J");
+  (*env)->SetLongField (env, jr, fl, r->ctime);
+  free (r);
+  return jr;
 }
 
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1match
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1lstat
   (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
+  jobject jr;
   jclass cl;
-  jstring jstr;
-  char **r;
+  jfieldID fl;
+  struct guestfs_stat *r;
   const char *path;
-  int i;
 
   path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_aug_match (g, path);
+  r = guestfs_lstat (g, path);
   (*env)->ReleaseStringUTFChars (env, jpath, path);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/Stat");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "dev", "J");
+  (*env)->SetLongField (env, jr, fl, r->dev);
+  fl = (*env)->GetFieldID (env, cl, "ino", "J");
+  (*env)->SetLongField (env, jr, fl, r->ino);
+  fl = (*env)->GetFieldID (env, cl, "mode", "J");
+  (*env)->SetLongField (env, jr, fl, r->mode);
+  fl = (*env)->GetFieldID (env, cl, "nlink", "J");
+  (*env)->SetLongField (env, jr, fl, r->nlink);
+  fl = (*env)->GetFieldID (env, cl, "uid", "J");
+  (*env)->SetLongField (env, jr, fl, r->uid);
+  fl = (*env)->GetFieldID (env, cl, "gid", "J");
+  (*env)->SetLongField (env, jr, fl, r->gid);
+  fl = (*env)->GetFieldID (env, cl, "rdev", "J");
+  (*env)->SetLongField (env, jr, fl, r->rdev);
+  fl = (*env)->GetFieldID (env, cl, "size", "J");
+  (*env)->SetLongField (env, jr, fl, r->size);
+  fl = (*env)->GetFieldID (env, cl, "blksize", "J");
+  (*env)->SetLongField (env, jr, fl, r->blksize);
+  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
+  (*env)->SetLongField (env, jr, fl, r->blocks);
+  fl = (*env)->GetFieldID (env, cl, "atime", "J");
+  (*env)->SetLongField (env, jr, fl, r->atime);
+  fl = (*env)->GetFieldID (env, cl, "mtime", "J");
+  (*env)->SetLongField (env, jr, fl, r->mtime);
+  fl = (*env)->GetFieldID (env, cl, "ctime", "J");
+  (*env)->SetLongField (env, jr, fl, r->ctime);
   free (r);
   return jr;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1save
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_aug_save (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1load
-  (JNIEnv *env, jobject obj, jlong jg)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-
-  r = guestfs_aug_load (g);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1aug_1ls
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1statvfs
   (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
+  jobject jr;
   jclass cl;
-  jstring jstr;
-  char **r;
+  jfieldID fl;
+  struct guestfs_statvfs *r;
   const char *path;
-  int i;
 
   path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_aug_ls (g, path);
+  r = guestfs_statvfs (g, path);
   (*env)->ReleaseStringUTFChars (env, jpath, path);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
-  }
+  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/StatVFS");
+  jr = (*env)->AllocObject (env, cl);
+  fl = (*env)->GetFieldID (env, cl, "bsize", "J");
+  (*env)->SetLongField (env, jr, fl, r->bsize);
+  fl = (*env)->GetFieldID (env, cl, "frsize", "J");
+  (*env)->SetLongField (env, jr, fl, r->frsize);
+  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
+  (*env)->SetLongField (env, jr, fl, r->blocks);
+  fl = (*env)->GetFieldID (env, cl, "bfree", "J");
+  (*env)->SetLongField (env, jr, fl, r->bfree);
+  fl = (*env)->GetFieldID (env, cl, "bavail", "J");
+  (*env)->SetLongField (env, jr, fl, r->bavail);
+  fl = (*env)->GetFieldID (env, cl, "files", "J");
+  (*env)->SetLongField (env, jr, fl, r->files);
+  fl = (*env)->GetFieldID (env, cl, "ffree", "J");
+  (*env)->SetLongField (env, jr, fl, r->ffree);
+  fl = (*env)->GetFieldID (env, cl, "favail", "J");
+  (*env)->SetLongField (env, jr, fl, r->favail);
+  fl = (*env)->GetFieldID (env, cl, "fsid", "J");
+  (*env)->SetLongField (env, jr, fl, r->fsid);
+  fl = (*env)->GetFieldID (env, cl, "flag", "J");
+  (*env)->SetLongField (env, jr, fl, r->flag);
+  fl = (*env)->GetFieldID (env, cl, "namemax", "J");
+  (*env)->SetLongField (env, jr, fl, r->namemax);
   free (r);
   return jr;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1rm
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT jobject JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1tune2fs_1l
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *path;
+  char **r;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_rm (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
-  if (r == -1) {
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_tune2fs_l (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
   }
+  throw_exception (env, "tune2fs_l: internal error: please let us know how to make a Java HashMap from JNI bindings!");
+  return NULL;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1rmdir
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setro
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *path;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_rmdir (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_setro (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -1207,152 +2874,150 @@ Java_com_redhat_et_libguestfs_GuestFS__1rmdir
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1rm_1rf
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setrw
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *path;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_rm_rf (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_setrw (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mkdir
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getro
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *path;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_mkdir (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_getro (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jboolean) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mkdir_1p
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getss
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *path;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_mkdir_p (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_getss (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jint) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1chmod
-  (JNIEnv *env, jobject obj, jlong jg, jint jmode, jstring jpath)
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getbsz
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  int mode;
-  const char *path;
+  const char *device;
 
-  mode = jmode;
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_chmod (g, mode, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_getbsz (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jint) r;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1chown
-  (JNIEnv *env, jobject obj, jlong jg, jint jowner, jint jgroup, jstring jpath)
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setbsz
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jint jblocksize)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  int owner;
-  int group;
-  const char *path;
+  const char *device;
+  int blocksize;
 
-  owner = jowner;
-  group = jgroup;
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_chown (g, owner, group, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  blocksize = jblocksize;
+  r = guestfs_blockdev_setbsz (g, device, blocksize);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1exists
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT jlong JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getsz
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *path;
+  int64_t r;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_exists (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_getsz (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return 0;
   }
-  return (jboolean) r;
+  return (jlong) r;
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1is_1file
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT jlong JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getsize64
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *path;
+  int64_t r;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_is_file (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_getsize64 (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return 0;
   }
-  return (jboolean) r;
+  return (jlong) r;
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1is_1dir
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1flushbufs
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *path;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_is_dir (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_blockdev_flushbufs (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return ;
   }
-  return (jboolean) r;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1pvcreate
+Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1rereadpt
   (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
@@ -1360,7 +3025,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1pvcreate
   const char *device;
 
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_pvcreate (g, device);
+  r = guestfs_blockdev_rereadpt (g, device);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
@@ -1369,31 +3034,19 @@ Java_com_redhat_et_libguestfs_GuestFS__1pvcreate
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1vgcreate
-  (JNIEnv *env, jobject obj, jlong jg, jstring jvolgroup, jobjectArray jphysvols)
+Java_com_redhat_et_libguestfs_GuestFS__1upload
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfilename, jstring jremotefilename)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *volgroup;
-  int physvols_len;
-  const char **physvols;
-  int i;
+  const char *filename;
+  const char *remotefilename;
 
-  volgroup = (*env)->GetStringUTFChars (env, jvolgroup, NULL);
-  physvols_len = (*env)->GetArrayLength (env, jphysvols);
-  physvols = guestfs_safe_malloc (g, sizeof (char *) * (physvols_len+1));
-  for (i = 0; i < physvols_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jphysvols, i);
-    physvols[i] = (*env)->GetStringUTFChars (env, o, NULL);
-  }
-  physvols[physvols_len] = NULL;
-  r = guestfs_vgcreate (g, volgroup, physvols);
-  (*env)->ReleaseStringUTFChars (env, jvolgroup, volgroup);
-  for (i = 0; i < physvols_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jphysvols, i);
-    (*env)->ReleaseStringUTFChars (env, o, physvols[i]);
-  }
-  free (physvols);
+  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
+  remotefilename = (*env)->GetStringUTFChars (env, jremotefilename, NULL);
+  r = guestfs_upload (g, filename, remotefilename);
+  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
+  (*env)->ReleaseStringUTFChars (env, jremotefilename, remotefilename);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -1401,41 +3054,63 @@ Java_com_redhat_et_libguestfs_GuestFS__1vgcreate
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1lvcreate
-  (JNIEnv *env, jobject obj, jlong jg, jstring jlogvol, jstring jvolgroup, jint jmbytes)
+Java_com_redhat_et_libguestfs_GuestFS__1download
+  (JNIEnv *env, jobject obj, jlong jg, jstring jremotefilename, jstring jfilename)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *logvol;
-  const char *volgroup;
-  int mbytes;
+  const char *remotefilename;
+  const char *filename;
 
-  logvol = (*env)->GetStringUTFChars (env, jlogvol, NULL);
-  volgroup = (*env)->GetStringUTFChars (env, jvolgroup, NULL);
-  mbytes = jmbytes;
-  r = guestfs_lvcreate (g, logvol, volgroup, mbytes);
-  (*env)->ReleaseStringUTFChars (env, jlogvol, logvol);
-  (*env)->ReleaseStringUTFChars (env, jvolgroup, volgroup);
+  remotefilename = (*env)->GetStringUTFChars (env, jremotefilename, NULL);
+  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
+  r = guestfs_download (g, remotefilename, filename);
+  (*env)->ReleaseStringUTFChars (env, jremotefilename, remotefilename);
+  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1checksum
+  (JNIEnv *env, jobject obj, jlong jg, jstring jcsumtype, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jstring jr;
+  char *r;
+  const char *csumtype;
+  const char *path;
+
+  csumtype = (*env)->GetStringUTFChars (env, jcsumtype, NULL);
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_checksum (g, csumtype, path);
+  (*env)->ReleaseStringUTFChars (env, jcsumtype, csumtype);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
+}
+
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mkfs
-  (JNIEnv *env, jobject obj, jlong jg, jstring jfstype, jstring jdevice)
+Java_com_redhat_et_libguestfs_GuestFS__1tar_1in
+  (JNIEnv *env, jobject obj, jlong jg, jstring jtarfile, jstring jdirectory)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *fstype;
-  const char *device;
+  const char *tarfile;
+  const char *directory;
 
-  fstype = (*env)->GetStringUTFChars (env, jfstype, NULL);
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_mkfs (g, fstype, device);
-  (*env)->ReleaseStringUTFChars (env, jfstype, fstype);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  tarfile = (*env)->GetStringUTFChars (env, jtarfile, NULL);
+  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
+  r = guestfs_tar_in (g, tarfile, directory);
+  (*env)->ReleaseStringUTFChars (env, jtarfile, tarfile);
+  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -1443,37 +3118,19 @@ Java_com_redhat_et_libguestfs_GuestFS__1mkfs
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1sfdisk
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jint jcyls, jint jheads, jint jsectors, jobjectArray jlines)
+Java_com_redhat_et_libguestfs_GuestFS__1tar_1out
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory, jstring jtarfile)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
-  int cyls;
-  int heads;
-  int sectors;
-  int lines_len;
-  const char **lines;
-  int i;
+  const char *directory;
+  const char *tarfile;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  cyls = jcyls;
-  heads = jheads;
-  sectors = jsectors;
-  lines_len = (*env)->GetArrayLength (env, jlines);
-  lines = guestfs_safe_malloc (g, sizeof (char *) * (lines_len+1));
-  for (i = 0; i < lines_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jlines, i);
-    lines[i] = (*env)->GetStringUTFChars (env, o, NULL);
-  }
-  lines[lines_len] = NULL;
-  r = guestfs_sfdisk (g, device, cyls, heads, sectors, lines);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  for (i = 0; i < lines_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jlines, i);
-    (*env)->ReleaseStringUTFChars (env, o, lines[i]);
-  }
-  free (lines);
+  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
+  tarfile = (*env)->GetStringUTFChars (env, jtarfile, NULL);
+  r = guestfs_tar_out (g, directory, tarfile);
+  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  (*env)->ReleaseStringUTFChars (env, jtarfile, tarfile);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -1481,21 +3138,19 @@ Java_com_redhat_et_libguestfs_GuestFS__1sfdisk
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1write_1file
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath, jstring jcontent, jint jsize)
+Java_com_redhat_et_libguestfs_GuestFS__1tgz_1in
+  (JNIEnv *env, jobject obj, jlong jg, jstring jtarball, jstring jdirectory)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *path;
-  const char *content;
-  int size;
+  const char *tarball;
+  const char *directory;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  content = (*env)->GetStringUTFChars (env, jcontent, NULL);
-  size = jsize;
-  r = guestfs_write_file (g, path, content, size);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
-  (*env)->ReleaseStringUTFChars (env, jcontent, content);
+  tarball = (*env)->GetStringUTFChars (env, jtarball, NULL);
+  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
+  r = guestfs_tgz_in (g, tarball, directory);
+  (*env)->ReleaseStringUTFChars (env, jtarball, tarball);
+  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -1503,60 +3158,62 @@ Java_com_redhat_et_libguestfs_GuestFS__1write_1file
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1umount
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpathordevice)
+Java_com_redhat_et_libguestfs_GuestFS__1tgz_1out
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory, jstring jtarball)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *pathordevice;
+  const char *directory;
+  const char *tarball;
 
-  pathordevice = (*env)->GetStringUTFChars (env, jpathordevice, NULL);
-  r = guestfs_umount (g, pathordevice);
-  (*env)->ReleaseStringUTFChars (env, jpathordevice, pathordevice);
+  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
+  tarball = (*env)->GetStringUTFChars (env, jtarball, NULL);
+  r = guestfs_tgz_out (g, directory, tarball);
+  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  (*env)->ReleaseStringUTFChars (env, jtarball, tarball);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mounts
-  (JNIEnv *env, jobject obj, jlong jg)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1mount_1ro
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring jmountpoint)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
-  jclass cl;
-  jstring jstr;
-  char **r;
-  int i;
+  int r;
+  const char *device;
+  const char *mountpoint;
 
-  r = guestfs_mounts (g);
-  if (r == NULL) {
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
+  r = guestfs_mount_ro (g, device, mountpoint);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
+  if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return NULL;
-  }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
+    return ;
   }
-  free (r);
-  return jr;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1umount_1all
-  (JNIEnv *env, jobject obj, jlong jg)
+Java_com_redhat_et_libguestfs_GuestFS__1mount_1options
+  (JNIEnv *env, jobject obj, jlong jg, jstring joptions, jstring jdevice, jstring jmountpoint)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
+  const char *options;
+  const char *device;
+  const char *mountpoint;
 
-  r = guestfs_umount_all (g);
+  options = (*env)->GetStringUTFChars (env, joptions, NULL);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
+  r = guestfs_mount_options (g, options, device, mountpoint);
+  (*env)->ReleaseStringUTFChars (env, joptions, options);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -1564,13 +3221,25 @@ Java_com_redhat_et_libguestfs_GuestFS__1umount_1all
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1lvm_1remove_1all
-  (JNIEnv *env, jobject obj, jlong jg)
+Java_com_redhat_et_libguestfs_GuestFS__1mount_1vfs
+  (JNIEnv *env, jobject obj, jlong jg, jstring joptions, jstring jvfstype, jstring jdevice, jstring jmountpoint)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
+  const char *options;
+  const char *vfstype;
+  const char *device;
+  const char *mountpoint;
 
-  r = guestfs_lvm_remove_all (g);
+  options = (*env)->GetStringUTFChars (env, joptions, NULL);
+  vfstype = (*env)->GetStringUTFChars (env, jvfstype, NULL);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
+  r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
+  (*env)->ReleaseStringUTFChars (env, joptions, options);
+  (*env)->ReleaseStringUTFChars (env, jvfstype, vfstype);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -1578,17 +3247,32 @@ Java_com_redhat_et_libguestfs_GuestFS__1lvm_1remove_1all
 }
 
 JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1file
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+Java_com_redhat_et_libguestfs_GuestFS__1debug
+  (JNIEnv *env, jobject obj, jlong jg, jstring jsubcmd, jobjectArray jextraargs)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   jstring jr;
   char *r;
-  const char *path;
+  const char *subcmd;
+  int extraargs_len;
+  const char **extraargs;
+  int i;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_file (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  subcmd = (*env)->GetStringUTFChars (env, jsubcmd, NULL);
+  extraargs_len = (*env)->GetArrayLength (env, jextraargs);
+  extraargs = guestfs_safe_malloc (g, sizeof (char *) * (extraargs_len+1));
+  for (i = 0; i < extraargs_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jextraargs, i);
+    extraargs[i] = (*env)->GetStringUTFChars (env, o, NULL);
+  }
+  extraargs[extraargs_len] = NULL;
+  r = guestfs_debug (g, subcmd, extraargs);
+  (*env)->ReleaseStringUTFChars (env, jsubcmd, subcmd);
+  for (i = 0; i < extraargs_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jextraargs, i);
+    (*env)->ReleaseStringUTFChars (env, o, extraargs[i]);
+  }
+  free (extraargs);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -1598,250 +3282,162 @@ Java_com_redhat_et_libguestfs_GuestFS__1file
   return jr;
 }
 
-JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1command
-  (JNIEnv *env, jobject obj, jlong jg, jobjectArray jarguments)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1lvremove
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jstring jr;
-  char *r;
-  int arguments_len;
-  const char **arguments;
-  int i;
+  int r;
+  const char *device;
 
-  arguments_len = (*env)->GetArrayLength (env, jarguments);
-  arguments = guestfs_safe_malloc (g, sizeof (char *) * (arguments_len+1));
-  for (i = 0; i < arguments_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
-    arguments[i] = (*env)->GetStringUTFChars (env, o, NULL);
-  }
-  arguments[arguments_len] = NULL;
-  r = guestfs_command (g, arguments);
-  for (i = 0; i < arguments_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
-    (*env)->ReleaseStringUTFChars (env, o, arguments[i]);
-  }
-  free (arguments);
-  if (r == NULL) {
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_lvremove (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return NULL;
+    return ;
   }
-  jr = (*env)->NewStringUTF (env, r);
-  free (r);
-  return jr;
 }
 
-JNIEXPORT jobjectArray JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1command_1lines
-  (JNIEnv *env, jobject obj, jlong jg, jobjectArray jarguments)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1vgremove
+  (JNIEnv *env, jobject obj, jlong jg, jstring jvgname)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jobjectArray jr;
-  int r_len;
-  jclass cl;
-  jstring jstr;
-  char **r;
-  int arguments_len;
-  const char **arguments;
-  int i;
+  int r;
+  const char *vgname;
 
-  arguments_len = (*env)->GetArrayLength (env, jarguments);
-  arguments = guestfs_safe_malloc (g, sizeof (char *) * (arguments_len+1));
-  for (i = 0; i < arguments_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
-    arguments[i] = (*env)->GetStringUTFChars (env, o, NULL);
-  }
-  arguments[arguments_len] = NULL;
-  r = guestfs_command_lines (g, arguments);
-  for (i = 0; i < arguments_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jarguments, i);
-    (*env)->ReleaseStringUTFChars (env, o, arguments[i]);
-  }
-  free (arguments);
-  if (r == NULL) {
+  vgname = (*env)->GetStringUTFChars (env, jvgname, NULL);
+  r = guestfs_vgremove (g, vgname);
+  (*env)->ReleaseStringUTFChars (env, jvgname, vgname);
+  if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return NULL;
+    return ;
   }
-  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
-  cl = (*env)->FindClass (env, "java/lang/String");
-  jstr = (*env)->NewStringUTF (env, "");
-  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
-  for (i = 0; i < r_len; ++i) {
-    jstr = (*env)->NewStringUTF (env, r[i]);
-    (*env)->SetObjectArrayElement (env, jr, i, jstr);
-    free (r[i]);
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1pvremove
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *device;
+
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_pvremove (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
   }
-  free (r);
-  return jr;
 }
 
-JNIEXPORT jobject JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1stat
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1e2label
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring jlabel)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jobject jr;
-  jclass cl;
-  jfieldID fl;
-  struct guestfs_stat *r;
-  const char *path;
+  int r;
+  const char *device;
+  const char *label;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_stat (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
-  if (r == NULL) {
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  label = (*env)->GetStringUTFChars (env, jlabel, NULL);
+  r = guestfs_set_e2label (g, device, label);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  (*env)->ReleaseStringUTFChars (env, jlabel, label);
+  if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return NULL;
+    return ;
   }
-  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/Stat");
-  jr = (*env)->AllocObject (env, cl);
-  fl = (*env)->GetFieldID (env, cl, "dev", "J");
-  (*env)->SetLongField (env, jr, fl, r->dev);
-  fl = (*env)->GetFieldID (env, cl, "ino", "J");
-  (*env)->SetLongField (env, jr, fl, r->ino);
-  fl = (*env)->GetFieldID (env, cl, "mode", "J");
-  (*env)->SetLongField (env, jr, fl, r->mode);
-  fl = (*env)->GetFieldID (env, cl, "nlink", "J");
-  (*env)->SetLongField (env, jr, fl, r->nlink);
-  fl = (*env)->GetFieldID (env, cl, "uid", "J");
-  (*env)->SetLongField (env, jr, fl, r->uid);
-  fl = (*env)->GetFieldID (env, cl, "gid", "J");
-  (*env)->SetLongField (env, jr, fl, r->gid);
-  fl = (*env)->GetFieldID (env, cl, "rdev", "J");
-  (*env)->SetLongField (env, jr, fl, r->rdev);
-  fl = (*env)->GetFieldID (env, cl, "size", "J");
-  (*env)->SetLongField (env, jr, fl, r->size);
-  fl = (*env)->GetFieldID (env, cl, "blksize", "J");
-  (*env)->SetLongField (env, jr, fl, r->blksize);
-  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
-  (*env)->SetLongField (env, jr, fl, r->blocks);
-  fl = (*env)->GetFieldID (env, cl, "atime", "J");
-  (*env)->SetLongField (env, jr, fl, r->atime);
-  fl = (*env)->GetFieldID (env, cl, "mtime", "J");
-  (*env)->SetLongField (env, jr, fl, r->mtime);
-  fl = (*env)->GetFieldID (env, cl, "ctime", "J");
-  (*env)->SetLongField (env, jr, fl, r->ctime);
-  free (r);
-  return jr;
 }
 
-JNIEXPORT jobject JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1lstat
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1e2label
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jobject jr;
-  jclass cl;
-  jfieldID fl;
-  struct guestfs_stat *r;
-  const char *path;
+  jstring jr;
+  char *r;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_lstat (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_get_e2label (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/Stat");
-  jr = (*env)->AllocObject (env, cl);
-  fl = (*env)->GetFieldID (env, cl, "dev", "J");
-  (*env)->SetLongField (env, jr, fl, r->dev);
-  fl = (*env)->GetFieldID (env, cl, "ino", "J");
-  (*env)->SetLongField (env, jr, fl, r->ino);
-  fl = (*env)->GetFieldID (env, cl, "mode", "J");
-  (*env)->SetLongField (env, jr, fl, r->mode);
-  fl = (*env)->GetFieldID (env, cl, "nlink", "J");
-  (*env)->SetLongField (env, jr, fl, r->nlink);
-  fl = (*env)->GetFieldID (env, cl, "uid", "J");
-  (*env)->SetLongField (env, jr, fl, r->uid);
-  fl = (*env)->GetFieldID (env, cl, "gid", "J");
-  (*env)->SetLongField (env, jr, fl, r->gid);
-  fl = (*env)->GetFieldID (env, cl, "rdev", "J");
-  (*env)->SetLongField (env, jr, fl, r->rdev);
-  fl = (*env)->GetFieldID (env, cl, "size", "J");
-  (*env)->SetLongField (env, jr, fl, r->size);
-  fl = (*env)->GetFieldID (env, cl, "blksize", "J");
-  (*env)->SetLongField (env, jr, fl, r->blksize);
-  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
-  (*env)->SetLongField (env, jr, fl, r->blocks);
-  fl = (*env)->GetFieldID (env, cl, "atime", "J");
-  (*env)->SetLongField (env, jr, fl, r->atime);
-  fl = (*env)->GetFieldID (env, cl, "mtime", "J");
-  (*env)->SetLongField (env, jr, fl, r->mtime);
-  fl = (*env)->GetFieldID (env, cl, "ctime", "J");
-  (*env)->SetLongField (env, jr, fl, r->ctime);
+  jr = (*env)->NewStringUTF (env, r);
   free (r);
   return jr;
 }
 
-JNIEXPORT jobject JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1statvfs
-  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1set_1e2uuid
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring juuid)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *device;
+  const char *uuid;
+
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  uuid = (*env)->GetStringUTFChars (env, juuid, NULL);
+  r = guestfs_set_e2uuid (g, device, uuid);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  (*env)->ReleaseStringUTFChars (env, juuid, uuid);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1get_1e2uuid
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jobject jr;
-  jclass cl;
-  jfieldID fl;
-  struct guestfs_statvfs *r;
-  const char *path;
+  jstring jr;
+  char *r;
+  const char *device;
 
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_statvfs (g, path);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_get_e2uuid (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  cl = (*env)->FindClass (env, "com/redhat/et/libguestfs/StatVFS");
-  jr = (*env)->AllocObject (env, cl);
-  fl = (*env)->GetFieldID (env, cl, "bsize", "J");
-  (*env)->SetLongField (env, jr, fl, r->bsize);
-  fl = (*env)->GetFieldID (env, cl, "frsize", "J");
-  (*env)->SetLongField (env, jr, fl, r->frsize);
-  fl = (*env)->GetFieldID (env, cl, "blocks", "J");
-  (*env)->SetLongField (env, jr, fl, r->blocks);
-  fl = (*env)->GetFieldID (env, cl, "bfree", "J");
-  (*env)->SetLongField (env, jr, fl, r->bfree);
-  fl = (*env)->GetFieldID (env, cl, "bavail", "J");
-  (*env)->SetLongField (env, jr, fl, r->bavail);
-  fl = (*env)->GetFieldID (env, cl, "files", "J");
-  (*env)->SetLongField (env, jr, fl, r->files);
-  fl = (*env)->GetFieldID (env, cl, "ffree", "J");
-  (*env)->SetLongField (env, jr, fl, r->ffree);
-  fl = (*env)->GetFieldID (env, cl, "favail", "J");
-  (*env)->SetLongField (env, jr, fl, r->favail);
-  fl = (*env)->GetFieldID (env, cl, "fsid", "J");
-  (*env)->SetLongField (env, jr, fl, r->fsid);
-  fl = (*env)->GetFieldID (env, cl, "flag", "J");
-  (*env)->SetLongField (env, jr, fl, r->flag);
-  fl = (*env)->GetFieldID (env, cl, "namemax", "J");
-  (*env)->SetLongField (env, jr, fl, r->namemax);
+  jr = (*env)->NewStringUTF (env, r);
   free (r);
   return jr;
 }
 
-JNIEXPORT jobject JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1tune2fs_1l
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1fsck
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfstype, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  char **r;
+  int r;
+  const char *fstype;
   const char *device;
 
+  fstype = (*env)->GetStringUTFChars (env, jfstype, NULL);
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_tune2fs_l (g, device);
+  r = guestfs_fsck (g, fstype, device);
+  (*env)->ReleaseStringUTFChars (env, jfstype, fstype);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  if (r == NULL) {
+  if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return NULL;
+    return 0;
   }
-  throw_exception (env, "tune2fs_l: internal error: please let us know how to make a Java HashMap from JNI bindings!");
-  return NULL;
+  return (jint) r;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setro
+Java_com_redhat_et_libguestfs_GuestFS__1zero
   (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
@@ -1849,7 +3445,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setro
   const char *device;
 
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_setro (g, device);
+  r = guestfs_zero (g, device);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
@@ -1858,15 +3454,18 @@ Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setro
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setrw
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+Java_com_redhat_et_libguestfs_GuestFS__1grub_1install
+  (JNIEnv *env, jobject obj, jlong jg, jstring jroot, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
+  const char *root;
   const char *device;
 
+  root = (*env)->GetStringUTFChars (env, jroot, NULL);
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_setrw (g, device);
+  r = guestfs_grub_install (g, root, device);
+  (*env)->ReleaseStringUTFChars (env, jroot, root);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
@@ -1874,117 +3473,244 @@ Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setrw
   }
 }
 
-JNIEXPORT jboolean JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getro
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1cp
+  (JNIEnv *env, jobject obj, jlong jg, jstring jsrc, jstring jdest)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
+  const char *src;
+  const char *dest;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_getro (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  src = (*env)->GetStringUTFChars (env, jsrc, NULL);
+  dest = (*env)->GetStringUTFChars (env, jdest, NULL);
+  r = guestfs_cp (g, src, dest);
+  (*env)->ReleaseStringUTFChars (env, jsrc, src);
+  (*env)->ReleaseStringUTFChars (env, jdest, dest);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return ;
   }
-  return (jboolean) r;
 }
 
-JNIEXPORT jint JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getss
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1cp_1a
+  (JNIEnv *env, jobject obj, jlong jg, jstring jsrc, jstring jdest)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
+  const char *src;
+  const char *dest;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_getss (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  src = (*env)->GetStringUTFChars (env, jsrc, NULL);
+  dest = (*env)->GetStringUTFChars (env, jdest, NULL);
+  r = guestfs_cp_a (g, src, dest);
+  (*env)->ReleaseStringUTFChars (env, jsrc, src);
+  (*env)->ReleaseStringUTFChars (env, jdest, dest);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return ;
   }
-  return (jint) r;
 }
 
-JNIEXPORT jint JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getbsz
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1mv
+  (JNIEnv *env, jobject obj, jlong jg, jstring jsrc, jstring jdest)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
+  const char *src;
+  const char *dest;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_getbsz (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  src = (*env)->GetStringUTFChars (env, jsrc, NULL);
+  dest = (*env)->GetStringUTFChars (env, jdest, NULL);
+  r = guestfs_mv (g, src, dest);
+  (*env)->ReleaseStringUTFChars (env, jsrc, src);
+  (*env)->ReleaseStringUTFChars (env, jdest, dest);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return ;
   }
-  return (jint) r;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1setbsz
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jint jblocksize)
+Java_com_redhat_et_libguestfs_GuestFS__1drop_1caches
+  (JNIEnv *env, jobject obj, jlong jg, jint jwhattodrop)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
-  int blocksize;
+  int whattodrop;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  blocksize = jblocksize;
-  r = guestfs_blockdev_setbsz (g, device, blocksize);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  whattodrop = jwhattodrop;
+  r = guestfs_drop_caches (g, whattodrop);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT jlong JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getsz
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1dmesg
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jstring jr;
+  char *r;
+
+  r = guestfs_dmesg (g);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1ping_1daemon
+  (JNIEnv *env, jobject obj, jlong jg)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+
+  r = guestfs_ping_daemon (g);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1equal
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfile1, jstring jfile2)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  int r;
+  const char *file1;
+  const char *file2;
+
+  file1 = (*env)->GetStringUTFChars (env, jfile1, NULL);
+  file2 = (*env)->GetStringUTFChars (env, jfile2, NULL);
+  r = guestfs_equal (g, file1, file2);
+  (*env)->ReleaseStringUTFChars (env, jfile1, file1);
+  (*env)->ReleaseStringUTFChars (env, jfile2, file2);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return 0;
+  }
+  return (jboolean) r;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1strings
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *path;
+  int i;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_strings (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1strings_1e
+  (JNIEnv *env, jobject obj, jlong jg, jstring jencoding, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *encoding;
+  const char *path;
+  int i;
+
+  encoding = (*env)->GetStringUTFChars (env, jencoding, NULL);
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_strings_e (g, encoding, path);
+  (*env)->ReleaseStringUTFChars (env, jencoding, encoding);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1hexdump
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int64_t r;
-  const char *device;
+  jstring jr;
+  char *r;
+  const char *path;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_getsz (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  if (r == -1) {
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_hexdump (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return NULL;
   }
-  return (jlong) r;
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
 }
 
-JNIEXPORT jlong JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1getsize64
+JNIEXPORT void JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1zerofree
   (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int64_t r;
+  int r;
   const char *device;
 
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_getsize64 (g, device);
+  r = guestfs_zerofree (g, device);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return 0;
+    return ;
   }
-  return (jlong) r;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1flushbufs
+Java_com_redhat_et_libguestfs_GuestFS__1pvresize
   (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
@@ -1992,7 +3718,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1flushbufs
   const char *device;
 
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_flushbufs (g, device);
+  r = guestfs_pvresize (g, device);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
@@ -2001,77 +3727,87 @@ Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1flushbufs
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1blockdev_1rereadpt
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+Java_com_redhat_et_libguestfs_GuestFS__1sfdisk_1N
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jint jpartnum, jint jcyls, jint jheads, jint jsectors, jstring jline)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
   const char *device;
+  int partnum;
+  int cyls;
+  int heads;
+  int sectors;
+  const char *line;
 
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_blockdev_rereadpt (g, device);
+  partnum = jpartnum;
+  cyls = jcyls;
+  heads = jheads;
+  sectors = jsectors;
+  line = (*env)->GetStringUTFChars (env, jline, NULL);
+  r = guestfs_sfdisk_N (g, device, partnum, cyls, heads, sectors, line);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  (*env)->ReleaseStringUTFChars (env, jline, line);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1upload
-  (JNIEnv *env, jobject obj, jlong jg, jstring jfilename, jstring jremotefilename)
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1sfdisk_1l
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *filename;
-  const char *remotefilename;
+  jstring jr;
+  char *r;
+  const char *device;
 
-  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
-  remotefilename = (*env)->GetStringUTFChars (env, jremotefilename, NULL);
-  r = guestfs_upload (g, filename, remotefilename);
-  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
-  (*env)->ReleaseStringUTFChars (env, jremotefilename, remotefilename);
-  if (r == -1) {
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_sfdisk_l (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
   }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1download
-  (JNIEnv *env, jobject obj, jlong jg, jstring jremotefilename, jstring jfilename)
+JNIEXPORT jstring JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1sfdisk_1kernel_1geometry
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *remotefilename;
-  const char *filename;
+  jstring jr;
+  char *r;
+  const char *device;
 
-  remotefilename = (*env)->GetStringUTFChars (env, jremotefilename, NULL);
-  filename = (*env)->GetStringUTFChars (env, jfilename, NULL);
-  r = guestfs_download (g, remotefilename, filename);
-  (*env)->ReleaseStringUTFChars (env, jremotefilename, remotefilename);
-  (*env)->ReleaseStringUTFChars (env, jfilename, filename);
-  if (r == -1) {
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_sfdisk_kernel_geometry (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
   }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
 }
 
 JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1checksum
-  (JNIEnv *env, jobject obj, jlong jg, jstring jcsumtype, jstring jpath)
+Java_com_redhat_et_libguestfs_GuestFS__1sfdisk_1disk_1geometry
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   jstring jr;
   char *r;
-  const char *csumtype;
-  const char *path;
+  const char *device;
 
-  csumtype = (*env)->GetStringUTFChars (env, jcsumtype, NULL);
-  path = (*env)->GetStringUTFChars (env, jpath, NULL);
-  r = guestfs_checksum (g, csumtype, path);
-  (*env)->ReleaseStringUTFChars (env, jcsumtype, csumtype);
-  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_sfdisk_disk_geometry (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -2082,19 +3818,15 @@ Java_com_redhat_et_libguestfs_GuestFS__1checksum
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1tar_1in
-  (JNIEnv *env, jobject obj, jlong jg, jstring jtarfile, jstring jdirectory)
+Java_com_redhat_et_libguestfs_GuestFS__1vg_1activate_1all
+  (JNIEnv *env, jobject obj, jlong jg, jboolean jactivate)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *tarfile;
-  const char *directory;
+  int activate;
 
-  tarfile = (*env)->GetStringUTFChars (env, jtarfile, NULL);
-  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
-  r = guestfs_tar_in (g, tarfile, directory);
-  (*env)->ReleaseStringUTFChars (env, jtarfile, tarfile);
-  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  activate = jactivate;
+  r = guestfs_vg_activate_all (g, activate);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -2102,19 +3834,30 @@ Java_com_redhat_et_libguestfs_GuestFS__1tar_1in
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1tar_1out
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory, jstring jtarfile)
+Java_com_redhat_et_libguestfs_GuestFS__1vg_1activate
+  (JNIEnv *env, jobject obj, jlong jg, jboolean jactivate, jobjectArray jvolgroups)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *directory;
-  const char *tarfile;
+  int activate;
+  int volgroups_len;
+  const char **volgroups;
+  int i;
 
-  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
-  tarfile = (*env)->GetStringUTFChars (env, jtarfile, NULL);
-  r = guestfs_tar_out (g, directory, tarfile);
-  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
-  (*env)->ReleaseStringUTFChars (env, jtarfile, tarfile);
+  activate = jactivate;
+  volgroups_len = (*env)->GetArrayLength (env, jvolgroups);
+  volgroups = guestfs_safe_malloc (g, sizeof (char *) * (volgroups_len+1));
+  for (i = 0; i < volgroups_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jvolgroups, i);
+    volgroups[i] = (*env)->GetStringUTFChars (env, o, NULL);
+  }
+  volgroups[volgroups_len] = NULL;
+  r = guestfs_vg_activate (g, activate, volgroups);
+  for (i = 0; i < volgroups_len; ++i) {
+    jobject o = (*env)->GetObjectArrayElement (env, jvolgroups, i);
+    (*env)->ReleaseStringUTFChars (env, o, volgroups[i]);
+  }
+  free (volgroups);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -2122,19 +3865,18 @@ Java_com_redhat_et_libguestfs_GuestFS__1tar_1out
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1tgz_1in
-  (JNIEnv *env, jobject obj, jlong jg, jstring jtarball, jstring jdirectory)
+Java_com_redhat_et_libguestfs_GuestFS__1lvresize
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jint jmbytes)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *tarball;
-  const char *directory;
+  const char *device;
+  int mbytes;
 
-  tarball = (*env)->GetStringUTFChars (env, jtarball, NULL);
-  directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
-  r = guestfs_tgz_in (g, tarball, directory);
-  (*env)->ReleaseStringUTFChars (env, jtarball, tarball);
-  (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  mbytes = jmbytes;
+  r = guestfs_lvresize (g, device, mbytes);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -2142,39 +3884,66 @@ Java_com_redhat_et_libguestfs_GuestFS__1tgz_1in
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1tgz_1out
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory, jstring jtarball)
+Java_com_redhat_et_libguestfs_GuestFS__1resize2fs
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
+  const char *device;
+
+  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
+  r = guestfs_resize2fs (g, device);
+  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  if (r == -1) {
+    throw_exception (env, guestfs_last_error (g));
+    return ;
+  }
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1find
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdirectory)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
   const char *directory;
-  const char *tarball;
+  int i;
 
   directory = (*env)->GetStringUTFChars (env, jdirectory, NULL);
-  tarball = (*env)->GetStringUTFChars (env, jtarball, NULL);
-  r = guestfs_tgz_out (g, directory, tarball);
+  r = guestfs_find (g, directory);
   (*env)->ReleaseStringUTFChars (env, jdirectory, directory);
-  (*env)->ReleaseStringUTFChars (env, jtarball, tarball);
-  if (r == -1) {
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
   }
+  free (r);
+  return jr;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mount_1ro
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring jmountpoint)
+Java_com_redhat_et_libguestfs_GuestFS__1e2fsck_1f
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
   const char *device;
-  const char *mountpoint;
 
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
-  r = guestfs_mount_ro (g, device, mountpoint);
+  r = guestfs_e2fsck_f (g, device);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -2182,92 +3951,130 @@ Java_com_redhat_et_libguestfs_GuestFS__1mount_1ro
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mount_1options
-  (JNIEnv *env, jobject obj, jlong jg, jstring joptions, jstring jdevice, jstring jmountpoint)
+Java_com_redhat_et_libguestfs_GuestFS__1sleep
+  (JNIEnv *env, jobject obj, jlong jg, jint jsecs)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *options;
-  const char *device;
-  const char *mountpoint;
+  int secs;
 
-  options = (*env)->GetStringUTFChars (env, joptions, NULL);
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
-  r = guestfs_mount_options (g, options, device, mountpoint);
-  (*env)->ReleaseStringUTFChars (env, joptions, options);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
+  secs = jsecs;
+  r = guestfs_sleep (g, secs);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
   }
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1mount_1vfs
-  (JNIEnv *env, jobject obj, jlong jg, jstring joptions, jstring jvfstype, jstring jdevice, jstring jmountpoint)
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1ntfs_13g_1probe
+  (JNIEnv *env, jobject obj, jlong jg, jboolean jrw, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *options;
-  const char *vfstype;
+  int rw;
   const char *device;
-  const char *mountpoint;
 
-  options = (*env)->GetStringUTFChars (env, joptions, NULL);
-  vfstype = (*env)->GetStringUTFChars (env, jvfstype, NULL);
+  rw = jrw;
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  mountpoint = (*env)->GetStringUTFChars (env, jmountpoint, NULL);
-  r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint);
-  (*env)->ReleaseStringUTFChars (env, joptions, options);
-  (*env)->ReleaseStringUTFChars (env, jvfstype, vfstype);
+  r = guestfs_ntfs_3g_probe (g, rw, device);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  (*env)->ReleaseStringUTFChars (env, jmountpoint, mountpoint);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jint) r;
 }
 
 JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1debug
-  (JNIEnv *env, jobject obj, jlong jg, jstring jsubcmd, jobjectArray jextraargs)
+Java_com_redhat_et_libguestfs_GuestFS__1sh
+  (JNIEnv *env, jobject obj, jlong jg, jstring jcommand)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jstring jr;
+  char *r;
+  const char *command;
+
+  command = (*env)->GetStringUTFChars (env, jcommand, NULL);
+  r = guestfs_sh (g, command);
+  (*env)->ReleaseStringUTFChars (env, jcommand, command);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  jr = (*env)->NewStringUTF (env, r);
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1sh_1lines
+  (JNIEnv *env, jobject obj, jlong jg, jstring jcommand)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *command;
+  int i;
+
+  command = (*env)->GetStringUTFChars (env, jcommand, NULL);
+  r = guestfs_sh_lines (g, command);
+  (*env)->ReleaseStringUTFChars (env, jcommand, command);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1glob_1expand
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpattern)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jstring jr;
-  char *r;
-  const char *subcmd;
-  int extraargs_len;
-  const char **extraargs;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *pattern;
   int i;
 
-  subcmd = (*env)->GetStringUTFChars (env, jsubcmd, NULL);
-  extraargs_len = (*env)->GetArrayLength (env, jextraargs);
-  extraargs = guestfs_safe_malloc (g, sizeof (char *) * (extraargs_len+1));
-  for (i = 0; i < extraargs_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jextraargs, i);
-    extraargs[i] = (*env)->GetStringUTFChars (env, o, NULL);
-  }
-  extraargs[extraargs_len] = NULL;
-  r = guestfs_debug (g, subcmd, extraargs);
-  (*env)->ReleaseStringUTFChars (env, jsubcmd, subcmd);
-  for (i = 0; i < extraargs_len; ++i) {
-    jobject o = (*env)->GetObjectArrayElement (env, jextraargs, i);
-    (*env)->ReleaseStringUTFChars (env, o, extraargs[i]);
-  }
-  free (extraargs);
+  pattern = (*env)->GetStringUTFChars (env, jpattern, NULL);
+  r = guestfs_glob_expand (g, pattern);
+  (*env)->ReleaseStringUTFChars (env, jpattern, pattern);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
   }
-  jr = (*env)->NewStringUTF (env, r);
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
   free (r);
   return jr;
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1lvremove
+Java_com_redhat_et_libguestfs_GuestFS__1scrub_1device
   (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
@@ -2275,7 +4082,7 @@ Java_com_redhat_et_libguestfs_GuestFS__1lvremove
   const char *device;
 
   device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_lvremove (g, device);
+  r = guestfs_scrub_device (g, device);
   (*env)->ReleaseStringUTFChars (env, jdevice, device);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
@@ -2284,33 +4091,16 @@ Java_com_redhat_et_libguestfs_GuestFS__1lvremove
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1vgremove
-  (JNIEnv *env, jobject obj, jlong jg, jstring jvgname)
-{
-  guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *vgname;
-
-  vgname = (*env)->GetStringUTFChars (env, jvgname, NULL);
-  r = guestfs_vgremove (g, vgname);
-  (*env)->ReleaseStringUTFChars (env, jvgname, vgname);
-  if (r == -1) {
-    throw_exception (env, guestfs_last_error (g));
-    return ;
-  }
-}
-
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1pvremove
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+Java_com_redhat_et_libguestfs_GuestFS__1scrub_1file
+  (JNIEnv *env, jobject obj, jlong jg, jstring jfile)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
+  const char *file;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_pvremove (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  file = (*env)->GetStringUTFChars (env, jfile, NULL);
+  r = guestfs_scrub_file (g, file);
+  (*env)->ReleaseStringUTFChars (env, jfile, file);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -2318,19 +4108,16 @@ Java_com_redhat_et_libguestfs_GuestFS__1pvremove
 }
 
 JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1e2label
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring jlabel)
+Java_com_redhat_et_libguestfs_GuestFS__1scrub_1freespace
+  (JNIEnv *env, jobject obj, jlong jg, jstring jdir)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
-  const char *label;
+  const char *dir;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  label = (*env)->GetStringUTFChars (env, jlabel, NULL);
-  r = guestfs_set_e2label (g, device, label);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  (*env)->ReleaseStringUTFChars (env, jlabel, label);
+  dir = (*env)->GetStringUTFChars (env, jdir, NULL);
+  r = guestfs_scrub_freespace (g, dir);
+  (*env)->ReleaseStringUTFChars (env, jdir, dir);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return ;
@@ -2338,17 +4125,17 @@ Java_com_redhat_et_libguestfs_GuestFS__1set_1e2label
 }
 
 JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1get_1e2label
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+Java_com_redhat_et_libguestfs_GuestFS__1mkdtemp
+  (JNIEnv *env, jobject obj, jlong jg, jstring jtemplate)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   jstring jr;
   char *r;
-  const char *device;
+  const char *template;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_get_e2label (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  template = (*env)->GetStringUTFChars (env, jtemplate, NULL);
+  r = guestfs_mkdtemp (g, template);
+  (*env)->ReleaseStringUTFChars (env, jtemplate, template);
   if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
     return NULL;
@@ -2358,61 +4145,53 @@ Java_com_redhat_et_libguestfs_GuestFS__1get_1e2label
   return jr;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1set_1e2uuid
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice, jstring juuid)
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1wc_1l
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *device;
-  const char *uuid;
+  const char *path;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  uuid = (*env)->GetStringUTFChars (env, juuid, NULL);
-  r = guestfs_set_e2uuid (g, device, uuid);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  (*env)->ReleaseStringUTFChars (env, juuid, uuid);
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_wc_l (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return 0;
   }
+  return (jint) r;
 }
 
-JNIEXPORT jstring JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1get_1e2uuid
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+JNIEXPORT jint JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1wc_1w
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  jstring jr;
-  char *r;
-  const char *device;
+  int r;
+  const char *path;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_get_e2uuid (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  if (r == NULL) {
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_wc_w (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
-    return NULL;
+    return 0;
   }
-  jr = (*env)->NewStringUTF (env, r);
-  free (r);
-  return jr;
+  return (jint) r;
 }
 
 JNIEXPORT jint JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1fsck
-  (JNIEnv *env, jobject obj, jlong jg, jstring jfstype, jstring jdevice)
+Java_com_redhat_et_libguestfs_GuestFS__1wc_1c
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
   int r;
-  const char *fstype;
-  const char *device;
+  const char *path;
 
-  fstype = (*env)->GetStringUTFChars (env, jfstype, NULL);
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_fsck (g, fstype, device);
-  (*env)->ReleaseStringUTFChars (env, jfstype, fstype);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_wc_c (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
   if (r == -1) {
     throw_exception (env, guestfs_last_error (g));
     return 0;
@@ -2420,20 +4199,139 @@ Java_com_redhat_et_libguestfs_GuestFS__1fsck
   return (jint) r;
 }
 
-JNIEXPORT void JNICALL
-Java_com_redhat_et_libguestfs_GuestFS__1zero
-  (JNIEnv *env, jobject obj, jlong jg, jstring jdevice)
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1head
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
 {
   guestfs_h *g = (guestfs_h *) (long) jg;
-  int r;
-  const char *device;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *path;
+  int i;
 
-  device = (*env)->GetStringUTFChars (env, jdevice, NULL);
-  r = guestfs_zero (g, device);
-  (*env)->ReleaseStringUTFChars (env, jdevice, device);
-  if (r == -1) {
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_head (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
     throw_exception (env, guestfs_last_error (g));
-    return ;
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1head_1n
+  (JNIEnv *env, jobject obj, jlong jg, jint jnrlines, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int nrlines;
+  const char *path;
+  int i;
+
+  nrlines = jnrlines;
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_head_n (g, nrlines, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1tail
+  (JNIEnv *env, jobject obj, jlong jg, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  const char *path;
+  int i;
+
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_tail (g, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
   }
+  free (r);
+  return jr;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_com_redhat_et_libguestfs_GuestFS__1tail_1n
+  (JNIEnv *env, jobject obj, jlong jg, jint jnrlines, jstring jpath)
+{
+  guestfs_h *g = (guestfs_h *) (long) jg;
+  jobjectArray jr;
+  int r_len;
+  jclass cl;
+  jstring jstr;
+  char **r;
+  int nrlines;
+  const char *path;
+  int i;
+
+  nrlines = jnrlines;
+  path = (*env)->GetStringUTFChars (env, jpath, NULL);
+  r = guestfs_tail_n (g, nrlines, path);
+  (*env)->ReleaseStringUTFChars (env, jpath, path);
+  if (r == NULL) {
+    throw_exception (env, guestfs_last_error (g));
+    return NULL;
+  }
+  for (r_len = 0; r[r_len] != NULL; ++r_len) ;
+  cl = (*env)->FindClass (env, "java/lang/String");
+  jstr = (*env)->NewStringUTF (env, "");
+  jr = (*env)->NewObjectArray (env, r_len, cl, jstr);
+  for (i = 0; i < r_len; ++i) {
+    jstr = (*env)->NewStringUTF (env, r[i]);
+    (*env)->SetObjectArrayElement (env, jr, i, jstr);
+    free (r[i]);
+  }
+  free (r);
+  return jr;
 }