summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2013-04-01 14:38:05 +0200
committerClifford Wolf <clifford@clifford.at>2013-04-01 14:38:05 +0200
commit5919bf5525f91231210d79bb04ca46e70c7b4d8d (patch)
tree2b11cff508385c49b95b3877bc07a278843222ca
parent3ec9fa40486401814c6e3a7fd4b2b1b8fb3403b8 (diff)
Removed 4096 bytes limit for size of command from script file
-rw-r--r--kernel/driver.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/kernel/driver.cc b/kernel/driver.cc
index 8374afa7..a397a16c 100644
--- a/kernel/driver.cc
+++ b/kernel/driver.cc
@@ -28,6 +28,19 @@
#include "kernel/register.h"
#include "kernel/log.h"
+bool fgetline(FILE *f, std::string &buffer)
+{
+ buffer = "";
+ char block[4096];
+ while (1) {
+ if (fgets(block, 4096, f) == NULL)
+ return false;
+ buffer += block;
+ if (buffer.size() > 0 && (buffer[buffer.size()-1] == '\n' || buffer[buffer.size()-1] == '\r'))
+ return true;
+ }
+}
+
static void run_frontend(std::string filename, std::string command, RTLIL::Design *design, std::string *backend_command)
{
if (command == "auto") {
@@ -50,9 +63,13 @@ static void run_frontend(std::string filename, std::string command, RTLIL::Desig
f = fopen(filename.c_str(), "r");
if (f == NULL)
log_error("Can't open script file `%s' for reading: %s\n", filename.c_str(), strerror(errno));
- char buffer[4096];
- while (fgets(buffer, 4096, f) != NULL) {
- Pass::call(design, buffer);
+ std::string command;
+ while (fgetline(f, command)) {
+ Pass::call(design, command);
+ design->check();
+ }
+ if (!command.empty()) {
+ Pass::call(design, command);
design->check();
}
if (filename != "-")