[PATCH v3] fff-random: rewrite in C

Tim Niemeyer tim at tn-x.org
So Jul 9 12:31:30 CEST 2017


Fixes: #51

Signed-off-by: Tim Niemeyer <tim at 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

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..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;
+}
-- 
2.1.4



Mehr Informationen über die Mailingliste franken-dev