socsvn commit: r324565 - soc2017/kneitinger/libbe-head/lib/libbe

kneitinger at FreeBSD.org kneitinger at FreeBSD.org
Thu Jul 13 11:39:42 UTC 2017


Author: kneitinger
Date: Thu Jul 13 11:39:37 2017
New Revision: 324565
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=324565

Log:
  libbe(3): add rename function
  

Modified:
  soc2017/kneitinger/libbe-head/lib/libbe/be.c
  soc2017/kneitinger/libbe-head/lib/libbe/be.h
  soc2017/kneitinger/libbe-head/lib/libbe/be_access.c
  soc2017/kneitinger/libbe-head/lib/libbe/be_error.c
  soc2017/kneitinger/libbe-head/lib/libbe/be_impl.h
  soc2017/kneitinger/libbe-head/lib/libbe/be_info.c

Modified: soc2017/kneitinger/libbe-head/lib/libbe/be.c
==============================================================================
--- soc2017/kneitinger/libbe-head/lib/libbe/be.c	Thu Jul 13 09:27:11 2017	(r324564)
+++ soc2017/kneitinger/libbe-head/lib/libbe/be.c	Thu Jul 13 11:39:37 2017	(r324565)
@@ -352,9 +352,73 @@
 		// TODO: beadm allows commas...they seem like a bad idea though
 		if (isalnum(c) || (c == '-') || (c == '_') || (c == '.') ||
 		    (c == ',')) {
-			return (i);
+			continue;
 		}
+		return (name[i]);
 	}
 
 	return (BE_ERR_SUCCESS);
 }
+
+
+/*
+ * usage
+ */
+int
+be_rename(libbe_handle_t *lbh, char *old, char *new)
+{
+	char full_old[MAXPATHLEN];
+	char full_new[MAXPATHLEN];
+	zfs_handle_t *zfs_hdl;
+	int err;
+
+
+	if (err = be_root_concat(lbh, old, full_old)) {
+		return (set_error(lbh, err));
+	}
+	if (err = be_root_concat(lbh, new, full_new)) {
+		return (set_error(lbh, err));
+	}
+
+	if (be_validate_name(lbh, new)) {
+		return (BE_ERR_UNKNOWN);
+		// TODO set and return correct error
+	}
+
+	// check if old is active be
+	if (strcmp(full_new, be_active_path(lbh)) == 0) {
+		return (BE_ERR_UNKNOWN);
+		// TODO set and return correct error
+	}
+
+	if (!zfs_dataset_exists(lbh->lzh, full_old, ZFS_TYPE_DATASET)) {
+		return (BE_ERR_UNKNOWN);
+		// TODO set and return correct error
+	}
+
+	if (zfs_dataset_exists(lbh->lzh, full_new, ZFS_TYPE_DATASET)) {
+		return (BE_ERR_UNKNOWN);
+		// TODO set and return correct error
+	}
+
+	// TODO: what about mounted bes?
+	//              - if mounted error out unless a force flag is set?
+
+
+	if ((zfs_hdl = zfs_open(lbh->lzh, full_old,
+	    ZFS_TYPE_FILESYSTEM)) == NULL) {
+		return (BE_ERR_UNKNOWN);
+		// TODO set and return correct error
+	}
+
+
+	// recurse, nounmount, forceunmount
+	struct renameflags flags = { 0, 0, 0 };
+
+	// TODO: error log on this call
+	err = zfs_rename(zfs_hdl, NULL, full_new, flags);
+
+	zfs_close(zfs_hdl);
+
+	return (set_error(lbh, err));
+}

Modified: soc2017/kneitinger/libbe-head/lib/libbe/be.h
==============================================================================
--- soc2017/kneitinger/libbe-head/lib/libbe/be.h	Thu Jul 13 09:27:11 2017	(r324564)
+++ soc2017/kneitinger/libbe-head/lib/libbe/be.h	Thu Jul 13 11:39:37 2017	(r324565)
@@ -61,7 +61,6 @@
 const char *be_active_path(libbe_handle_t *);
 const char *be_root_path(libbe_handle_t *);
 nvlist_t *be_get_bootenv_props(libbe_handle_t *);
-bool be_exists(libbe_handle_t, char *);
 
 /* Bootenv creation functions */
 int be_create(libbe_handle_t *, char *);

