summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonovan Baarda <abo@minkirri.apana.org.au>2023-02-19 15:48:35 +1100
committerGitHub <noreply@github.com>2023-02-19 15:48:35 +1100
commitec0c93b996e2a8b16c690f19284025b0b4451d00 (patch)
treee110ceb7464fa5ee21242a0657edf7b21891d7eb
parentecd56fe5a8e873f3c552b8496c7c267744b4e649 (diff)
downloadlibrsync-ec0c93b996e2a8b16c690f19284025b0b4451d00.tar.gz
Fix #248 by putting `#include "config.h"` in most src/*.c files. (#249)
* Fix #248 by putting `#include "config.h"` in all src/*.c files. The iwyu tool doesn't handle `config.h` files well, and these includes were incorrectly removed, which breaks things on some platforms. Add them back to most `src/*.c` files with `/* IWYU pragma: keep */` to make iwyu ignore them. We skip `src/hashtable.c` because it is a standalone tool that is platform independent. Also add `/* IWYU pragma: keep */` to includes in `src/fileutil.c` that are needed on some platforms but not others. This means we can remove the special exemptions to skip this file for the `iwyu` and `iwyu-fix` targets in `CMakeLists.txt`. Add some explicit typecasts to `rollsum.[ch]` and `patch.c` to silence warnings on windows. Update NEWS.md for `config.h` include fixes and added typecasts.
-rw-r--r--CMakeLists.txt7
-rw-r--r--NEWS.md10
-rw-r--r--src/base64.c1
-rw-r--r--src/buf.c1
-rw-r--r--src/checksum.c1
-rw-r--r--src/command.c1
-rw-r--r--src/delta.c1
-rw-r--r--src/emit.c1
-rw-r--r--src/fileutil.c17
-rw-r--r--src/hex.c1
-rw-r--r--src/isprefix.c1
-rw-r--r--src/job.c1
-rw-r--r--src/mdfour.c1
-rw-r--r--src/mksum.c1
-rw-r--r--src/msg.c1
-rw-r--r--src/netint.c1
-rw-r--r--src/patch.c5
-rw-r--r--src/prototab.c1
-rw-r--r--src/rabinkarp.c1
-rw-r--r--src/rdiff.c2
-rw-r--r--src/readsums.c1
-rw-r--r--src/rollsum.c5
-rw-r--r--src/rollsum.h4
-rw-r--r--src/scoop.c1
-rw-r--r--src/stats.c1
-rw-r--r--src/sumset.c1
-rw-r--r--src/trace.c2
-rw-r--r--src/tube.c1
-rw-r--r--src/util.c1
-rw-r--r--src/version.c2
-rw-r--r--src/whole.c1
31 files changed, 55 insertions, 21 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f00c427..c9861d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -260,18 +260,17 @@ add_custom_target(clang-tidy
)
# iwyu target to check includes for correctness.
-# Note we ignore noisy "note:" output and exclude fileutil.c output.
+# Note we ignore noisy "note:" output.
add_custom_target(iwyu
COMMENT "Check #includes for correctness using iwyu_tool."
- COMMAND ! iwyu_tool -p ${CMAKE_CURRENT_BINARY_DIR} -o clang | egrep -v "fileutil.c:|note:"
+ COMMAND ! iwyu_tool -p ${CMAKE_CURRENT_BINARY_DIR} -o clang | egrep -v "note:"
VERBATIM
)
# iwyu-fix target to fix includes for correctness.
-# Note fileutil.c gets mangled by this and is excluded.
add_custom_target(iwyu-fix
COMMENT "Fix #includes for correctness using iwyu_tool and fix_include."
- COMMAND iwyu_tool -p ${CMAKE_CURRENT_BINARY_DIR} | fix_include --noblank_lines --ignore_re=fileutil.c
+ COMMAND iwyu_tool -p ${CMAKE_CURRENT_BINARY_DIR} | fix_include --noblank_lines
VERBATIM
)
diff --git a/NEWS.md b/NEWS.md
index be0a569..7c804ea 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -4,6 +4,14 @@
NOT RELEASED YET
+ * Fix #248 by putting `#include "config.h"` with `/* IWYU pragma: keep */` in
+ most `src/*.c` files. Add `/* IWYU pragma: keep */` to includes in
+ `src/fileutil.c` that are needed on some platforms but not others so we can
+ remove the special exemptions to skip this file for the iwyu and iwyu-fix
+ targets in `CMakeLists.txt`. Also add some typecasts to `rollsum.[ch]` and
+ `patch.c` to silence warnings on Windows. (dbaarda,
+ https://github.com/librsync/librsync/pull/249)
+
## librsync 2.3.3
Released 2023-02-16
@@ -17,7 +25,7 @@ Released 2023-02-16
`upload-artifact` to v3. Update `lint.yml` installed packages for fixed
iwyu deps. Fix `iwyu` build target to ignore `fileutil.c` and use neater
clang output with noisy "note:" output removed. Run `make iwyu-fix` to fix
- includes for `tests/rabinkarp_perf.c`. (dbaarda
+ includes for `tests/rabinkarp_perf.c`. (dbaarda,
https://github.com/librsync/librsync/pull/243)
* Add missing word to README.md. (AvdN,
diff --git a/src/base64.c b/src/base64.c
index 39f8579..873746e 100644
--- a/src/base64.c
+++ b/src/base64.c
@@ -19,6 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stdlib.h>
#include <string.h>
#include "librsync.h"
diff --git a/src/buf.c b/src/buf.c
index 5885d56..4dcfb72 100644
--- a/src/buf.c
+++ b/src/buf.c
@@ -23,6 +23,7 @@
| Pick a window, Jimmy, you're leaving.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
diff --git a/src/checksum.c b/src/checksum.c
index daf5c6a..22069e1 100644
--- a/src/checksum.c
+++ b/src/checksum.c
@@ -21,6 +21,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stdint.h>
#include "checksum.h"
#include "blake2.h"
diff --git a/src/command.c b/src/command.c
index 0db2f66..20b2b54 100644
--- a/src/command.c
+++ b/src/command.c
@@ -19,6 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stddef.h>
#include "command.h"
diff --git a/src/delta.c b/src/delta.c
index 2d7fdbc..de65a8c 100644
--- a/src/delta.c
+++ b/src/delta.c
@@ -88,6 +88,7 @@
* and scan_pos adjusted. Everything gets complicated because the tube can
* block. When the tube is blocked, no data can be processed. */
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include <stdlib.h>
#include "librsync.h"
diff --git a/src/emit.c b/src/emit.c
index 9423fc0..208ddb5 100644
--- a/src/emit.c
+++ b/src/emit.c
@@ -19,6 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include "librsync.h"
#include "emit.h"
diff --git a/src/fileutil.c b/src/fileutil.c
index a58e52c..676d2d0 100644
--- a/src/fileutil.c
+++ b/src/fileutil.c
@@ -20,28 +20,31 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include "config.h"
+/* This provides a compatiblity layer for file operations on different
+ platforms. We need to tell IWYU to keep some headers because they are
+ required on some platforms but not others. */
+#include "config.h" /* IWYU pragma: keep */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#ifdef HAVE_UNISTD_H
-# include <unistd.h>
+# include <unistd.h> /* IWYU pragma: keep */
#endif
#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
+# include <fcntl.h> /* IWYU pragma: keep */
#endif
#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+# include <sys/types.h> /* IWYU pragma: keep */
#endif
#ifdef HAVE_SYS_FILE_H
-# include <sys/file.h>
+# include <sys/file.h> /* IWYU pragma: keep */
#endif
#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
+# include <sys/stat.h> /* IWYU pragma: keep */
#endif
#ifdef HAVE_IO_H
-# include <io.h>
+# include <io.h> /* IWYU pragma: keep */
#endif
#include "librsync.h"
#include "trace.h"
diff --git a/src/hex.c b/src/hex.c
index 767fc61..8cee664 100644
--- a/src/hex.c
+++ b/src/hex.c
@@ -17,6 +17,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include "librsync.h"
void rs_hexify(char *to_buf, void const *from, int from_len)
diff --git a/src/isprefix.c b/src/isprefix.c
index aa879e7..becba35 100644
--- a/src/isprefix.c
+++ b/src/isprefix.c
@@ -18,6 +18,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include "isprefix.h"
int isprefix(char const *tip, char const *iceberg)
diff --git a/src/job.c b/src/job.c
index 1826b0f..462e772 100644
--- a/src/job.c
+++ b/src/job.c
@@ -25,6 +25,7 @@
| sheltering.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include <stdlib.h>
#include <time.h>
diff --git a/src/mdfour.c b/src/mdfour.c
index a32728b..8c0c2d7 100644
--- a/src/mdfour.c
+++ b/src/mdfour.c
@@ -21,6 +21,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stdint.h>
#include <string.h>
#include "librsync.h"
diff --git a/src/mksum.c b/src/mksum.c
index 5982bb1..a7bcf84 100644
--- a/src/mksum.c
+++ b/src/mksum.c
@@ -27,6 +27,7 @@
* whatever data is available. When a whole block has arrived, or we've reached
* the end of the file, we write the checksum out. */
+#include "config.h" /* IWYU pragma: keep */
#include <stdlib.h>
#include "librsync.h"
#include "job.h"
diff --git a/src/msg.c b/src/msg.c
index 1ab48e4..1d9e1f5 100644
--- a/src/msg.c
+++ b/src/msg.c
@@ -40,6 +40,7 @@
* description of a job, including only the fields relevant to the current
* encoding function. */
+#include "config.h" /* IWYU pragma: keep */
#include "librsync.h"
char const *rs_strerror(rs_result r)
diff --git a/src/netint.c b/src/netint.c
index 7d38071..ce3f8e3 100644
--- a/src/netint.c
+++ b/src/netint.c
@@ -27,6 +27,7 @@
| -- Sun Microsystems
*/
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include "librsync.h"
#include "netint.h"
diff --git a/src/patch.c b/src/patch.c
index e288d7d..7e353d9 100644
--- a/src/patch.c
+++ b/src/patch.c
@@ -26,6 +26,7 @@
/** \file patch.c
* Apply a delta to an old file to generate a new file. */
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include <stdlib.h>
#include <string.h>
@@ -166,7 +167,7 @@ static rs_result rs_patch_s_copying(rs_job_t *job)
if (!len)
return RS_BLOCKED;
/* Adjust request to min of amount requested and space available. */
- if (len < req)
+ if ((rs_long_t)len < req)
req = (rs_long_t)len;
rs_trace("copy " FMT_LONG " bytes from basis at offset " FMT_LONG "", req,
job->basis_pos);
@@ -180,7 +181,7 @@ static rs_result rs_patch_s_copying(rs_job_t *job)
/* Actual copied length cannot be greater than requested length. */
assert(len <= req);
/* Backwards-compatible defensively handle this for NDEBUG builds. */
- if (len > req) {
+ if ((rs_long_t)len > req) {
rs_warn("copy_cb() returned more than the requested length");
len = (size_t)req;
}
diff --git a/src/prototab.c b/src/prototab.c
index 92a4256..aa693f5 100644
--- a/src/prototab.c
+++ b/src/prototab.c
@@ -20,6 +20,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include "command.h"
#include "prototab.h"
diff --git a/src/rabinkarp.c b/src/rabinkarp.c
index 085b549..ae6247e 100644
--- a/src/rabinkarp.c
+++ b/src/rabinkarp.c
@@ -18,6 +18,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include "rabinkarp.h"
/* Constant for RABINKARP_MULT^2. */
diff --git a/src/rdiff.c b/src/rdiff.c
index 78a3047..29ca892 100644
--- a/src/rdiff.c
+++ b/src/rdiff.c
@@ -43,12 +43,12 @@
*
* \todo Add an option for delta to check whether the files are identical. */
+#include "config.h" /* IWYU pragma: keep */
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <popt.h>
#include <stdio.h>
-#include "config.h"
#include "librsync.h"
#include "isprefix.h"
diff --git a/src/readsums.c b/src/readsums.c
index 4f7cd62..61ba84a 100644
--- a/src/readsums.c
+++ b/src/readsums.c
@@ -23,6 +23,7 @@
/** \file readsums.c
* Load signatures from a file. */
+#include "config.h" /* IWYU pragma: keep */
#include "librsync.h"
#include "job.h"
#include "sumset.h"
diff --git a/src/rollsum.c b/src/rollsum.c
index 03d450e..90c8780 100644
--- a/src/rollsum.c
+++ b/src/rollsum.c
@@ -19,6 +19,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include "rollsum.h"
#define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
@@ -46,8 +47,8 @@ void RollsumUpdate(Rollsum *sum, const unsigned char *buf, size_t len)
n--;
}
/* Increment s1 and s2 by the amounts added by the char offset. */
- s1 += len * ROLLSUM_CHAR_OFFSET;
- s2 += ((len * (len + 1)) / 2) * ROLLSUM_CHAR_OFFSET;
+ s1 += (uint_fast16_t)len * ROLLSUM_CHAR_OFFSET;
+ s2 += (uint_fast16_t)((len * (len + 1)) / 2) * ROLLSUM_CHAR_OFFSET;
sum->count += len; /* Increment sum count. */
sum->s1 = s1;
sum->s2 = s2;
diff --git a/src/rollsum.h b/src/rollsum.h
index 9f33dd0..f5a2aae 100644
--- a/src/rollsum.h
+++ b/src/rollsum.h
@@ -52,7 +52,7 @@ static inline void RollsumRotate(Rollsum *sum, unsigned char out,
unsigned char in)
{
sum->s1 += in - out;
- sum->s2 += sum->s1 - sum->count * (out + ROLLSUM_CHAR_OFFSET);
+ sum->s2 += sum->s1 - (uint_fast16_t)sum->count * (out + ROLLSUM_CHAR_OFFSET);
}
static inline void RollsumRollin(Rollsum *sum, unsigned char in)
@@ -65,7 +65,7 @@ static inline void RollsumRollin(Rollsum *sum, unsigned char in)
static inline void RollsumRollout(Rollsum *sum, unsigned char out)
{
sum->s1 -= out + ROLLSUM_CHAR_OFFSET;
- sum->s2 -= sum->count * (out + ROLLSUM_CHAR_OFFSET);
+ sum->s2 -= (uint_fast16_t)sum->count * (out + ROLLSUM_CHAR_OFFSET);
sum->count--;
}
diff --git a/src/scoop.c b/src/scoop.c
index 6ac3999..7c30b92 100644
--- a/src/scoop.c
+++ b/src/scoop.c
@@ -52,6 +52,7 @@
* would be kind of nice to not do any memory allocation after startup, as
* bzlib does this. */
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include <stdlib.h>
#include <string.h>
diff --git a/src/stats.c b/src/stats.c
index ecb7d28..5fabb8d 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -23,6 +23,7 @@
* \todo Other things to show in statistics: number of input and output bytes,
* number of times we blocked waiting for input or output, number of blocks. */
+#include "config.h" /* IWYU pragma: keep */
#include <stdio.h>
#include "librsync.h"
#include "trace.h"
diff --git a/src/sumset.c b/src/sumset.c
index d95b6f4..5a87261 100644
--- a/src/sumset.c
+++ b/src/sumset.c
@@ -20,6 +20,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stdlib.h>
#include <string.h>
#include "librsync.h"
diff --git a/src/trace.c b/src/trace.c
index 426e1be..75112ff 100644
--- a/src/trace.c
+++ b/src/trace.c
@@ -26,9 +26,9 @@
| There are lumps in it.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stdio.h>
#include <stdarg.h>
-#include "config.h"
#include "librsync.h"
#include "trace.h"
#include "util.h"
diff --git a/src/tube.c b/src/tube.c
index 8faaec5..dfdd13f 100644
--- a/src/tube.c
+++ b/src/tube.c
@@ -51,6 +51,7 @@
* in that case we might need to copy into some temporary buffer space, and
* then back out again later. */
+#include "config.h" /* IWYU pragma: keep */
#include <assert.h>
#include <stdlib.h>
#include <string.h>
diff --git a/src/util.c b/src/util.c
index 4e3976e..f1e5550 100644
--- a/src/util.c
+++ b/src/util.c
@@ -23,6 +23,7 @@
| On heroin, I have all the answers.
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stdlib.h>
#include <string.h>
#include "librsync.h"
diff --git a/src/version.c b/src/version.c
index ebc3983..1817f8f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -19,7 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include "config.h"
+#include "config.h" /* IWYU pragma: keep */
#include "librsync_export.h"
LIBRSYNC_EXPORT char const rs_librsync_version[] = PACKAGE " " VERSION;
diff --git a/src/whole.c b/src/whole.c
index e667f88..ebce253 100644
--- a/src/whole.c
+++ b/src/whole.c
@@ -27,6 +27,7 @@
| -- Alan Perlis
*/
+#include "config.h" /* IWYU pragma: keep */
#include <stdio.h>
#include <string.h>
#include "librsync.h"