diff -r a4180acaa5a8 wrap.c
--- a/wrap.c	Mon Aug 09 12:32:56 2010 +0100
+++ b/wrap.c	Mon Aug 09 12:34:01 2010 +0100
@@ -38,8 +38,15 @@
 		if(*argv[1] != 'r')
 			break;
 	case 'c':
-		for(i = 2; i < argc; i++)
-			append(argv[i]);
+		if(argc > 2)
+			for(i = 2; i < argc; i++)
+				append(argv[i]);
+		else
+			while(fgets(buf, sizeof buf, stdin)) {
+				if(buf[strlen(buf)-1] == '\n')
+					buf[strlen(buf)-1] = '\0';
+				append(buf);
+			}
 		break;
 	case 't':
 		while(fread(&ent, sizeof ent, 1, stdin)) {
@@ -64,6 +71,10 @@
 	struct stat st;
 	FILE *fp;
 
+	if(strlen(path) > sizeof ent.path - 1) {
+		errno = ENAMETOOLONG;
+		fatal(path);
+	}
 	if(stat(path, &st) < 0)
 		fatal(path);
 	if(!(fp = fopen(path, "r")))