Modified: soc2017/kneitinger/libbe-head/lib/libbe/be_access.c
==============================================================================
--- soc2017/kneitinger/libbe-head/lib/libbe/be_access.c	Thu Jul 13 09:27:11 2017	(r324564)
+++ soc2017/kneitinger/libbe-head/lib/libbe/be_access.c	Thu Jul 13 11:39:37 2017	(r324565)
@@ -35,36 +35,36 @@
 int
 be_mount(libbe_handle_t *lbh, char *bootenv, char *mountpoint, int flags)
 {
-    char be[MAXPATHLEN];
-    zfs_handle_t *zfs_hdl;
-    char *path;
-    int mntflags;
-    int err;
+	char be[MAXPATHLEN];
+	zfs_handle_t *zfs_hdl;
+	char *path;
+	int mntflags;
+	int err;
 
-    // TODO: handle deep bes
+	// TODO: handle deep bes
 
-    if (err = be_root_concat(lbh, bootenv, be)) {
-        return (set_error(lbh, err));
-    }
+	if (err = be_root_concat(lbh, bootenv, be)) {
+		return (set_error(lbh, err));
+	}
 
-    // TODO: make sure it exists (in a be_exists fn)!
+	// TODO: make sure it exists (in a be_exists fn)!
 
-    if (is_mounted(lbh->lzh, be, &path)) {
-        return (set_error(lbh, BE_ERR_MOUNTED));
-    }
+	if (is_mounted(lbh->lzh, be, &path)) {
+		return (set_error(lbh, BE_ERR_MOUNTED));
+	}
 
 
-    mntflags = (flags & BE_MNT_FORCE) ? MNT_FORCE : 0;
+	mntflags = (flags & BE_MNT_FORCE) ? MNT_FORCE : 0;
 
-    char opt = '\0';
-    if (err = zmount(be, mountpoint, mntflags, MNTTYPE_ZFS,
-        NULL, 0, &opt, 1)) {
-        // TODO: zmount returns the nmount error, look into what kind of
-        // errors we can report from that
-        return (set_error(lbh, BE_ERR_UNKNOWN));
-    }
+	char opt = '\0';
+	if (err = zmount(be, mountpoint, mntflags, MNTTYPE_ZFS,
+	    NULL, 0, &opt, 1)) {
+		// TODO: zmount returns the nmount error, look into what kind of
+		// errors we can report from that
+		return (set_error(lbh, BE_ERR_UNKNOWN));
+	}
 
-    return (set_error(lbh, BE_ERR_SUCCESS));
+	return (set_error(lbh, BE_ERR_SUCCESS));
 }
 
 
@@ -74,46 +74,46 @@
 int
 be_unmount(libbe_handle_t *lbh, char *bootenv, int flags)
 {
-    int err, mntflags;
-    char be[MAXPATHLEN];
-    struct statfs *mntbuf;
-    int mntsize;
-    char *mntpath;
-
-    if (err = be_root_concat(lbh, bootenv, be)) {
-        return (set_error(lbh, err));
-    }
-
-    if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0) {
-        // TODO correct error
-        return (set_error(lbh, BE_ERR_NOMOUNT));
-    }
-
-    mntpath = NULL;
-    for (int i = 0; i < mntsize; ++i) {
-        /* 0x000000de is the type number of zfs */
-        if (mntbuf[i].f_type != 0x000000de) {
-            continue;
-        }
-
-        if (strcmp(mntbuf[i].f_mntfromname, be) == 0) {
-            mntpath = mntbuf[i].f_mntonname;
-            break;
-        }
-    }
-
-    if (mntpath == NULL) {
-        return (set_error(lbh, BE_ERR_NOMOUNT));
-    }
-
-    mntflags = (flags & BE_MNT_FORCE) ? MNT_FORCE : 0;
-
-    if (err = unmount(mntpath, mntflags)) {
-        // TODO correct error
-        return (set_error(lbh, BE_ERR_NOMOUNT));
-    }
+	int err, mntflags;
+	char be[MAXPATHLEN];
+	struct statfs *mntbuf;
+	int mntsize;
+	char *mntpath;
+
+	if (err = be_root_concat(lbh, bootenv, be)) {
+		return (set_error(lbh, err));
+	}
+
+	if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0) {
+		// TODO correct error
+		return (set_error(lbh, BE_ERR_NOMOUNT));
+	}
+
+	mntpath = NULL;
+	for (int i = 0; i < mntsize; ++i) {
+		/* 0x000000de is the type number of zfs */
+		if (mntbuf[i].f_type != 0x000000de) {
+			continue;
+		}
+
+		if (strcmp(mntbuf[i].f_mntfromname, be) == 0) {
+			mntpath = mntbuf[i].f_mntonname;
+			break;
+		}
+	}
+
+	if (mntpath == NULL) {
+		return (set_error(lbh, BE_ERR_NOMOUNT));
+	}
+
+	mntflags = (flags & BE_MNT_FORCE) ? MNT_FORCE : 0;
+
+	if (err = unmount(mntpath, mntflags)) {
+		// TODO correct error
+		return (set_error(lbh, BE_ERR_NOMOUNT));
+	}
 
