aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-08-22 20:09:13 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-08-22 20:09:13 +0200
commit65c411dcb3fd33122cbc314ca5b2a94542bc1e87 (patch)
treec329b4eeaf67f08ddc8030e0cc9eefb4a57801ae
parentc40f79737a4ce6ae0cd8bd6ea7f302217333e486 (diff)
downloadcoreutils-65c411dcb3fd33122cbc314ca5b2a94542bc1e87.tar.gz
coreutils-65c411dcb3fd33122cbc314ca5b2a94542bc1e87.tar.bz2
coreutils-65c411dcb3fd33122cbc314ca5b2a94542bc1e87.zip
Added shuf with trand
-rw-r--r--.gitmodules3
-rw-r--r--Makefile10
-rw-r--r--src/shuf.c8
m---------trand0
4 files changed, 20 insertions, 1 deletions
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..e5ead97
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "trand"]
+ path = trand
+ url = https://github.com/SaltyMilk/trand
diff --git a/Makefile b/Makefile
index edb7787..450a5f4 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,8 @@ CCFLAGS = -Wall -Wextra -Wpedantic
all: prebuild $(BINDIR)/basename $(BINDIR)/chown $(BINDIR)/cut $(BINDIR)/head \
$(BINDIR)/mkdir $(BINDIR)/mv $(BINDIR)/rm $(BINDIR)/seq \
- $(BINDIR)/shuf $(BINDIR)/tee $(BINDIR)/tr
+ $(BINDIR)/shuf $(BINDIR)/tee $(BINDIR)/tr \
+ $(BINDIR)/shuf_trand
prebuild:
mkdir -vp $(BINDIR)
@@ -44,6 +45,13 @@ $(BINDIR)/tee: $(SRCDIR)/tee.c
$(BINDIR)/tr: $(SRCDIR)/tr.c
$(CC) $(CCFLAGS) -o $@ $^
+#### shuf using trand
+TRAND_PATH = trand
+
+$(BINDIR)/shuf_trand: $(SRCDIR)/shuf.c
+ make --no-print-directory -C $(TRAND_PATH)
+ $(CC) $(CCFLAGS) -o $@ $^ -DUSE_TRAND -I$(TRAND_PATH) -L$(TRAND_PATH) -ltrand -lpthread
+
clean:
rm -vf $(BINDIR)/*
diff --git a/src/shuf.c b/src/shuf.c
index 5b4808a..e97f1f0 100644
--- a/src/shuf.c
+++ b/src/shuf.c
@@ -8,6 +8,10 @@
#include <errno.h>
#include <limits.h>
+#ifdef USE_TRAND
+# include "trand.h"
+#endif
+
#define NUMBER_LEN(x) strlen(#x);
static char *g_name = "shuf";
@@ -192,7 +196,11 @@ int main(int argc, char **argv)
}
for (size_t i = lines.len - 1; i > 0; i--)
{
+#ifndef USE_TRAND
size_t j = rand() % i;
+#else
+ size_t j = trand() % i;
+#endif
char *tmp = lines.data[i];
lines.data[i] = lines.data[j];
lines.data[j] = tmp;
diff --git a/trand b/trand
new file mode 160000
+Subproject 583ad1cbe5d1ad9c0a64bbf8180aec21a68463e