The unified diff between revisions [43bb367e..] and [adff2b70..] is displayed below. It can also be downloaded as a raw diff.

This diff has been restricted to the following files: 'src/lsi/cmdsocket.c'

#
# old_revision [43bb367e69d2a944206fd7f641ce73111e4bb780]
# new_revision [adff2b70cc1870df9f9b4d736b855dffae74eca2]
#
# patch "src/lsi/cmdsocket.c"
#  from [855bbabd21448d3ac37ff460a412a951df7d226a]
#    to [cd7a18effae96a82e01bc4931fca5a77fdfdbcdb]
#
============================================================
--- src/lsi/cmdsocket.c	855bbabd21448d3ac37ff460a412a951df7d226a
+++ src/lsi/cmdsocket.c	cd7a18effae96a82e01bc4931fca5a77fdfdbcdb
@@ -117,7 +117,7 @@ int cmdsocket_accept(void) {
 	}
 
 	cmd_active = c;
-	write(cmd_active, CMDSOCKET_BANNER, sizeof(CMDSOCKET_BANNER));
+	write(cmd_active, CMDSOCKET_BANNER, sizeof(CMDSOCKET_BANNER)-1);
 
 	vm_register_signal_fd(cmd_active, VM_CMDREADQ);
 	vm_wakeup(VM_CMDREADQ);
@@ -130,8 +130,8 @@ void cmd_parse(char *cmd) {
 	char function[CMD_MAXSIZE + PREFIX_MAXSIZE];
 
 	*strchr(cmd, '\n') = '\0';
-	printf("DEBUG: Received command: %s\n", cmd);
-	fflush(stdout);
+//	printf("DEBUG: Received command: %s\n", cmd);
+//	fflush(stdout);
 
 	sp = strtok(cmd, " \t\r");
 	sp = strtok(NULL, " \t\r");
@@ -143,10 +143,10 @@ void cmd_parse(char *cmd) {
 	strcpy(function, cmd_prefix);
 	strncat(function, cmd, CMD_MAXSIZE);
 
-	printf("DEBUG: function: %s, arg %d\n", function, arg);
-	fflush(stdout);
+//	printf("DEBUG: function: %s, arg %d\n", function, arg);
+//	fflush(stdout);
 	if (vm_spawn_args(function, 1, arg)) {
-		/* Write an ack here, once a proper function exists */
+		/* The ack gets sent by the script */
 	} else {
 		/* Write an error, if it's possible. Don't worry about
 		   missing characters and buffering for now, but we
@@ -154,7 +154,7 @@ void cmd_parse(char *cmd) {
 		write(cmd_active, "ERROR\n", strlen("ERROR\n"));
 	}
 
-	printf("Received command: %s\n", cmd);
+//	printf("Received command: %s\n", cmd);
 }
 
 int cmdsocket_read(void)
@@ -202,3 +202,31 @@ int cmdsocket_read(void)
 		}
 	}
 }
+
+/*
+ * Returns offset to restart at. If off == len, then we have finished.
+ * If the return value is the same as off passed in, then the caller
+ * should sleep.
+ */
+int cmdsocket_write(char *buffer, int len, int off)
+{
+//	printf("cmdsocket_write called with %p, %d, %d\n", buffer, len, off);
+	if (!cmdsocket_initialised)
+		return 0;
+	if (!cmd_active)
+		return 0;
+
+	while (off < len) {
+		int r;
+		r = write(cmd_active, buffer + off, len - off);
+		if (r == -1) {
+			if (errno == EAGAIN)
+				return off;
+			warn("error writing packet");
+		}
+		if (r == 0)
+			return off;
+		off += r;
+	}
+	return off;
+}