chiark / gitweb /
log copy feature - not yet tested
authorian <ian>
Sun, 4 May 2008 16:00:03 +0000 (16:00 +0000)
committerian <ian>
Sun, 4 May 2008 16:00:03 +0000 (16:00 +0000)
hostside/daemons.h
hostside/obc.c
hostside/realtime.c
hostside/simulate.c

index d0878e637388a5f6d40feced62499bb418b1e879..daea2353e2661eef1eacf2eeb35ea2ab5d854870 100644 (file)
@@ -26,6 +26,7 @@ struct OutBufferChain {
   /* set by user: */
   char *desc;
   int fd;
+  FILE *logcopy;
   int limit; /* 0 means obc_init will set a default */
   OutBufferError *error;
   /* set/used by obc_..., oprintf, etc., only */
index e572b5ac6d8437783eb078d9e1b4cd95a31a6a97..91d8321e4b71680ba81b70b962ada6c38b66dd67 100644 (file)
@@ -59,6 +59,14 @@ static void *writeable(oop_source *evts, int fd,
 }
 
 static void addlink(OutBufferChain *ch, OutBuffer *ob) {
+  if (ch->logcopy) {
+    size_t r;
+    r= fwrite(ob->m,1,ob->l,ch->logcopy);
+    if (r!=ob->l) {
+      assert(ferror(ch->logcopy));
+      ch->error(ch,"write log",strerror(errno));
+    }
+  }
   if (!ch->obs.head)
     events->on_fd(events, ch->fd, OOP_WRITE, writeable, ch);
   LIST_LINK_TAIL(ch->obs, ob);
index f9bf1e70d004ec538f49d5d05278e40237af39ae..7acd98247f99a00a85fb1b79773fad34ab223057 100644 (file)
@@ -12,6 +12,7 @@ CommandInput cmdi;
 int picio_send_noise= 1;
 
 static const char *device= "/dev/ttya0";
+static const char *logcopy_fn= "realtime.log";
 
 /*---------- general event handling ----------*/
 
@@ -343,6 +344,7 @@ int main(int argc, const char **argv) {
     case 's': device= arg; break;
     case 'p': persist_fn= arg; break;
     case 'v': picio_send_noise= atoi(arg); break;
+    case 'L': logcopy_fn= arg; break;
     case 'S': simulate= arg; break;
     default: badusage("unknown option");
     }
@@ -353,13 +355,15 @@ int main(int argc, const char **argv) {
   cmdi.out.error= obc_error;
   cmdi.doline= command_doline;
 
-  persist_entrails_interpret();
-  records_parse(argv);
-
   if (!simulate) {
     sys_events= oop_sys_new();  if (!sys_events) diee("oop_sys_new");
     events= oop_sys_source(sys_events);  massert(events);
 
+    if (logcopy_fn[0] && strcmp(logcopy_fn,"-")) {
+      cmdi.out.logcopy= fopen(logcopy_fn,"w");
+      if (!cmdi.out.logcopy) diee("open log copy %s",logcopy_fn);
+    }
+
     cmdin_new(&cmdi, 0);
 
     serial_open(device);
@@ -373,6 +377,8 @@ int main(int argc, const char **argv) {
     sys_events= 0;
   }
 
+  persist_entrails_interpret();
+  records_parse(argv);
   sta_startup();
 
   if (!simulate) oop_sys_run(sys_events);
index 8123e9eba1614c8ca27e6bb45e1fb231419503c6..5a58601c83e7e209ed15d03faf632db5ba5a3d8c 100644 (file)
@@ -163,6 +163,7 @@ static void se_eof(void) {
 /*---------- core ----------*/
 
 void sim_initialise(void) {
+  cmdi.out.logcopy= 0;
   obc_init_core(&cmdi.out);
   serial_fd= open("/dev/null",O_WRONLY);
   if (serial_fd<0) diee("open /dev/null for dummy serial");