Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
close them damn file descriptors please!!!
  • Loading branch information
Gene Hallman committed Feb 22, 2013
1 parent 9afe4c7 commit 1261aed
Showing 1 changed file with 40 additions and 35 deletions.
75 changes: 40 additions & 35 deletions lib/ar.js
Expand Up @@ -19,42 +19,47 @@ var AR_HEADER_LENGTH = exports.AR_HEADER_LENGTH = 8;
var AR_FILE_HEADER_LENGTH = exports.AR_FILE_HEADER_LENGTH = 60;

exports.extractFile = function(ar_file, packed_file) {
var error = {};
error.status = "error";

var fullname = path.join(process.cwd(), ar_file);
var fd = fs.openSync(fullname, 'r');
if (!fd) {
error.message = "Failed to open " + fullname;
var extractor = function(fd) {
var error = {};
error.status = "error";

if (!fd) {
error.message = "Failed to open " + fullname;
return error;
}
var buffer_header = new Buffer(AR_FILE_HEADER_LENGTH);

var readLen = fs.readSync(fd, buffer_header, 0, AR_HEADER_LENGTH, 0); // read header "!<arch>\n"

if (buffer_header.toString('utf8', 0, readLen) != AR_HEADER) {
error.message = "Missing file header";
return error;
}
var offset = AR_HEADER_LENGTH;
while (true) {
fs.readSync(fd, buffer_header, 0, AR_FILE_HEADER_LENGTH, offset);

var fileheader = buffer_header.toString();
var filename = fileheader.substr(0, 16).trim() // see header for magic numbers
var filesize = parseInt(fileheader.substr(48, 10).trim()); // see header for magic numbers

offset = offset + AR_FILE_HEADER_LENGTH;

if (filename == packed_file) {
var buffer_data = new Buffer(filesize);
fs.readSync(fd, buffer_data, 0, filesize, offset);
return buffer_data;
}
offset = offset + filesize;
}
error.message = "Packed file not found";
return error;
}

var buffer_header = new Buffer(AR_FILE_HEADER_LENGTH);

var readLen = fs.readSync(fd, buffer_header, 0, AR_HEADER_LENGTH, 0); // read header "!<arch>\n"
};

if (buffer_header.toString('utf8', 0, readLen) != AR_HEADER) {
error.message = "Missing file header";
return error;
}
var offset = AR_HEADER_LENGTH;
while (true) {
fs.readSync(fd, buffer_header, 0, AR_FILE_HEADER_LENGTH, offset);

var fileheader = buffer_header.toString();
var filename = fileheader.substr(0, 16).trim() // see header for magic numbers
var filesize = parseInt(fileheader.substr(48, 10).trim()); // see header for magic numbers

offset = offset + AR_FILE_HEADER_LENGTH;

if (filename == packed_file) {
var buffer_data = new Buffer(filesize);
fs.readSync(fd, buffer_data, 0, filesize, offset);
return buffer_data;
}
offset = offset + filesize;
}
error.message = "Packed file not found";
return error;

var fullname = path.join(process.cwd(), ar_file);
var fd = fs.openSync(fullname, 'r');
var result = extractor(fd);
fs.closeSync(fd);
return result;
};

0 comments on commit 1261aed

Please sign in to comment.