[PATCH] fff-random: rewrite in C

Peter J. Philipp pjp at centroid.eu
So Jul 2 19:13:02 CEST 2017


Hallo,

kleine verbesserung (hoffe ich)… um negative Nummern zu vermeiden habe ich den %d in ein %u umgedreht und um etwas sauber zu sein auch ein fclose() gemacht:

--- timsrandom.c.orig	2017-07-02 19:04:10.000000000 +0200
+++ timsrandom.c	2017-07-02 19:04:39.000000000 +0200
@@ -40,7 +40,9 @@
                 return -1;
         }
 
-        printf("%d\n", (r % (diff +1 )) + from);
+	fclose(f);
+
+        printf("%u\n", (r % (diff +1 )) + from);
 
         return 0;
 }


so etwas in der richtung.  Denn wenn man diese nummern gibt wird es negativ:

spica:Documents pjp$ ./timsrandom 2147483648 2147483649
-2147483648

mit dem patch sieht es so aus:

spica:Documents pjp$ cc -g -o timsrandom timsrandom.c
spica:Documents pjp$ ./timsrandom 2147483648 2147483649
2147483649

entschuldige bitte die etwas schlampigkeit von mir ich bin nicht in meiner komfortzone da ich auf dem wochenende macbook bin.

Grüße,

-peter

> Am 02.07.2017 um 17:40 schrieb Tim Niemeyer <tim at tn-x.org>:
> 
> Fixes: #51
> 
> Signed-off-by: Tim Niemeyer <tim at tn-x.org>
> ---
> 
> 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         | 52 ++++++++++++++++++++++++
> 4 files changed, 70 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..85dc57d
> --- /dev/null
> +++ b/src/packages/fff/fff-random/src/random.c
> @@ -0,0 +1,52 @@
> +/*
> + * 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");
> +                return -1;
> +        }
> +
> +        printf("%d\n", (r % (diff +1 )) + from);
> +
> +        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/1ed6a919/attachment.html>


Mehr Informationen über die Mailingliste franken-dev