git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: larsxschneider@gmail.com
To: git@vger.kernel.org
Cc: ramsay@ramsayjones.plus.com, jnareb@gmail.com, gitster@pobox.com,
	j6t@kdbg.org, tboegi@web.de, peff@peff.net, mlbright@gmail.com,
	Lars Schneider <larsxschneider@gmail.com>
Subject: [PATCH v9 07/14] pkt-line: add packet_write_fmt_gently()
Date: Tue,  4 Oct 2016 14:59:40 +0200	[thread overview]
Message-ID: <20161004125947.67104-8-larsxschneider@gmail.com> (raw)
In-Reply-To: <20161004125947.67104-1-larsxschneider@gmail.com>

From: Lars Schneider <larsxschneider@gmail.com>

packet_write_fmt() would die in case of a write error even though for
some callers an error would be acceptable. Add packet_write_fmt_gently()
which writes a formatted pkt-line like packet_write_fmt() but does not
die in case of an error. The function is used in a subsequent patch.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 pkt-line.c | 34 ++++++++++++++++++++++++++++++----
 pkt-line.h |  1 +
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/pkt-line.c b/pkt-line.c
index e8adc0f..56915f0 100644
--- a/pkt-line.c
+++ b/pkt-line.c
@@ -125,16 +125,42 @@ static void format_packet(struct strbuf *out, const char *fmt, va_list args)
 	packet_trace(out->buf + orig_len + 4, n - 4, 1);
 }
 
+static int packet_write_fmt_1(int fd, int gently,
+			      const char *fmt, va_list args)
+{
+	struct strbuf buf = STRBUF_INIT;
+	ssize_t count;
+
+	format_packet(&buf, fmt, args);
+	count = write_in_full(fd, buf.buf, buf.len);
+	if (count == buf.len)
+		return 0;
+
+	if (!gently) {
+		check_pipe(errno);
+		die_errno("packet write with format failed");
+	}
+	return error("packet write with format failed");
+}
+
 void packet_write_fmt(int fd, const char *fmt, ...)
 {
-	static struct strbuf buf = STRBUF_INIT;
 	va_list args;
 
-	strbuf_reset(&buf);
 	va_start(args, fmt);
-	format_packet(&buf, fmt, args);
+	packet_write_fmt_1(fd, 0, fmt, args);
+	va_end(args);
+}
+
+int packet_write_fmt_gently(int fd, const char *fmt, ...)
+{
+	int status;
+	va_list args;
+
+	va_start(args, fmt);
+	status = packet_write_fmt_1(fd, 1, fmt, args);
 	va_end(args);
-	write_or_die(fd, buf.buf, buf.len);
+	return status;
 }
 
 void packet_buf_write(struct strbuf *buf, const char *fmt, ...)
diff --git a/pkt-line.h b/pkt-line.h
index 1902fb3..3caea77 100644
--- a/pkt-line.h
+++ b/pkt-line.h
@@ -23,6 +23,7 @@ void packet_flush(int fd);
 void packet_write_fmt(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
 void packet_buf_flush(struct strbuf *buf);
 void packet_buf_write(struct strbuf *buf, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
+int packet_write_fmt_gently(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
 
 /*
  * Read a packetized line into the buffer, which must be at least size bytes
-- 
2.10.0


  parent reply	other threads:[~2016-10-04 13:00 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-04 12:59 [PATCH v9 00/14] Git filter protocol larsxschneider
2016-10-04 12:59 ` [PATCH v9 01/14] convert: quote filter names in error messages larsxschneider
2016-10-04 12:59 ` [PATCH v9 02/14] convert: modernize tests larsxschneider
2016-10-04 12:59 ` [PATCH v9 03/14] run-command: move check_pipe() from write_or_die to run_command larsxschneider
2016-10-04 12:59 ` [PATCH v9 04/14] run-command: add wait_on_exit larsxschneider
2016-10-04 19:30   ` Junio C Hamano
2016-10-05 20:57     ` Lars Schneider
2016-10-05 21:12       ` Junio C Hamano
2016-10-06  9:32         ` Johannes Schindelin
2016-10-06  9:35           ` Lars Schneider
2016-10-06 15:53           ` Junio C Hamano
2016-10-04 12:59 ` [PATCH v9 05/14] pkt-line: rename packet_write() to packet_write_fmt() larsxschneider
2016-10-04 12:59 ` [PATCH v9 06/14] pkt-line: extract set_packet_header() larsxschneider
2016-10-04 12:59 ` larsxschneider [this message]
2016-10-04 12:59 ` [PATCH v9 08/14] pkt-line: add packet_flush_gently() larsxschneider
2016-10-04 12:59 ` [PATCH v9 09/14] pkt-line: add packet_write_gently() larsxschneider
2016-10-04 19:33   ` Junio C Hamano
2016-10-05 19:06     ` Lars Schneider
2016-10-06 17:25       ` Junio C Hamano
2016-10-04 12:59 ` [PATCH v9 10/14] pkt-line: add functions to read/write flush terminated packet streams larsxschneider
2016-10-04 19:53   ` Junio C Hamano
2016-10-04 19:58     ` Junio C Hamano
2016-10-05 17:35     ` Lars Schneider
2016-10-04 12:59 ` [PATCH v9 11/14] convert: make apply_filter() adhere to standard Git error handling larsxschneider
2016-10-04 12:59 ` [PATCH v9 12/14] convert: prepare filter.<driver>.process option larsxschneider
2016-10-04 12:59 ` [PATCH v9 13/14] convert: add " larsxschneider
2016-10-04 12:59 ` [PATCH v9 14/14] contrib/long-running-filter: add long running filter example larsxschneider
2016-10-05 22:31 ` [PATCH v9 00/14] Git filter protocol Jakub Narębski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161004125947.67104-8-larsxschneider@gmail.com \
    --to=larsxschneider@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=jnareb@gmail.com \
    --cc=mlbright@gmail.com \
    --cc=peff@peff.net \
    --cc=ramsay@ramsayjones.plus.com \
    --cc=tboegi@web.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).