summaryrefslogtreecommitdiffstats
path: root/api/examples/getvolfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'api/examples/getvolfile.py')
-rwxr-xr-xapi/examples/getvolfile.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/api/examples/getvolfile.py b/api/examples/getvolfile.py
new file mode 100755
index 0000000..82d9db0
--- /dev/null
+++ b/api/examples/getvolfile.py
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+
+import ctypes
+import ctypes.util
+
+api = ctypes.CDLL(ctypes.util.find_library("gfapi"))
+api.glfs_get_volfile.argtypes = [ctypes.c_void_p,
+ ctypes.c_void_p,
+ ctypes.c_ulong]
+api.glfs_get_volfile.restype = ctypes.c_long;
+
+def get_volfile (host, volume):
+ # This is set to a large value to exercise the "buffer not big enough"
+ # path. More realistically, you'd just start with a huge buffer.
+ BUF_LEN = 0
+ fs = api.glfs_new(volume)
+ #api.glfs_set_logging(fs,"/dev/stderr",7)
+ api.glfs_set_volfile_server(fs,"tcp",host,24007)
+ api.glfs_init(fs)
+ vbuf = ctypes.create_string_buffer(BUF_LEN)
+ vlen = api.glfs_get_volfile(fs,vbuf,BUF_LEN)
+ if vlen < 0:
+ vlen = BUF_LEN - vlen
+ vbuf = ctypes.create_string_buffer(vlen)
+ vlen = api.glfs_get_volfile(fs,vbuf,vlen)
+ api.glfs_fini(fs)
+ if vlen <= 0:
+ return vlen
+ return vbuf.value[:vlen]
+
+if __name__ == "__main__":
+ import sys
+
+ try:
+ res = apply(get_volfile,sys.argv[1:3])
+ except:
+ print "fetching volfile failed (volume not started?)"
+
+ try:
+ for line in res.split('\n'):
+ print line
+ except:
+ print "bad return value %s" % res