-    return (set_error(lbh, BE_ERR_SUCCESS));
+	return (set_error(lbh, BE_ERR_SUCCESS));
 }
 
 
@@ -123,5 +123,5 @@
 int
 be_jail(libbe_handle_t *lbh, char *bootenv)
 {
-    return (BE_ERR_SUCCESS);
+	return (BE_ERR_SUCCESS);
 }

Modified: soc2017/kneitinger/libbe-head/lib/libbe/be_error.c
==============================================================================
--- soc2017/kneitinger/libbe-head/lib/libbe/be_error.c	Thu Jul 13 09:27:11 2017	(r324564)
+++ soc2017/kneitinger/libbe-head/lib/libbe/be_error.c	Thu Jul 13 11:39:37 2017	(r324565)
@@ -35,78 +35,78 @@
 int
 libbe_errno(libbe_handle_t *lbh)
 {
-    return (lbh->error);
+	return (lbh->error);
 }
 
 
 const char *
 libbe_error_description(libbe_handle_t *lbh)
 {
-    switch (lbh->error) {
-    case BE_ERR_INVALIDNAME:
-        return ("invalid boot environment name");
+	switch (lbh->error) {
+	case BE_ERR_INVALIDNAME:
+		return ("invalid boot environment name");
 
-    case BE_ERR_EXISTS:
-        return ("boot environment name already taken");
+	case BE_ERR_EXISTS:
+		return ("boot environment name already taken");
 
-    case BE_ERR_NOENT:
-        return ("specified boot environment does not exist");
+	case BE_ERR_NOENT:
+		return ("specified boot environment does not exist");
 
-    case BE_ERR_PERMS:
-        return ("insufficient permissions");
+	case BE_ERR_PERMS:
+		return ("insufficient permissions");
 
-    case BE_ERR_DESTROYACT:
-        return ("cannot destroy active boot environment");
+	case BE_ERR_DESTROYACT:
+		return ("cannot destroy active boot environment");
 
-    case BE_ERR_DESTROYMNT:
-        return ("cannot destroy mounted boot env unless forced");
+	case BE_ERR_DESTROYMNT:
+		return ("cannot destroy mounted boot env unless forced");
 
-    case BE_ERR_PATHLEN:
-        return ("provided path name exceeds maximum length limit");
+	case BE_ERR_PATHLEN:
+		return ("provided path name exceeds maximum length limit");
 
-    case BE_ERR_INVORIGIN:
-        return ("snapshot origin's mountpoint is not \"/\"");
+	case BE_ERR_INVORIGIN:
+		return ("snapshot origin's mountpoint is not \"/\"");
 
-    case BE_ERR_NOORIGIN:
-        return ("could not open snapshot's origin");
+	case BE_ERR_NOORIGIN:
+		return ("could not open snapshot's origin");
 
-    case BE_ERR_MOUNTED:
-        return ("boot environment is already mounted");
+	case BE_ERR_MOUNTED:
+		return ("boot environment is already mounted");
 
-    case BE_ERR_NOMOUNT:
-        return ("boot environment is not mounted");
+	case BE_ERR_NOMOUNT:
+		return ("boot environment is not mounted");
 
-    case BE_ERR_ZFSOPEN:
-        return ("calling zfs_open() failed");
+	case BE_ERR_ZFSOPEN:
+		return ("calling zfs_open() failed");
 
-    case BE_ERR_UNKNOWN:
-        return ("unknown error");
+	case BE_ERR_UNKNOWN:
+		return ("unknown error");
 
-    default:
-        assert(lbh->error == BE_ERR_SUCCESS);
-        return ("no error");
-    }
+	default:
+		assert(lbh->error == BE_ERR_SUCCESS);
+		return ("no error");
+	}
 }
 
 
 void
 libbe_print_on_error(libbe_handle_t *lbh, bool val)
 {
-    lbh->print_on_err = val;
-    libzfs_print_on_error(lbh->lzh, val);
+	lbh->print_on_err = val;
+	libzfs_print_on_error(lbh->lzh, val);
 }
 
 
 int
 set_error(libbe_handle_t *lbh, be_error_t err)
 {
-    // TODO: should the old error be overwritten or no?
+	// TODO: should the old error be overwritten or no?
 
-    lbh->error = err;
+	lbh->error = err;
 
-    if (lbh->print_on_err) {
-        fprintf(stderr, "%s\n", libbe_error_description(lbh));
-    }
+	if (lbh->print_on_err) {
+		fprintf(stderr, "%s\n", libbe_error_description(lbh));
+	}
 
-    return (err);
+	return (err);
 }

