Whamcloud - gitweb
LU-12766 test: convert time to seconds properly
[fs/lustre-release.git] / lustre / tests / lgetxattr_size_check.c
1 #include <sys/types.h>
2 #include <sys/xattr.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <errno.h>
7
8 void usage(char *prog)
9 {
10         printf("Usage: %s <pathname> <xattr name>\n", prog);
11 }
12
13 /* Simple program to test the lgetxattr return value. */
14 int main(int argc, char *argv[])
15 {
16         char *path, *xattr, *buf;
17         ssize_t ret_null;
18         int ret = 0;
19
20         if (argc != 3) {
21                 usage(argv[0]);
22                 exit(1);
23         }
24
25         path = argv[1];
26         xattr = argv[2];
27
28         ret_null = lgetxattr(path, xattr, NULL, 0);
29         if (ret_null < 0) {
30                 fprintf(stderr, "lgetxattr(%s, %s, NULL, 0) failed "
31                                 "with %i: %s\n", path, xattr, errno,
32                                  strerror(errno));
33                 ret = 1;
34                 goto out;
35         }
36
37         buf = (char *)malloc(ret_null);
38         if (buf == NULL) {
39                 fprintf(stderr, "malloc(%zi) failed with %i: %s\n",
40                                  ret_null, errno, strerror(errno));
41                 ret = 1;
42                 goto out;
43         }
44
45         ssize_t ret_buf = lgetxattr(path, xattr, buf, ret_null);
46         if (ret_buf < 0) {
47                 fprintf(stderr, "lgetxattr(%s, %s, %p, %zi) failed "
48                                 "with %i: %s\n", path, xattr, buf,
49                                  ret_null, errno, strerror(errno));
50                 ret = 1;
51                 goto free;
52         }
53
54         if (ret_null != ret_buf) {
55                 fprintf(stderr, "lgetxattr returned inconsistent sizes!\n");
56                 fprintf(stderr, "lgetxattr(%s, %s, NULL, 0) = %zi\n",
57                         path, xattr, ret_null);
58                 fprintf(stderr, "lgetxattr(%s, %s, %p, %zi) = %zi\n",
59                         path, xattr, buf, ret_null, ret_buf);
60                 ret = 1;
61                 goto free;
62         }
63
64 free:
65         free(buf);
66 out:
67         return ret;
68 }