From aa46922c09159d8315a35b81cacf30dcfb9243a5 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Fri, 11 Apr 2014 13:22:50 +0200 Subject: [PATCH] btrfs-progs: move arg_strtou64 to a separate file for library 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 Reported-by: Anton Farygin Signed-off-by: David Sterba --- 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 51d53fad..76565e8b 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 00000000..9d53c6e5 --- /dev/null +++ b/utils-lib.c @@ -0,0 +1,42 @@ +#define _GNU_SOURCE + +#include "kerncompat.h" +#include +#include +#include + +#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 29953d9d..e130849c 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;