Modified: soc2017/kneitinger/libbe-head/lib/libbe/be_impl.h
==============================================================================
--- soc2017/kneitinger/libbe-head/lib/libbe/be_impl.h	Thu Jul 13 09:27:11 2017	(r324564)
+++ soc2017/kneitinger/libbe-head/lib/libbe/be_impl.h	Thu Jul 13 11:39:37 2017	(r324565)
@@ -35,12 +35,12 @@
 
 
 struct libbe_handle {
-    libzfs_handle_t *lzh;
-    zfs_handle_t *be_root;
-    zfs_handle_t *be_active;
-    be_error_t error;
-    nvlist_t *list;
-    bool print_on_err;
+	libzfs_handle_t *lzh;
+	zfs_handle_t *be_root;
+	zfs_handle_t *be_active;
+	be_error_t error;
+	nvlist_t *list;
+	bool print_on_err;
 };
 
 int prop_list_builder(libbe_handle_t *);

Modified: soc2017/kneitinger/libbe-head/lib/libbe/be_info.c
==============================================================================
--- soc2017/kneitinger/libbe-head/lib/libbe/be_info.c	Thu Jul 13 09:27:11 2017	(r324564)
+++ soc2017/kneitinger/libbe-head/lib/libbe/be_info.c	Thu Jul 13 11:39:37 2017	(r324565)
@@ -37,9 +37,9 @@
 const char *
 be_active_name(libbe_handle_t *lbh)
 {
-    const char *full_path = zfs_get_name(lbh->be_active);
+	const char *full_path = zfs_get_name(lbh->be_active);
 
-    return (strrchr(full_path, '/') + 1);
+	return (strrchr(full_path, '/') + 1);
 }
 
 
@@ -49,7 +49,7 @@
 const char *
 be_active_path(libbe_handle_t *lbh)
 {
-    return (zfs_get_name(lbh->be_active));
+	return (zfs_get_name(lbh->be_active));
 }
 
 
@@ -59,7 +59,7 @@
 const char *
 be_root_path(libbe_handle_t *lbh)
 {
-    return (zfs_get_name(lbh->be_root));
+	return (zfs_get_name(lbh->be_root));
 }
 
 
@@ -70,9 +70,9 @@
 nvlist_t *
 be_get_bootenv_props(libbe_handle_t *lbh)
 {
-    // TODO: Should there be a dirty flag that re-calcs the list if an op
-    // has changed it?
-    return (lbh->list);
+	// TODO: Should there be a dirty flag that re-calcs the list if an op
+	// has changed it?
+	return (lbh->list);
 }
 
 
