[dovecot-cvs] dovecot/src/lib-storage/subscription-file subscription-file.c,1.21,1.22

cras at procontrol.fi cras at procontrol.fi
Thu Nov 20 18:20:57 EET 2003


Update of /home/cvs/dovecot/src/lib-storage/subscription-file
In directory danu:/tmp/cvs-serv10798/lib-storage/subscription-file

Modified Files:
	subscription-file.c 
Log Message:
Bugfixes



Index: subscription-file.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/subscription-file/subscription-file.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- subscription-file.c	20 Oct 2003 05:01:58 -0000	1.21
+++ subscription-file.c	20 Nov 2003 16:20:55 -0000	1.22
@@ -47,10 +47,13 @@
 {
 	const char *line;
 
+	*failed = FALSE;
+	if (input == NULL)
+		return NULL;
+
 	while ((line = i_stream_next_line(input)) == NULL) {
 		switch (i_stream_read(input)) {
 		case -1:
-			*failed = FALSE;
 			return NULL;
 		case -2:
 			/* mailbox name too large */
@@ -63,7 +66,6 @@
 		}
 	}
 
-	*failed = FALSE;
 	return line;
 }
 
@@ -104,7 +106,8 @@
 		return FALSE;
 	}
 
-	input = i_stream_create_file(fd_in, default_pool,
+	input = fd_in == -1 ? NULL :
+		i_stream_create_file(fd_in, default_pool,
 				     MAX_MAILBOX_LENGTH, TRUE);
 	output = o_stream_create_file(fd_out, default_pool,
 				      MAX_MAILBOX_LENGTH, FALSE);
@@ -112,16 +115,16 @@
 	while ((line = next_line(storage, path, input, &failed)) != NULL) {
 		if (strcmp(line, name) == 0) {
 			found = TRUE;
-			if (set)
-				break;
-		} else {
-			if (o_stream_send_str(output, line) < 0 ||
-			    o_stream_send(output, "\n", 1) < 0) {
-				subsfile_set_syscall_error(storage, "write()",
-							   path);
-				failed = TRUE;
-				break;
-			}
+			if (!set)
+				continue;
+		}
+
+		if (o_stream_send_str(output, line) < 0 ||
+		    o_stream_send(output, "\n", 1) < 0) {
+			subsfile_set_syscall_error(storage, "write()",
+						   path);
+			failed = TRUE;
+			break;
 		}
 	}
 
@@ -134,7 +137,8 @@
 		}
 	}
 
-	i_stream_unref(input);
+	if (input != NULL)
+		i_stream_unref(input);
 	o_stream_unref(output);
 
 	if (failed || (set && found) || (!set && !found)) {



More information about the dovecot-cvs mailing list