Advertisement
Guest User

Untitled

a guest
Aug 13th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.   'cat': function (tokens, pipes, exit) {
  2.     var out = new view.bridge(pipes.viewOut);
  3.     var chunkSize = 4096;
  4.  
  5.     // "cat <file> [file ...]" syntax.
  6.     if (tokens.length < 2) {
  7.       out.print('Usage: cat <file> [file] ...');
  8.       return exit(false);
  9.     }
  10.     if (tokens.length > 2) {
  11.       out.print('Multiple input files not supported yet.');
  12.       return exit(false);
  13.     }
  14.    
  15.     var errors = 0,
  16.         track = whenDone(function () {
  17.           exit(errors == 0);
  18.         });
  19.    
  20.     for (i in tokens) if (i > 0) (function (file) {
  21.       fs.stat(file, track(function (err, stats) {
  22.         if (err) {
  23.           errors++;
  24.           out.print("No such file (" + file + ")");
  25.           return;
  26.         }
  27.         fs.open(file, 'r', track(function (err, fd) {
  28.           if (err) {
  29.             errors++;
  30.             out.print("Unable to open file (" + file + ")");
  31.             return;
  32.           }
  33.          
  34.           var position = 0, buffer = new Buffer(chunkSize);
  35.  
  36.           (function read() {
  37.             fs.read(fd, buffer, 0, chunkSize, position, track(function (err, bytesRead) {
  38.               if (err) {
  39.                 errors++;
  40.                 out.print("Error reading file (" + file + ")");
  41.                 return;
  42.               }
  43.  
  44.               if (position == 0) {
  45.                 var headers = new meta.headers();
  46.                 headers.set({
  47.                   'Content-Type': meta.sniff(file, buffer),
  48.                   'Content-Length': stats.size,
  49.                   'Content-Disposition': [
  50.                     [ 'attachment' ],
  51.                     [ 'filename', file ],
  52.                   ],
  53.                 });
  54.  
  55.                 pipes.dataOut.write(headers.generate());
  56.               }
  57.  
  58.               pipes.dataOut.write(buffer.slice(0, bytesRead));
  59.               position += bytesRead;
  60.  
  61.               if (position < stats.size) {
  62.                 read();
  63.               }
  64.             }));
  65.           })();
  66.         }));
  67.       }));
  68.     })(tokens[i]);
  69.    
  70.    
  71.   },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement