bitgen.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/env node
  2. var seedrandom = require('../seedrandom');
  3. // process.on('SIGPIPE', process.exit);
  4. function epipeBomb(stream, callback) {
  5. if (stream == null) stream = process.stdout;
  6. if (callback == null) callback = process.exit;
  7. function epipeFilter(err) {
  8. if (err.code === 'EPIPE') return callback();
  9. // If there's more than one error handler (ie, us),
  10. // then the error won't be bubbled up anyway
  11. if (stream.listeners('error').length <= 1) {
  12. stream.removeAllListeners(); // Pretend we were never here
  13. stream.emit('error', err); // Then emit as if we were never here
  14. stream.on('error', epipeFilter);// Reattach, ready for the next error!
  15. }
  16. }
  17. stream.on('error', epipeFilter);
  18. }
  19. epipeBomb();
  20. var bufsize = 1024 * 256,
  21. buf = new Buffer(bufsize * 4),
  22. prng = seedrandom(0),
  23. count = parseInt(process.argv[2]) || Infinity;
  24. function dowrite() {
  25. while (count > 0) {
  26. for (var j = 0; j < bufsize; ++j) {
  27. buf.writeUInt32BE(Math.floor(
  28. prng() * 256 * 256 * 256 * 256
  29. ), j * 4);
  30. }
  31. count -= bufsize * 32;
  32. if (!process.stdout.write(buf)) {
  33. process.stdout.once('drain', function() { setTimeout(dowrite, 0) });
  34. return;
  35. }
  36. }
  37. }
  38. dowrite();