[PATCH v2] fff-random: rewrite in C
Peter J. Philipp
pjp at centroid.eu
So Jul 2 21:18:37 CEST 2017
Danke. Jetzt sieht es besser aus. Das Programm kann wohl auch hängen im fread() wenn das Computer System kein Entropy (Entropie) mehr hat und /dev/urandom nichts schreiben kann.. das ist aber besser als die alternative.
Sieht OK aus.
Reviewed-by: Peter J. Philipp <pjp at centroid.eu <mailto:pjp at centroid.eu>>
-peter
> Am 02.07.2017 um 19:52 schrieb Tim Niemeyer <tim at tn-x.org>:
>
> Fixes: #51
>
> Signed-off-by: Tim Niemeyer <tim at tn-x.org>
> ---
>
> Changes in v2:
> - added fclose
> - use %u instead of %d
>
> src/packages/fff/fff-random/Makefile | 27 ++++++------
> src/packages/fff/fff-random/files/usr/bin/random | 16 -------
> src/packages/fff/fff-random/src/Makefile | 4 ++
> src/packages/fff/fff-random/src/random.c | 53 ++++++++++++++++++++++++
> 4 files changed, 71 insertions(+), 29 deletions(-)
> delete mode 100755 src/packages/fff/fff-random/files/usr/bin/random
> create mode 100644 src/packages/fff/fff-random/src/Makefile
> create mode 100644 src/packages/fff/fff-random/src/random.c
>
> diff --git a/src/packages/fff/fff-random/Makefile b/src/packages/fff/fff-random/Makefile
> index 95e5786..066adc3 100644
> --- a/src/packages/fff/fff-random/Makefile
> +++ b/src/packages/fff/fff-random/Makefile
> @@ -1,40 +1,41 @@
> include $(TOPDIR)/rules.mk
>
> PKG_NAME:=fff-random
> -PKG_VERSION:=0.0.1
> +PKG_VERSION:=2
> PKG_RELEASE:=1
>
> -PKG_BUILD_DIR:=$(BUILD_DIR)/fff-random
> +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>
> include $(INCLUDE_DIR)/package.mk
>
> define Package/fff-random
> - SECTION:=base
> - CATEGORY:=Freifunk
> - TITLE:=Freifunk-Franken Random
> - URL:=http://www.freifunk-franken.de
> - DEPENDS:=+ at BUSYBOX_CONFIG_ASH
> + SECTION:=base
> + CATEGORY:=Freifunk
> + TITLE:=Freifunk-Franken Random
> + URL:=http://www.freifunk-franken.de
> endef
>
> define Package/fff-random/description
> - This is the Freifunk Franken Firmware Random package
> - This packages provides a random function.
> + This is the Freifunk Franken Firmware Random package
> + This packages provides a random function.
> endef
>
> define Build/Prepare
> - echo "all: " > $(PKG_BUILD_DIR)/Makefile
> + mkdir -p $(PKG_BUILD_DIR)
> + $(CP) ./src/* $(PKG_BUILD_DIR)/
> endef
>
> define Build/Configure
> - # nothing
> + # nothing
> endef
>
> define Build/Compile
> - # nothing
> + CFLAGS="$(TARGET_CFLAGS)" CPPFLAGS="$(TARGET_CPPFLAGS)" $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS)
> endef
>
> define Package/fff-random/install
> - $(CP) ./files/* $(1)/
> + $(INSTALL_DIR) $(1)/usr/bin
> + $(INSTALL_BIN) $(PKG_BUILD_DIR)/random $(1)/usr/bin/
> endef
>
> $(eval $(call BuildPackage,fff-random))
> diff --git a/src/packages/fff/fff-random/files/usr/bin/random b/src/packages/fff/fff-random/files/usr/bin/random
> deleted file mode 100755
> index 8f11470..0000000
> --- a/src/packages/fff/fff-random/files/usr/bin/random
> +++ /dev/null
> @@ -1,16 +0,0 @@
> -#!/bin/sh
> -# Freifunk Franken Random Number Script
> -# Tim Niemeyer
> -# 29.11.2015
> -# License GPLv2
> -
> -FROM=${1:-0}
> -UNTIL=${2:-100}
> -
> -diff=$(( UNTIL - FROM ))
> -numbers=$(( $(echo $diff | wc -c) -1 ))
> -
> -rand=$(</dev/urandom tr -dc 0-9 | head -c $numbers | sed -e 's/^0*//g')
> -
> -echo $(( (rand % diff) + FROM ))
> -
> diff --git a/src/packages/fff/fff-random/src/Makefile b/src/packages/fff/fff-random/src/Makefile
> new file mode 100644
> index 0000000..ab181d5
> --- /dev/null
> +++ b/src/packages/fff/fff-random/src/Makefile
> @@ -0,0 +1,4 @@
> +all: random
> +
> +random: random.c
> + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -Wall -o $@ $^ $(LDLIBS)
> diff --git a/src/packages/fff/fff-random/src/random.c b/src/packages/fff/fff-random/src/random.c
> new file mode 100644
> index 0000000..edfb41f
> --- /dev/null
> +++ b/src/packages/fff/fff-random/src/random.c
> @@ -0,0 +1,53 @@
> +/*
> + * Simple random tool, used to get a random value
> + * 2017-07-02
> + * Tim Niemeyer
> + * GPLv2
> + */
> +#include <stdio.h>
> +#include <stdlib.h>
> +
> +int main(int argc, char **argv)
> +{
> + int from = 0;
> + int to = 100;
> + int diff = 1;
> + FILE *f = 0;
> + unsigned int r = 0;
> +
> + if (argc != 1 && argc != 3)
> + {
> + printf("%s <from> <to>\n", argv[0]);
> + return -1;
> + }
> + else if (argc == 3)
> + {
> + from = atoi(argv[1]);
> + to = atoi(argv[2]);
> + }
> +
> + diff = to - from;
> + if (diff <= 0)
> + {
> + printf("Bad from/to\n");
> + return -1;
> + }
> +
> + f = fopen("/dev/urandom", "r");
> + if (!f)
> + {
> + printf("Can't open /dev/urandom\n");
> + return -1;
> + }
> +
> + if (1U != fread(&r, sizeof(unsigned int), 1U, f))
> + {
> + printf("Can't read /dev/urandom\n");
> + fclose(f);
> + return -1;
> + }
> +
> + printf("%u\n", (r % (diff +1 )) + from);
> + fclose(f);
> + return 0;
> +}
> --
> 2.1.4
>
> --
> franken-dev mailing list
> franken-dev at freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20170702/76f99e32/attachment.html>
Mehr Informationen über die Mailingliste franken-dev