[v3] fff-random: rewrite in C

Submitted by Tim Niemeyer on July 9, 2017, 10:31 a.m.

Details

Message ID 1499596290-28692-1-git-send-email-tim@tn-x.org
State Accepted
Headers show

Commit Message

Tim Niemeyer July 9, 2017, 10:31 a.m.
Fixes: #51

Signed-off-by: Tim Niemeyer <tim@tn-x.org>
---

Changes in v3:
- print on stderr on advice or error

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

Patch hide | download patch | download mbox

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:=+@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..5d38d16
--- /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)
+        {
+                fprintf(stderr, "%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)
+        {
+                fprintf(stderr, "Bad from/to\n");
+                return -1;
+        }
+
+        f = fopen("/dev/urandom", "r");
+        if (!f)
+        {
+                fprintf(stderr, "Can't open /dev/urandom\n");
+                return -1;
+        }
+
+        if (1U != fread(&r, sizeof(unsigned int), 1U, f))
+        {
+                fprintf(stderr, "Can't read /dev/urandom\n");
+                fclose(f);
+                return -1;
+        }
+
+        printf("%u\n", (r % (diff +1 )) + from);
+        fclose(f);
+        return 0;
+}

Comments

Tobias Klaus July 31, 2017, 10:12 p.m.
Hallo,

Am Sonntag, 9. Juli 2017, 12:31:30 CEST schrieb Tim Niemeyer:
> Fixes: #51
> 
> Signed-off-by: Tim Niemeyer <tim@tn-x.org>
> ---
> +/*
> + * 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)
> +        {
> +                fprintf(stderr, "%s <from> <to>\n", argv[0]);
> +                return -1;
> +        }
> +        else if (argc == 3)
> +        {
> +                from = atoi(argv[1]);
> +                to = atoi(argv[2]);
so wie wir das Programm gerade verwenden, ist das es nicht besonders wichtig 
aber ich würde die Parameter mit strtol in int konvertieren, damit kann man 
Fehler erkennen und wir könnten bei falschen Parametern eine entsprechende 
Fehlermeldung ausgeben.

VG Tobias
Adrian Schmutzler Sept. 17, 2017, 2:33 p.m.
Hallo,

läuft seit zwei Wochen auf ca. 60 Geräten.

Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of Tobias Klaus
> Sent: Dienstag, 1. August 2017 00:12
> To: franken-dev@freifunk.net; Tim Niemeyer <tim@tn-x.org>
> Subject: Re: [PATCH v3] fff-random: rewrite in C
> 
> Hallo,
> 
> Am Sonntag, 9. Juli 2017, 12:31:30 CEST schrieb Tim Niemeyer:
> > Fixes: #51
> >
> > Signed-off-by: Tim Niemeyer <tim@tn-x.org>
> > ---
> > +/*
> > + * 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)
> > +        {
> > +                fprintf(stderr, "%s <from> <to>\n", argv[0]);
> > +                return -1;
> > +        }
> > +        else if (argc == 3)
> > +        {
> > +                from = atoi(argv[1]);
> > +                to = atoi(argv[2]);
> so wie wir das Programm gerade verwenden, ist das es nicht besonders
> wichtig aber ich würde die Parameter mit strtol in int konvertieren, damit
> kann man Fehler erkennen und wir könnten bei falschen Parametern eine
> entsprechende Fehlermeldung ausgeben.
> 
> VG Tobias
> --
> franken-dev mailing list
> franken-dev@freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Tim Niemeyer Sept. 17, 2017, 2:40 p.m.
Hi

Am Sonntag, den 17.09.2017, 16:33 +0200 schrieb
mail@adrianschmutzler.de:
> Hallo,
> 
> läuft seit zwei Wochen auf ca. 60 Geräten.
> 
> Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Yay, cool.

Und applied.

[..]

> > > +                from = atoi(argv[1]);
> > > +                to = atoi(argv[2]);
> > 
> > so wie wir das Programm gerade verwenden, ist das es nicht
> > besonders
> > wichtig aber ich würde die Parameter mit strtol in int
> > konvertieren, damit
> > kann man Fehler erkennen und wir könnten bei falschen Parametern
> > eine
> > entsprechende Fehlermeldung ausgeben.
Hast schon Recht, wäre schön. Aber ich hab grad wenig Zeit. Vielleicht
demnächst mal n Patch drauf kippen. Damit es nicht untergeht habe ich
ein Ticket angelegt: #57

Tim


> > VG Tobias
> > --
> > franken-dev mailing list
> > franken-dev@freifunk.net
> > http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
> 
>