t / helper / test-genrandom.con commit Merge branch 'dl/warn-tagging-a-tag' (1294160)
   1/*
   2 * Simple random data generator used to create reproducible test files.
   3 * This is inspired from POSIX.1-2001 implementation example for rand().
   4 * Copyright (C) 2007 by Nicolas Pitre, licensed under the GPL version 2.
   5 */
   6
   7#include "test-tool.h"
   8#include "git-compat-util.h"
   9
  10int cmd__genrandom(int argc, const char **argv)
  11{
  12        unsigned long count, next = 0;
  13        unsigned char *c;
  14
  15        if (argc < 2 || argc > 3) {
  16                fprintf(stderr, "usage: %s <seed_string> [<size>]\n", argv[0]);
  17                return 1;
  18        }
  19
  20        c = (unsigned char *) argv[1];
  21        do {
  22                next = next * 11 + *c;
  23        } while (*c++);
  24
  25        count = (argc == 3) ? strtoul(argv[2], NULL, 0) : -1L;
  26
  27        while (count--) {
  28                next = next * 1103515245 + 12345;
  29                if (putchar((next >> 16) & 0xff) == EOF)
  30                        return -1;
  31        }
  32
  33        return 0;
  34}