@@ -84,83 +84,83 @@
 static int
 prop_list_builder_cb(zfs_handle_t *zfs_hdl, void *data)
 {
-    /*
-     * TODO:
-     *      some system for defining constants for the nvlist keys
-     *      error checking
-     */
+	/*
+	 * TODO:
+	 *      some system for defining constants for the nvlist keys
+	 *      error checking
+	 */
 
-    boolean_t mounted, active, nextboot;
+	boolean_t mounted, active, nextboot;
 
-    char buf[512];
+	char buf[512];
 
-    nvlist_t *props;
+	nvlist_t *props;
 
-    libbe_handle_t *lbh = (libbe_handle_t *)data;
+	libbe_handle_t *lbh = (libbe_handle_t *)data;
 
 
-    nvlist_alloc(&props, NV_UNIQUE_NAME, KM_SLEEP);
+	nvlist_alloc(&props, NV_UNIQUE_NAME, KM_SLEEP);
 
-    const char *dataset = zfs_get_name(zfs_hdl);
-    nvlist_add_string(props, "dataset", dataset);
+	const char *dataset = zfs_get_name(zfs_hdl);
+	nvlist_add_string(props, "dataset", dataset);
 
-    const char *name = strrchr(dataset, '/') + 1;
-    nvlist_add_string(props, "name", name);
+	const char *name = strrchr(dataset, '/') + 1;
+	nvlist_add_string(props, "name", name);
 
 
-    mounted = zfs_prop_get_int(zfs_hdl, ZFS_PROP_MOUNTED);
-    nvlist_add_boolean_value(props, "mounted", mounted);
+	mounted = zfs_prop_get_int(zfs_hdl, ZFS_PROP_MOUNTED);
+	nvlist_add_boolean_value(props, "mounted", mounted);
 
-    // TODO: NOT CORRECT! Must use is_mounted
-    if (mounted) {
-        zfs_prop_get(zfs_hdl, ZFS_PROP_MOUNTPOINT, buf, 512,
-            NULL, NULL, 0, 1);
-        nvlist_add_string(props, "mountpoint", buf);
-    }
+	// TODO: NOT CORRECT! Must use is_mounted
+	if (mounted) {
+		zfs_prop_get(zfs_hdl, ZFS_PROP_MOUNTPOINT, buf, 512,
+		    NULL, NULL, 0, 1);
+		nvlist_add_string(props, "mountpoint", buf);
+	}
 
-    if (zfs_prop_get(zfs_hdl, ZFS_PROP_ORIGIN, buf, 512,
-        NULL, NULL, 0, 1)) {
-        nvlist_add_string(props, "origin", buf);
-    }
+	if (zfs_prop_get(zfs_hdl, ZFS_PROP_ORIGIN, buf, 512,
+	    NULL, NULL, 0, 1)) {
+		nvlist_add_string(props, "origin", buf);
+	}
 
-    if (zfs_prop_get(zfs_hdl, ZFS_PROP_CREATION, buf, 512,
-        NULL, NULL, 0, 1)) {
-        nvlist_add_string(props, "creation", buf);
-    }
+	if (zfs_prop_get(zfs_hdl, ZFS_PROP_CREATION, buf, 512,
+	    NULL, NULL, 0, 1)) {
+		nvlist_add_string(props, "creation", buf);
+	}
 
-    nvlist_add_boolean_value(props, "active",
-        (strcmp(be_active_path(lbh), dataset) == 0));
+	nvlist_add_boolean_value(props, "active",
+	    (strcmp(be_active_path(lbh), dataset) == 0));
 
-    if (zfs_prop_get(zfs_hdl, ZFS_PROP_USED, buf, 512,
-        NULL, NULL, 0, 1)) {
-        nvlist_add_string(props, "used", buf);
-    }
+	if (zfs_prop_get(zfs_hdl, ZFS_PROP_USED, buf, 512,
+	    NULL, NULL, 0, 1)) {
+		nvlist_add_string(props, "used", buf);
+	}
 
-    if (zfs_prop_get(zfs_hdl, ZFS_PROP_USEDDS, buf, 512,
-        NULL, NULL, 0, 1)) {
-        nvlist_add_string(props, "usedds", buf);
-    }
+	if (zfs_prop_get(zfs_hdl, ZFS_PROP_USEDDS, buf, 512,
+	    NULL, NULL, 0, 1)) {
+		nvlist_add_string(props, "usedds", buf);
+	}
 
-    if (zfs_prop_get(zfs_hdl, ZFS_PROP_USEDSNAP, buf, 512,
-        NULL, NULL, 0, 1)) {
-        nvlist_add_string(props, "usedsnap", buf);
-    }
+	if (zfs_prop_get(zfs_hdl, ZFS_PROP_USEDSNAP, buf, 512,
+	    NULL, NULL, 0, 1)) {
+		nvlist_add_string(props, "usedsnap", buf);
+	}
 
-    if (zfs_prop_get(zfs_hdl, ZFS_PROP_USEDREFRESERV, buf, 512,
-        NULL, NULL, 0, 1)) {
-        nvlist_add_string(props, "usedrefreserv", buf);
-    }
+	if (zfs_prop_get(zfs_hdl, ZFS_PROP_USEDREFRESERV, buf, 512,
+	    NULL, NULL, 0, 1)) {
+		nvlist_add_string(props, "usedrefreserv", buf);
+	}
 
-    if (zfs_prop_get(zfs_hdl, ZFS_PROP_REFERENCED, buf, 512,
-        NULL, NULL, 0, 1)) {
-        nvlist_add_string(props, "referenced", buf);
-    }
+	if (zfs_prop_get(zfs_hdl, ZFS_PROP_REFERENCED, buf, 512,
+	    NULL, NULL, 0, 1)) {
+		nvlist_add_string(props, "referenced", buf);
+	}
 
-    /* TODO figure out how to read nextboot (set in libzfs_pool.c) */
+	/* TODO figure out how to read nextboot (set in libzfs_pool.c) */
 
-    nvlist_add_nvlist(lbh->list, name, props);
+	nvlist_add_nvlist(lbh->list, name, props);
 
-    return (0);
+	return (0);
 }
 
 
