From: Stefan Sperling Subject: Re: diff: Add api for consumers to check if diff is printable To: Tom Jones Cc: gameoftrees@openbsd.org Date: Thu, 29 Sep 2022 11:31:12 +0200 On Thu, Sep 29, 2022 at 10:17:52AM +0100, Tom Jones wrote: > Programs using the libdiff api they can need to know if the diff > contained anything that would be printed, or would be empty. > > Expose the same check that the outputs do as a function call. > > - Tom I would prefer a name such as diff_result_contains_printable_chunks() to make it more obvious that this interface implements a boolean check. > diff --git a/include/diff_main.h b/include/diff_main.h > index 5e816ae..7b6d039 100644 > --- a/include/diff_main.h > +++ b/include/diff_main.h > @@ -251,3 +251,4 @@ struct diff_result *diff_main(const struct diff_config *config, > struct diff_data *left, > struct diff_data *right); > void diff_result_free(struct diff_result *result); > +int diff_printable_chunks(struct diff_result *result); > diff --git a/lib/diff_main.c b/lib/diff_main.c > index c531ad2..3043a9d 100644 > --- a/lib/diff_main.c > +++ b/lib/diff_main.c > @@ -628,3 +628,19 @@ diff_result_free(struct diff_result *result) > ARRAYLIST_FREE(result->chunks); > free(result); > } > + > +int > +diff_printable_chunks(struct diff_result *result) > +{ > + struct diff_chunk *c; > + enum diff_chunk_type t; > + > + for (int i = 0; i < result->chunks.len; i++) { > + c = &result->chunks.head[i]; > + t = diff_chunk_type(c); > + if (t == CHUNK_MINUS || t == CHUNK_PLUS) > + return 1; > + } > + > + return 0; > +}