dav/xattrtool.c

Sun, 17 Dec 2023 14:25:34 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 17 Dec 2023 14:25:34 +0100
changeset 797
edbb20b1438d
parent 700
165811ea12ab
permissions
-rw-r--r--

[Makefile] fix missing rules preventing dry-runs

We have to support dry-runs, because many IDEs are using
dry-runs to collect build information.

Some rules have dependencies that expect certain files or
directories to be just present. We added respective build
rules which invoke the test program. This way, the behavior
when running make normally is exactly the same, but dry-runs
are also not failing now.

660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2019 Olaf Wintermann. All rights reserved.
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 /*
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 * small tool for accessing extended attributes
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 */
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <stdio.h>
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include <stdlib.h>
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 #include <string.h>
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include <errno.h>
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37
687
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
38 #ifdef _WIN32
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
39 #include <Windows.h>
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
40 #endif
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
41
660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 #include "libxattr.h"
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 int attrtool_list(int argc, char **argv, int values);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 int attrtool_get(int argc, char **argv, int raw);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 int attrtool_set(int argc, char **argv);
663
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
47 int attrtool_rm(int argc, char **argv);
660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 void print_usage(char *cmd) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 fprintf(stderr, "usage %s:\n", cmd);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 fprintf(stderr, " list <file>\n");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 fprintf(stderr, " listvalues <file>\n");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 fprintf(stderr, " get <file> <name>\n");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 fprintf(stderr, " set <file> <name> <value>\n");
663
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
55 fprintf(stderr, " remove <file> <name>\n");
660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57
687
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
58 int xattr_tool_main(int argc, char **argv);
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
59
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
60 #ifdef _WIN32
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
61 static char* wchar2utf8(const wchar_t *wstr, size_t wlen) {
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
62 size_t maxlen = wlen * 4;
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
63 char *ret = malloc(maxlen + 1);
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
64 int ret_len = WideCharToMultiByte(
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
65 CP_UTF8,
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
66 0,
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
67 wstr,
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
68 wlen,
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
69 ret,
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
70 maxlen,
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
71 NULL,
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
72 NULL);
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
73 ret[ret_len] = 0;
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
74 return ret;
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
75 }
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
76
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
77 int wmain(int argc, wchar_t **argv) {
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
78 char **argv_utf8 = calloc(argc, sizeof(char*));
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
79 for(int i=0;i<argc;i++) {
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
80 argv_utf8[i] = wchar2utf8(argv[i], wcslen(argv[i]));
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
81 }
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
82
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
83 int ret = xattr_tool_main(argc, argv_utf8);
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
84
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
85 for(int i=0;i<argc;i++) {
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
86 free(argv_utf8[i]);
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
87 }
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
88 free(argv_utf8);
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
89
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
90 return ret;
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
91 }
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
92 #else
660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 int main(int argc, char **argv) {
687
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
94 return xattr_tool_main(argc, argv);
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
95 }
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
96 #endif
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
97
9922a349a61a add support for unicode args on windows
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 663
diff changeset
98 int xattr_tool_main(int argc, char **argv) {
660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 if(argc < 3) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 print_usage(argv[0]);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 return 1;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 if(!strcmp(argv[1], "list") || !strcmp(argv[1], "ls")) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 return attrtool_list(argc, argv, 0);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 } else if(!strcmp(argv[1], "listvalues") || !strcmp(argv[1], "lsv")) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 return attrtool_list(argc, argv, 1);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 } else if(!strcmp(argv[1], "get")) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 return attrtool_get(argc, argv, 0);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 } else if(!strcmp(argv[1], "set")) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 return attrtool_set(argc, argv);
663
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
112 } else if(!strcmp(argv[1], "rm") || !strcmp(argv[1], "remove")) {
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
113 return attrtool_rm(argc, argv);
660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 } else {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 fprintf(stderr, "Unknown command\n");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 print_usage(argv[0]);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 return 1;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 int attrtool_list(int argc, char **argv, int values) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 ssize_t nelm = 0;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 char **list = xattr_list(argv[2], &nelm);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 if(nelm < 0) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 perror("xattr_list");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 return 3;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 for(int i=0;i<nelm;i++) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 char *attr = list[i];
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 if(values) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 ssize_t valuelen = 0;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 char *value = xattr_get(argv[2], attr, &valuelen);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135 if(valuelen < 0) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 printf("%s: #ERROR: %s\n", attr, strerror(errno));
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137 } else {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 printf("%s: %.*s\n", attr, (int)valuelen, value);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 if(value) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142 free(value);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 } else {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 printf("%s\n", attr);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 free(list[i]);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 if(list) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 free(list);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 return 0;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 int attrtool_get(int argc, char **argv, int raw) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 if(argc < 4) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 fprintf(stderr, "Too few arguments\n");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 print_usage(argv[1]);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161 return 1;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 char *file = argv[2];
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 char *attr = argv[3];
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 int ret = 0;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167
700
165811ea12ab add documentation for all new config elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 687
diff changeset
168 ssize_t valuelen = 0;
660
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 char *value = xattr_get(file, attr, &valuelen);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 if(value) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 if(raw) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 fwrite(value, 1, valuelen, stdout);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 } else {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 printf("%.*s\n", (int)valuelen, value);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 free(value);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 } else {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 perror("xattr_get");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 ret = 3;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 return ret;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 int attrtool_set(int argc, char **argv) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186 if(argc < 4) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
187 fprintf(stderr, "Too few arguments\n");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 print_usage(argv[1]);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189 return 1;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
192 size_t len = strlen(argv[4]);
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 char *file = argv[2];
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194 char *attr = argv[3];
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
195 char *value = argv[4];
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
196 int ret = 0;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198 if(xattr_set(file, attr, value, len)) {
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 perror("xattr_set");
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200 ret = 3;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
201 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
203 return ret;
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 }
e835ec0b7f17 add tool for accessing extended attributes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205
663
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
206 int attrtool_rm(int argc, char **argv) {
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
207 if(argc < 4) {
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
208 fprintf(stderr, "Too few arguments\n");
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
209 print_usage(argv[1]);
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
210 return 1;
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
211 }
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
212
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
213 char *file = argv[2];
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
214 char *attr = argv[3];
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
215 int ret = 0;
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
216
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
217 if(xattr_remove(file, attr)) {
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
218 perror("xattr_remove");
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
219 ret = 1;
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
220 }
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
221
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
222 return ret;
888aa263c0f1 fix some xattr sync bugs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 660
diff changeset
223 }

mercurial