Fix memory problems, and make behavior correct.
diff --git a/findutils/xargs.c b/findutils/xargs.c
index 24daf50..bf68cf7 100644
--- a/findutils/xargs.c
+++ b/findutils/xargs.c
@@ -78,13 +78,16 @@
 	/* Now, read in one line at a time from stdin, and run command+args on it */
 	in_from_stdin = get_line_from_file(stdin);
 	for (;in_from_stdin!=NULL;) {
+		char *tmp;
 		len = strlen(in_from_stdin) + len_args_from_cmdline;
-		if ( len > len_cmd_to_be_executed ) {
-			len_cmd_to_be_executed=len+3;
-			cmd_to_be_executed=xrealloc(cmd_to_be_executed, len_cmd_to_be_executed);
-		}
+		len_cmd_to_be_executed+=len+3;
+		cmd_to_be_executed=xrealloc(cmd_to_be_executed, len_cmd_to_be_executed);
+
+		/* Strip out any \n's, so we just get one command to run */
+		while( (tmp = strchr(in_from_stdin, '\n')) != NULL )
+			*tmp=' ';
+
 		strcat(cmd_to_be_executed, in_from_stdin);
-		strcat(cmd_to_be_executed+strlen(cmd_to_be_executed)-2, " ");
 		strcat(cmd_to_be_executed, " ");
 	
 		free(in_from_stdin);
diff --git a/xargs.c b/xargs.c
index 24daf50..bf68cf7 100644
--- a/xargs.c
+++ b/xargs.c
@@ -78,13 +78,16 @@
 	/* Now, read in one line at a time from stdin, and run command+args on it */
 	in_from_stdin = get_line_from_file(stdin);
 	for (;in_from_stdin!=NULL;) {
+		char *tmp;
 		len = strlen(in_from_stdin) + len_args_from_cmdline;
-		if ( len > len_cmd_to_be_executed ) {
-			len_cmd_to_be_executed=len+3;
-			cmd_to_be_executed=xrealloc(cmd_to_be_executed, len_cmd_to_be_executed);
-		}
+		len_cmd_to_be_executed+=len+3;
+		cmd_to_be_executed=xrealloc(cmd_to_be_executed, len_cmd_to_be_executed);
+
+		/* Strip out any \n's, so we just get one command to run */
+		while( (tmp = strchr(in_from_stdin, '\n')) != NULL )
+			*tmp=' ';
+
 		strcat(cmd_to_be_executed, in_from_stdin);
-		strcat(cmd_to_be_executed+strlen(cmd_to_be_executed)-2, " ");
 		strcat(cmd_to_be_executed, " ");
 	
 		free(in_from_stdin);