Whamcloud - gitweb
land 0.5.20.3 b_devel onto HEAD (b_devel will remain)
[fs/lustre-release.git] / lustre / tests / statone.c
diff --git a/lustre/tests/statone.c b/lustre/tests/statone.c
new file mode 100644 (file)
index 0000000..5250984
--- /dev/null
@@ -0,0 +1,60 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <liblustre.h>
+#include <linux/lustre_lib.h>
+#include <linux/obd.h>
+
+int main(int argc, char **argv)
+{
+    struct obd_ioctl_data data;
+    char rawbuf[8192], parent[4096], *buf = rawbuf, *base, *t;
+    int max = sizeof(rawbuf), fd, offset, rc;
+
+    if (argc != 2) {
+        printf("usage: %s filename\n", argv[0]);
+        return 1;
+    }
+
+    base = argv[1];
+    t = strrchr(base, '/');
+    if (!t) {
+        strcpy(parent, ".");
+        offset = -1;
+    } else {
+        strncpy(parent, base, t - base);
+        offset = t - base - 1;
+    }
+
+    fd = open(parent, O_RDONLY);
+    if (fd < 0) {
+        printf("open(%s) error: %s\n", parent, strerror(errno));
+        exit(errno);
+    }
+
+    memset(&data, 0, sizeof(data));
+    data.ioc_version = OBD_IOCTL_VERSION;
+    data.ioc_len = sizeof(data);
+    if (offset >= 0)
+        data.ioc_inlbuf1 = base + offset + 2;
+    else
+        data.ioc_inlbuf1 = base;
+    data.ioc_inllen1 = strlen(data.ioc_inlbuf1) + 1;
+    
+    if (obd_ioctl_pack(&data, &buf, max)) {
+        printf("ioctl_pack failed.\n");
+        exit(1);
+    }
+    
+    rc = ioctl(fd, IOC_MDC_LOOKUP, buf);
+    if (rc < 0) {
+        printf("ioctl(%s/%s) error: %s\n", parent,
+               data.ioc_inlbuf1, strerror(errno));
+        exit(errno);
+    }
+
+    return 0;
+}