summaryrefslogtreecommitdiff
blob: a9cced815b21e12ee1445f62c5f669fb86082307 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
From:	David Sterba <dsterba@suse.cz>
To:	linux-btrfs@vger.kernel.org
Subject: [PATCH v2] btrfs-progs: move arg_strtou64 to a separate file for library
Date:	Tue, 22 Apr 2014 17:49:01 +0200

Linking with libbtrfs fails because arg_strtou64 is not defined and we
cannot just add utils.o to library objects because it's not
library-clean.

Reported-by: Arvin Schnell <aschnell@suse.com>
Reported-by: Anton Farygin <rider@altlinux.org>
Signed-off-by: David Sterba <dsterba@suse.cz>
---

v2: (thanks to Hugo)
- added missing line from comment
- fixed typo
- reformated comment paragraphs

 Makefile    |  5 +++--
 utils-lib.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 utils.c     | 33 ---------------------------------
 3 files changed, 45 insertions(+), 35 deletions(-)
 create mode 100644 utils-lib.c

diff --git a/Makefile b/Makefile
index 51d53fadf5af..76565e8b2307 100644
--- a/Makefile
+++ b/Makefile
@@ -9,14 +9,15 @@ CFLAGS = -g -O1 -fno-strict-aliasing
 objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \
 	  root-tree.o dir-item.o file-item.o inode-item.o inode-map.o \
 	  extent-cache.o extent_io.o volumes.o utils.o repair.o \
-	  qgroup.o raid6.o free-space-cache.o list_sort.o props.o
+	  qgroup.o raid6.o free-space-cache.o list_sort.o props.o \
+	  utils-lib.o
 cmds_objects = cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o \
 	       cmds-inspect.o cmds-balance.o cmds-send.o cmds-receive.o \
 	       cmds-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o \
 	       cmds-restore.o cmds-rescue.o chunk-recover.o super-recover.o \
 	       cmds-property.o
 libbtrfs_objects = send-stream.o send-utils.o rbtree.o btrfs-list.o crc32c.o \
-		   uuid-tree.o
+		   uuid-tree.o utils-lib.o
 libbtrfs_headers = send-stream.h send-utils.h send.h rbtree.h btrfs-list.h \
 	       crc32c.h list.h kerncompat.h radix-tree.h extent-cache.h \
 	       extent_io.h ioctl.h ctree.h btrfsck.h
diff --git a/utils-lib.c b/utils-lib.c
new file mode 100644
index 000000000000..9d53c6e5c710
--- /dev/null
+++ b/utils-lib.c
@@ -0,0 +1,42 @@
+#define _GNU_SOURCE
+
+#include "kerncompat.h"
+#include <unistd.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#if BTRFS_FLAT_INCLUDES
+#else
+#endif /* BTRFS_FLAT_INCLUDES */
+
+/*
+ * This function should be only used when parsing command arg, it won't return
+ * error to its caller and rather exit directly just like usage().
+ */
+u64 arg_strtou64(const char *str)
+{
+	u64 value;
+	char *ptr_parse_end = NULL;
+
+	value = strtoull(str, &ptr_parse_end, 0);
+	if (ptr_parse_end && *ptr_parse_end != '\0') {
+		fprintf(stderr, "ERROR: %s is not a valid numeric value.\n",
+			str);
+		exit(1);
+	}
+
+	/*
+	 * if we pass a negative number to strtoull, it will return an
+	 * unexpected number to us, so let's do the check ourselves.
+	 */
+	if (str[0] == '-') {
+		fprintf(stderr, "ERROR: %s: negative value is invalid.\n",
+			str);
+		exit(1);
+	}
+	if (value == ULLONG_MAX) {
+		fprintf(stderr, "ERROR: %s is too large.\n", str);
+		exit(1);
+	}
+	return value;
+}
diff --git a/utils.c b/utils.c
index 29953d9dd2a9..e130849c7bb5 100644
--- a/utils.c
+++ b/utils.c
@@ -1538,39 +1538,6 @@ scan_again:
 	return 0;
 }
 
-/*
- * This function should be only used when parsing
- * command arg, it won't return error to it's
- * caller and rather exit directly just like usage().
- */
-u64 arg_strtou64(const char *str)
-{
-	u64 value;
-	char *ptr_parse_end = NULL;
-
-	value = strtoull(str, &ptr_parse_end, 0);
-	if (ptr_parse_end && *ptr_parse_end != '\0') {
-		fprintf(stderr, "ERROR: %s is not a valid numeric value.\n",
-			str);
-		exit(1);
-	}
-	/*
-	 * if we pass a negative number to strtoull,
-	 * it will return an unexpected number to us,
-	 * so let's do the check ourselves.
-	 */
-	if (str[0] == '-') {
-		fprintf(stderr, "ERROR: %s: negative value is invalid.\n",
-			str);
-		exit(1);
-	}
-	if (value == ULLONG_MAX) {
-		fprintf(stderr, "ERROR: %s is too large.\n", str);
-		exit(1);
-	}
-	return value;
-}
-
 u64 parse_size(char *s)
 {
 	int i;
-- 
1.9.0

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html