@@ -173,20 +173,20 @@
 int
 prop_list_builder(libbe_handle_t *lbh)
 {
-    if (lbh->list != NULL) {
-        /* TODO: should actually call prop_list_free */
-        nvlist_free(lbh->list);
-        return (1);
-    }
-
-    if (nvlist_alloc(&lbh->list, NV_UNIQUE_NAME, KM_SLEEP) != 0) {
-        /* TODO: actually handle error */
-        return (1);
-    }
+	if (lbh->list != NULL) {
+		/* TODO: should actually call prop_list_free */
+		nvlist_free(lbh->list);
+		return (1);
+	}
+
+	if (nvlist_alloc(&lbh->list, NV_UNIQUE_NAME, KM_SLEEP) != 0) {
+		/* TODO: actually handle error */
+		return (1);
+	}
 
-    zfs_iter_filesystems(lbh->be_root, prop_list_builder_cb, lbh);
+	zfs_iter_filesystems(lbh->be_root, prop_list_builder_cb, lbh);
 
-    return (0);
+	return (0);
 }
 
 
@@ -196,24 +196,24 @@
 void
 prop_list_free(libbe_handle_t *lbh)
 {
-    nvlist_t *be_list;
-    nvlist_t *prop_list;
+	nvlist_t *be_list;
+	nvlist_t *prop_list;
 
-    if ((be_list = lbh->list) == 0) {
-        return;
-    }
-
-    nvpair_t *be_pair = nvlist_next_nvpair(be_list, NULL);
-
-    if (nvpair_value_nvlist(be_pair, &prop_list) == 0) {
-        nvlist_free(prop_list);
-    }
-
-    while ((be_pair = nvlist_next_nvpair(be_list, be_pair)) != NULL) {
-        if (nvpair_value_nvlist(be_pair, &prop_list) == 0) {
-            nvlist_free(prop_list);
-        }
-    }
+	if ((be_list = lbh->list) == 0) {
+		return;
+	}
+
+	nvpair_t *be_pair = nvlist_next_nvpair(be_list, NULL);
+
+	if (nvpair_value_nvlist(be_pair, &prop_list) == 0) {
+		nvlist_free(prop_list);
+	}
+
+	while ((be_pair = nvlist_next_nvpair(be_list, be_pair)) != NULL) {
+		if (nvpair_value_nvlist(be_pair, &prop_list) == 0) {
+			nvlist_free(prop_list);
+		}
+	}
 }
 
 
@@ -221,8 +221,8 @@
  * Usage
  */
 bool
-be_exists(libbe_handle_t lbh, char *be)
+be_exists(libbe_handle_t *lbh, char *be)
 {
-    // TODO
-    return (true);
+	// TODO
+	return (true);
 }


More information about the svn-soc-all mailing list