diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2018-07-31 19:12:43 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2018-07-31 19:13:13 +0200 |
commit | d322d0827f05f64af1a70c1a85672476b0092e35 (patch) | |
tree | 8e2427409fa23dc7bc6040417157206357478f5b | |
parent | sys-block/f3: amd64 & x86 stable (diff) | |
download | gentoo-d322d0827f05f64af1a70c1a85672476b0092e35.tar.gz gentoo-d322d0827f05f64af1a70c1a85672476b0092e35.tar.bz2 gentoo-d322d0827f05f64af1a70c1a85672476b0092e35.zip |
sys-block/f3: drop old
Package-Manager: Portage-2.3.44, Repoman-2.3.10
-rw-r--r-- | sys-block/f3/Manifest | 1 | ||||
-rw-r--r-- | sys-block/f3/f3-6.0.ebuild | 74 | ||||
-rw-r--r-- | sys-block/f3/files/f3-6.0-extra-target.patch | 108 | ||||
-rw-r--r-- | sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3probe.patch | 50 | ||||
-rw-r--r-- | sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3read.patch | 88 | ||||
-rw-r--r-- | sys-block/f3/files/f3-6.0-respect-ldflags.patch | 40 | ||||
-rw-r--r-- | sys-block/f3/files/f3-6.0-upstream-issue-44.patch | 25 | ||||
-rw-r--r-- | sys-block/f3/files/f3-6.0-use-argp_parse.patch | 417 |
8 files changed, 0 insertions, 803 deletions
diff --git a/sys-block/f3/Manifest b/sys-block/f3/Manifest index 54f970753110..43a76e353035 100644 --- a/sys-block/f3/Manifest +++ b/sys-block/f3/Manifest @@ -1,3 +1,2 @@ -DIST f3-6.0.tar.gz 45355 BLAKE2B c06f5ea3285f46197af05e7c4a75dc1e94b28acc14ec4f8da6b3fbeaec723cfaa420fa2542573a1cd5586ea50e27c3e8010ecd88ecfeb7b9ad28591f072c1377 SHA512 7960d01d7a2bd01a236006fcb4081cc7e2c0be674bc3e28137f00ea3f558a04eed47f10e7d3795c219943092ee43fb3189e19ff1925a7ed4ff5102130d65a470 DIST f3-7.0.tar.gz 67492 BLAKE2B 6b6882958ca831a26cd815635a563dd1bac9c93103fd6e9a2a4040b6ea3725395be96d0cbef9d7e01441402edf63a63110be41f5db559eb5fa85ac82a101751d SHA512 217348c3911995143e2d1f777ff6038ffd541f6868d58da9ca0a702610377f26eac7aafcd993d9b410b4d5a6d27d2c4fa8020b665beee7c2f760dc293a63c41f DIST f3-7.1.tar.gz 67934 BLAKE2B 7d5e12d8af7abda6136dfa19127554b6e5c45fdec7f0cef10d792d77cd2cfae035a572cdf2f22faf54c61852b1660e70270a326bb4408ed64725114f1f9aff4f SHA512 d696bb96ebaefab13c50a4479be01c206365d8dcf7d3c3b1d906b68705b654fffabdbeee49ea208047383c117bcac2a85c2c5fb129cace82f8addc16f22d7514 diff --git a/sys-block/f3/f3-6.0.ebuild b/sys-block/f3/f3-6.0.ebuild deleted file mode 100644 index ac8d4869cb4d..000000000000 --- a/sys-block/f3/f3-6.0.ebuild +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright 1999-2018 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -EAPI=6 - -inherit flag-o-matic toolchain-funcs - -DESCRIPTION="Utilities to detect broken or counterfeit flash storage" -HOMEPAGE="http://oss.digirati.com.br/f3/ https://github.com/AltraMayor/f3" - -PATCHES=( - "${FILESDIR}"/f3-6.0-fix-compiler-warnings_f3read.patch - "${FILESDIR}"/f3-6.0-fix-compiler-warnings_f3probe.patch - "${FILESDIR}"/f3-6.0-respect-ldflags.patch - "${FILESDIR}"/f3-6.0-use-argp_parse.patch - "${FILESDIR}"/f3-6.0-extra-target.patch - "${FILESDIR}"/f3-6.0-upstream-issue-44.patch -) - -if [[ ${PV} == "9999" ]]; then - EGIT_REPO_URI="https://github.com/AltraMayor/${PN}.git" - - PATCHES=() - - inherit git-r3 -else - SRC_URI="https://github.com/AltraMayor/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz" - KEYWORDS="amd64 ~arm64 x86" -fi - -LICENSE="GPL-3+" -SLOT="0" - -IUSE="extra" - -DEPEND="extra? ( - sys-block/parted - virtual/udev - )" - -RDEPEND="" - -DOCS=( changelog README.md ) - -src_prepare() { - default - - sed -i \ - -e 's:-ggdb::' \ - -e 's:^PREFIX =:PREFIX ?=:' \ - Makefile || die - - tc-export CC - - append-cflags -fgnu89-inline # https://github.com/AltraMayor/f3/issues/34 -} - -src_compile() { - default - - if use extra; then - emake V=1 extra - fi -} - -src_install() { - emake PREFIX="${ED%/}/usr" install - - if use extra; then - emake PREFIX="${ED%/}/usr" install-extra - fi - - dodoc "${DOCS[@]}" -} diff --git a/sys-block/f3/files/f3-6.0-extra-target.patch b/sys-block/f3/files/f3-6.0-extra-target.patch deleted file mode 100644 index 8523ca3f2b53..000000000000 --- a/sys-block/f3/files/f3-6.0-extra-target.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 64d169e2486121eaece555c56040d6aff71e0b51 Mon Sep 17 00:00:00 2001 -From: Michel Machado <michel@digirati.com.br> -Date: Tue, 29 Mar 2016 12:56:43 -0400 -Subject: [PATCH] Mark experimental applications as stable - -The code of the applications f3probe, f3brew, and f3fix is now -mature, and they have not received any significant bug report for -about six months. - -From now on, one needs to compile these applications with -```make extra``` ---- - Makefile | 10 +++++----- - README.md | 29 ++++++++++++----------------- - 2 files changed, 17 insertions(+), 22 deletions(-) - -diff --git a/Makefile b/Makefile -index 46853f5..ce54842 100644 ---- a/Makefile -+++ b/Makefile -@@ -2,14 +2,14 @@ CC ?= gcc - CFLAGS += -std=c99 -Wall -Wextra -pedantic -MMD -ggdb - - TARGETS = f3write f3read --EXPERIMENTAL_TARGETS = f3probe f3brew f3fix -+EXTRA_TARGETS = f3probe f3brew f3fix - - PREFIX = /usr/local - INSTALL = install - LN = ln - - all: $(TARGETS) --experimental: $(EXPERIMENTAL_TARGETS) -+extra: $(EXTRA_TARGETS) - - install: all - $(INSTALL) -d $(PREFIX)/bin -@@ -18,9 +18,9 @@ install: all - $(INSTALL) -oroot -groot -m644 f3read.1 $(PREFIX)/share/man/man1 - $(LN) -sf f3read.1 $(PREFIX)/share/man/man1/f3write.1 - --install-experimental: experimental -+install-extra: extra - $(INSTALL) -d $(PREFIX)/bin -- $(INSTALL) -oroot -groot -m755 $(EXPERIMENTAL_TARGETS) $(PREFIX)/bin -+ $(INSTALL) -oroot -groot -m755 $(EXTRA_TARGETS) $(PREFIX)/bin - - f3write: utils.o f3write.o - $(CC) -o $@ $^ $(LDFLAGS) -lm -@@ -45,4 +45,4 @@ cscope: - cscope -b *.c *.h - - clean: -- rm -f *.o *.d cscope.out $(TARGETS) $(EXPERIMENTAL_TARGETS) -+ rm -f *.o *.d cscope.out $(TARGETS) $(EXTRA_TARGETS) -diff --git a/README.md b/README.md -index f0399b4..e2f7f79 100644 ---- a/README.md -+++ b/README.md -@@ -5,36 +5,31 @@ make - ``` - - --## Compile experimental applications on Linux -+## Compile the extra applications on Linux - - ### Install dependencies - -- - f3probe and f3brew require version 1 of the library libudev to compile. -- On Ubuntu, you can install this library with the following command: -+f3probe and f3brew require version 1 of the library libudev, and -+f3fix requires version 0 of the library libparted to compile. -+On Ubuntu, you can install these libraries with the following command: - ``` --sudo apt-get install libudev1 libudev-dev --``` -- - f3fix requires version 0 of the library libparted to compile. -- On Ubuntu, you can install this library with the following command: --``` --sudo apt-get install libparted0-dev -+sudo apt-get install libudev1 libudev-dev libparted0-dev - ``` - --### Compile experimental applications -+### Compile the extra applications - - ``` --make experimental -+make extra - ``` - - NOTES: -- - Experimental software might compile on non-Linux platforms, but -- there is no guarantee given that they are only tested on Linux. -- - Please do not e-mail me saying that you want an experimental software -+ - The extra applications are only compiled and tested on Linux platform. -+ - Please do not e-mail me saying that you want the extra applications - to run on your platform; I already know that. -- - If you want experimental software to run on your platform, -+ - If you want the extra applications to run on your platform, - help to port them, or find someone that can port them for you. -- If you do port the software, please send me a patch to help others. -- - Currently, f3probe, f3brew, and f3fix are experimental. -+ If you do port any of them, please send me a patch to help others. -+ - The extra applications are f3probe, f3brew, and f3fix. - - - ## Use example of f3write/f3read diff --git a/sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3probe.patch b/sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3probe.patch deleted file mode 100644 index 739488b53f97..000000000000 --- a/sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3probe.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 77d2ceb374ff70b64e95a41f0e05486575147b53 Mon Sep 17 00:00:00 2001 -From: Michel Machado <michel@digirati.com.br> -Date: Mon, 4 Jan 2016 13:49:05 -0500 -Subject: [PATCH] f3probe: avoid compiler warning -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When using -O2, GCC was issuing the following warning: - -cc -O2 -std=c99 -Wall -Wextra -pedantic -MMD -ggdb -c -o f3probe.o f3probe.c -f3probe.c: In function ‘main’: -f3probe.c:446:13: warning: ‘sdev’ may be used uninitialized in this function [-Wmaybe-uninitialized] - sdev_flush(sdev); - ^ -f3probe.c:369:30: note: ‘sdev’ was declared here - struct device *dev, *pdev, *sdev; - ^ - -NOTE: The warning was wrong. - GCC could not follow that @args->save being true implied - @sdev to not be NULL. - -This patch addresses one of the issues discussed here: -https://github.com/AltraMayor/f3/issues/34 ---- - f3probe.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/f3probe.c b/f3probe.c -index e647d7c..9f214ab 100644 ---- a/f3probe.c -+++ b/f3probe.c -@@ -393,6 +393,7 @@ static int test_device(struct args *args) - pdev = NULL; - } - -+ sdev = NULL; - if (args->save) { - sdev = create_safe_device(dev, - probe_device_max_blocks(dev), args->min_mem); -@@ -434,7 +435,7 @@ static int test_device(struct args *args) - &read_count, &read_time_us, - &write_count, &write_time_us, - &reset_count, &reset_time_us); -- if (args->save) { -+ if (sdev) { - uint64_t very_last_pos = real_size_byte >> block_order; - printf("Probe finished, recovering blocks..."); - fflush(stdout); diff --git a/sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3read.patch b/sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3read.patch deleted file mode 100644 index 0e4f61fca816..000000000000 --- a/sys-block/f3/files/f3-6.0-fix-compiler-warnings_f3read.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 52e252f5d6dc6d10fd85a45b0774bb0b29d5f989 Mon Sep 17 00:00:00 2001 -From: Michel Machado <michel@digirati.com.br> -Date: Mon, 4 Jan 2016 13:22:18 -0500 -Subject: [PATCH] f3read: avoid compiler warning -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When using -O2, GCC was issuing the following warning: - -cc -O2 -std=c99 -Wall -Wextra -pedantic -MMD -ggdb -c -o f3read.o f3read.c -f3read.c: In function ‘validate_file’: -f3read.c:95:3: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] - offset = *((uint64_t *) sector); - ^ ---- - f3read.c | 28 ++++++++++++---------------- - 1 file changed, 12 insertions(+), 16 deletions(-) - -diff --git a/f3read.c b/f3read.c -index 1514365..2dc6942 100644 ---- a/f3read.c -+++ b/f3read.c -@@ -42,12 +42,12 @@ static void validate_file(const char *path, int number, - { - char *full_fn; - const char *filename; -- uint8_t sector[SECTOR_SIZE], *p, *ptr_end; -+ const int num_int64 = SECTOR_SIZE >> 3; -+ uint64_t sector[num_int64]; - FILE *f; - int fd; -- int offset_match, error_count; - size_t sectors_read; -- uint64_t offset, expected_offset; -+ uint64_t expected_offset; - int final_errno; - struct timeval t1, t2; - /* Progress time. */ -@@ -84,32 +84,24 @@ static void validate_file(const char *path, int number, - /* Help the kernel to help us. */ - assert(!posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL)); - -- ptr_end = sector + SECTOR_SIZE; - sectors_read = fread(sector, SECTOR_SIZE, 1, f); - final_errno = errno; - expected_offset = (uint64_t)number * GIGABYTES; - while (sectors_read > 0) { - uint64_t rn; -+ int error_count, i; - - assert(sectors_read == 1); -- offset = *((uint64_t *) sector); -- offset_match = offset == expected_offset; - -- rn = offset; -- p = sector + sizeof(offset); -+ rn = sector[0]; - error_count = 0; -- for (; error_count <= TOLERANCE && p < ptr_end; -- p += sizeof(rn)) { -+ for (i = 1; error_count <= TOLERANCE && i < num_int64; i++) { - rn = random_number(rn); -- if (rn != *((__typeof__(rn) *) p)) -+ if (rn != sector[i]) - error_count++; - } - -- sectors_read = fread(sector, SECTOR_SIZE, 1, f); -- final_errno = errno; -- expected_offset += SECTOR_SIZE; -- -- if (offset_match) { -+ if (expected_offset == sector[0]) { - if (error_count == 0) - (*ptr_ok)++; - else if (error_count <= TOLERANCE) -@@ -121,6 +113,10 @@ static void validate_file(const char *path, int number, - else - (*ptr_corrupted)++; - -+ sectors_read = fread(sector, SECTOR_SIZE, 1, f); -+ final_errno = errno; -+ expected_offset += SECTOR_SIZE; -+ - if (progress) { - struct timeval pt2; - assert(!gettimeofday(&pt2, NULL)); diff --git a/sys-block/f3/files/f3-6.0-respect-ldflags.patch b/sys-block/f3/files/f3-6.0-respect-ldflags.patch deleted file mode 100644 index 4d42ea8318d4..000000000000 --- a/sys-block/f3/files/f3-6.0-respect-ldflags.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 70962dcfaa41ca390f6f077cc64312fb879b7eb4 Mon Sep 17 00:00:00 2001 -From: Grazvydas Ignotas <notasas@gmail.com> -Date: Sat, 12 Mar 2016 17:39:05 +0200 -Subject: [PATCH] allow users to specify linker flags - -Traditionally LDFLAGS is used for this, it's what I've tried first -but it wasn't accepted. ---- - Makefile | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/Makefile b/Makefile -index 404bc17..46853f5 100644 ---- a/Makefile -+++ b/Makefile -@@ -23,19 +23,19 @@ install-experimental: experimental - $(INSTALL) -oroot -groot -m755 $(EXPERIMENTAL_TARGETS) $(PREFIX)/bin - - f3write: utils.o f3write.o -- $(CC) -o $@ $^ -lm -+ $(CC) -o $@ $^ $(LDFLAGS) -lm - - f3read: utils.o f3read.o -- $(CC) -o $@ $^ -+ $(CC) -o $@ $^ $(LDFLAGS) - - f3probe: libutils.o libdevs.o libprobe.o f3probe.o -- $(CC) -o $@ $^ -lm -ludev -+ $(CC) -o $@ $^ $(LDFLAGS) -lm -ludev - - f3brew: libutils.o libdevs.o f3brew.o -- $(CC) -o $@ $^ -lm -ludev -+ $(CC) -o $@ $^ $(LDFLAGS) -lm -ludev - - f3fix: libutils.o f3fix.o -- $(CC) -o $@ $^ -lparted -+ $(CC) -o $@ $^ $(LDFLAGS) -lparted - - -include *.d - diff --git a/sys-block/f3/files/f3-6.0-upstream-issue-44.patch b/sys-block/f3/files/f3-6.0-upstream-issue-44.patch deleted file mode 100644 index 605b6b3ea663..000000000000 --- a/sys-block/f3/files/f3-6.0-upstream-issue-44.patch +++ /dev/null @@ -1,25 +0,0 @@ -From a754e9cf29415d110c4fe6fb1fe0d060d765a73e Mon Sep 17 00:00:00 2001 -From: Michel Machado <michel@digirati.com.br> -Date: Thu, 19 May 2016 08:39:36 -0400 -Subject: [PATCH] f3read: add "#include <limits.h>" to f3read.c - -This addresses a compiling issue on Macs. - -@jksinton found and solved this problem: -https://github.com/AltraMayor/f3/issues/44 ---- - f3read.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/f3read.c b/f3read.c -index 0842071..c5c20d2 100644 ---- a/f3read.c -+++ b/f3read.c -@@ -5,6 +5,7 @@ - #include <stdint.h> - #include <inttypes.h> - #include <stdio.h> -+#include <limits.h> - #include <string.h> - #include <stdlib.h> - #include <errno.h> diff --git a/sys-block/f3/files/f3-6.0-use-argp_parse.patch b/sys-block/f3/files/f3-6.0-use-argp_parse.patch deleted file mode 100644 index b73fbff8c7a2..000000000000 --- a/sys-block/f3/files/f3-6.0-use-argp_parse.patch +++ /dev/null @@ -1,417 +0,0 @@ -From fb187b4c710714a56d74af8a50adccd6118445e7 Mon Sep 17 00:00:00 2001 -From: zwpwjwtz <zwpwjwtz@126.com> -Date: Tue, 29 Mar 2016 15:36:04 +0800 -Subject: [PATCH] Replace parse_args() with argp_parse() from argp.h - ---- - f3read.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- - f3write.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- - utils.c | 92 ---------------------------------------------------- - utils.h | 5 --- - 4 files changed, 200 insertions(+), 113 deletions(-) - -diff --git a/f3read.c b/f3read.c -index 2dc6942..683232d 100644 ---- a/f3read.c -+++ b/f3read.c -@@ -12,8 +12,100 @@ - #include <unistd.h> - #include <err.h> - #include <sys/time.h> -+#include <limits.h> -+#include <argp.h> - - #include "utils.h" -+#include "version.h" -+ -+/* Argp's global variables. */ -+const char *argp_program_version = "F3 Read " F3_STR_VERSION; -+ -+/* Arguments. */ -+static char adoc[] = "<PATH>"; -+ -+static char doc[] = "F3 Read -- test real flash memory capacity\n" -+ "Copyright (C) 2010 Digirati Internet LTDA.\n" -+ "This is free software; see the source for copying conditions.\n"; -+ -+static struct argp_option options[] = { -+ {"start-at", 's', "NUM", 0, -+ "Disk type of the partition table", 0}, -+ {"end-at", 'e', "NUM", 0, -+ "Type of the file system of the partition", 0}, -+ {"progress", 'p', NULL, 0, -+ "Show progress of the operation (default)", 0}, -+ { 0 } -+}; -+ -+struct args { -+ long start_at; -+ long end_at; -+ int show_progress; -+ const char *dev_path; -+}; -+ -+static error_t parse_opt(int key, char *arg, struct argp_state *state) -+{ -+ struct args *args = state->input; -+ char *endptr; -+ -+ switch (key) { -+ case 's': -+ args->start_at = strtol(arg, &endptr, 10); -+ if (*endptr != '\0') -+ argp_error(state, "Option --start-at must be a number"); -+ break; -+ -+ case 'e': -+ args->end_at = strtol(arg, &endptr, 10); -+ if (*endptr != '\0') -+ argp_error(state, "Option --end-at must be a number"); -+ break; -+ -+ case 'p': -+ args->show_progress = 1; -+ break; -+ -+ case ARGP_KEY_INIT: -+ args->dev_path = NULL; -+ args->start_at = 0; -+ args->end_at = LONG_MAX; -+ args->show_progress = 0; -+ break; -+ -+ case ARGP_KEY_ARG: -+ if (args->dev_path) -+ argp_error(state, -+ "Wrong number of arguments; only one is allowed"); -+ args->dev_path = arg; -+ break; -+ -+ case ARGP_KEY_END: -+ if (!args->dev_path) -+ argp_error(state, -+ "The disk path was not specified"); -+ -+ if (args->start_at < 0) -+ argp_error(state, -+ "Option --start-at must be greater than 0"); -+ -+ if (args->end_at < 0) -+ argp_error(state, -+ "Option --end-at must be greater than 0"); -+ -+ if (args->start_at > args->end_at) -+ argp_error(state, -+ "Option --start-at must be less or equal to option --end-at"); -+ break; -+ -+ default: -+ return ARGP_ERR_UNKNOWN; -+ } -+ return 0; -+} -+ -+static struct argp argp = {options, parse_opt, adoc, doc, NULL, NULL, NULL}; - - static inline void update_dt(struct timeval *dt, const struct timeval *t1, - const struct timeval *t2) -@@ -228,20 +320,21 @@ static void iterate_files(const char *path, const long *files, - - int main(int argc, char **argv) - { -- long start_at, end_at; -- const char *path; - const long *files; -- int progress; -+ struct args args; - int rc; -- -- rc = parse_args("read", argc, argv, &start_at, &end_at, &path); -+ rc = argp_parse(&argp, argc, argv, 0, NULL, &args); - if (rc) - return rc; - -- files = ls_my_files(path, start_at, end_at); - /* If stdout isn't a terminal, supress progress. */ -- progress = isatty(STDOUT_FILENO); -- iterate_files(path, files, start_at, end_at, progress); -+ if (!args.show_progress) -+ args.show_progress = isatty(STDOUT_FILENO); -+ -+ files = ls_my_files(args.dev_path, args.start_at, args.end_at); -+ /* If stdout isn't a terminal, supress progress. */ -+ -+ iterate_files(args.dev_path, files, args.start_at, args.end_at, args.show_progress); - free((void *)files); - return 0; - } -diff --git a/f3write.c b/f3write.c -index b964059..bfef27e 100644 ---- a/f3write.c -+++ b/f3write.c -@@ -15,8 +15,99 @@ - #include <unistd.h> - #include <err.h> - #include <math.h> -+#include <argp.h> - - #include "utils.h" -+#include "version.h" -+ -+/* Argp's global variables. */ -+const char *argp_program_version = "F3 Write " F3_STR_VERSION; -+ -+/* Arguments. */ -+static char adoc[] = "<PATH>"; -+ -+static char doc[] = "F3 Write -- test real flash memory capacity\n" -+ "Copyright (C) 2010 Digirati Internet LTDA.\n" -+ "This is free software; see the source for copying conditions.\n"; -+ -+static struct argp_option options[] = { -+ {"start-at", 's', "NUM", 0, -+ "Disk type of the partition table", 0}, -+ {"end-at", 'e', "NUM", 0, -+ "Type of the file system of the partition", 0}, -+ {"progress", 'p', NULL, 0, -+ "Show progress of the operation (default)", 0}, -+ { 0 } -+}; -+ -+struct args { -+ long start_at; -+ long end_at; -+ int show_progress; -+ const char *dev_path; -+}; -+ -+static error_t parse_opt(int key, char *arg, struct argp_state *state) -+{ -+ struct args *args = state->input; -+ char *endptr; -+ -+ switch (key) { -+ case 's': -+ args->start_at = strtol(arg, &endptr, 10); -+ if (*endptr != '\0') -+ argp_error(state, "Option --start-at must be a number"); -+ break; -+ -+ case 'e': -+ args->end_at = strtol(arg, &endptr, 10); -+ if (*endptr != '\0') -+ argp_error(state, "Option --end-at must be a number"); -+ break; -+ -+ case 'p': -+ args->show_progress = 1; -+ break; -+ -+ case ARGP_KEY_INIT: -+ args->dev_path = NULL; -+ args->start_at = 0; -+ args->end_at = LONG_MAX; -+ args->show_progress = 0; -+ break; -+ -+ case ARGP_KEY_ARG: -+ if (args->dev_path) -+ argp_error(state, -+ "Wrong number of arguments; only one is allowed"); -+ args->dev_path = arg; -+ break; -+ -+ case ARGP_KEY_END: -+ if (!args->dev_path) -+ argp_error(state, -+ "The disk path was not specified"); -+ -+ if (args->start_at < 0) -+ argp_error(state, -+ "Option --start-at must be greater than 0"); -+ -+ if (args->end_at < 0) -+ argp_error(state, -+ "Option --end-at must be greater than 0"); -+ -+ if (args->start_at > args->end_at) -+ argp_error(state, -+ "Option --start-at must be less or equal to option --end-at"); -+ break; -+ -+ default: -+ return ARGP_ERR_UNKNOWN; -+ } -+ return 0; -+} -+ -+static struct argp argp = {options, parse_opt, adoc, doc, NULL, NULL, NULL}; - - static uint64_t fill_buffer(void *buf, size_t size, uint64_t offset) - { -@@ -464,17 +555,17 @@ static void unlink_old_files(const char *path, long start_at, long end_at) - - int main(int argc, char **argv) - { -- long start_at, end_at; -- const char *path; -- int progress; -+ struct args args; - int rc; -- -- rc = parse_args("write", argc, argv, &start_at, &end_at, &path); -+ rc = argp_parse(&argp, argc, argv, 0, NULL, &args); - if (rc) - return rc; - -- unlink_old_files(path, start_at, end_at); -+ unlink_old_files(args.dev_path, args.start_at, args.end_at); -+ - /* If stdout isn't a terminal, supress progress. */ -- progress = isatty(STDOUT_FILENO); -- return fill_fs(path, start_at, end_at, progress); -+ if (!args.show_progress) -+ args.show_progress = isatty(STDOUT_FILENO); -+ -+ return fill_fs(args.dev_path, args.start_at, args.end_at, args.show_progress); - } -diff --git a/utils.c b/utils.c -index a30ea3b..6aaceff 100644 ---- a/utils.c -+++ b/utils.c -@@ -13,13 +13,11 @@ - #include <string.h> - #include <ctype.h> - #include <assert.h> --#include <limits.h> - #include <sys/types.h> - #include <dirent.h> - #include <errno.h> - #include <err.h> - --#include "version.h" - #include "utils.h" - - const char *adjust_unit(double *ptr_bytes) -@@ -60,87 +58,6 @@ char *full_fn_from_number(const char **filename, const char *path, long num) - return str; - } - --/* Parse @param and return the start-at parameter. -- * The string must be of the format "--start-at=NUM"; otherwise it returns -1. -- */ --#define START_AT_TEXT "--start-at=" --#define END_AT_TEXT "--end-at=" -- --static inline int is_param(const char *text, const char *param) --{ -- return !strncmp(param, text, strlen(text)); --} -- --static long parse_long_param(const char *param) --{ -- char *endptr; -- long value; -- -- /* Skip text. */ -- while (*param != '=') { -- if (*param == '\0') -- return -1; -- param++; -- } -- param++; /* Skip '='. */ -- -- value = strtol(param, &endptr, 10); -- if (*endptr != '\0') -- return -1; -- -- return (value <= 0 || value == LONG_MAX) ? -1 : value - 1; --} -- --static int parse_param(const char *param, long *pstart_at, long *pend_at) --{ -- if (is_param(START_AT_TEXT, param)) -- *pstart_at = parse_long_param(param); -- else if (is_param(END_AT_TEXT, param)) -- *pend_at = parse_long_param(param); -- else -- return 1; -- return 0; --} -- --int parse_args(const char *name, int argc, char **argv, -- long *pstart_at, long *pend_at, const char **ppath) --{ -- *pstart_at = 0; -- *pend_at = LONG_MAX - 1; -- -- switch (argc) { -- case 2: -- *ppath = argv[1]; -- break; -- -- case 3: -- if (parse_param(argv[1], pstart_at, pend_at)) -- goto error; -- *ppath = argv[2]; -- break; -- -- case 4: -- if (parse_param(argv[1], pstart_at, pend_at)) -- goto error; -- if (parse_param(argv[2], pstart_at, pend_at)) -- goto error; -- *ppath = argv[3]; -- break; -- -- default: -- goto error; -- } -- -- if (*pstart_at >= 0 && *pend_at >= 0 && *pstart_at <= *pend_at) -- return 0; -- --error: -- print_header(stderr, name); -- fprintf(stderr, "Usage: f3%s [%sNUM] [%sNUM] <PATH>\n", -- name, START_AT_TEXT, END_AT_TEXT); -- return 1; --} -- - static long number_from_filename(const char *filename) - { - const char *p; -@@ -218,15 +135,6 @@ const long *ls_my_files(const char *path, long start_at, long end_at) - return ret; - } - --void print_header(FILE *f, const char *name) --{ -- fprintf(f, -- "F3 %s " F3_STR_VERSION "\n" -- "Copyright (C) 2010 Digirati Internet LTDA.\n" -- "This is free software; see the source for copying conditions.\n" -- "\n", name); --} -- - #if __APPLE__ && __MACH__ - - /* This function is a _rough_ approximation of fdatasync(2). */ -diff --git a/utils.h b/utils.h -index 6b7c92f..4fdbce2 100644 ---- a/utils.h -+++ b/utils.h -@@ -22,13 +22,8 @@ static inline long delay_ms(const struct timeval *t1, const struct timeval *t2) - (t2->tv_usec - t1->tv_usec) / 1000; - } - --int parse_args(const char *name, int argc, char **argv, -- long *pstart_at, long *pend_at, const char **ppath); -- - const long *ls_my_files(const char *path, long start_at, long end_at); - --void print_header(FILE *f, const char *name); -- - static inline uint64_t random_number(uint64_t prv_number) - { - return prv_number * 4294967311ULL + 17; |