Skip to content

Commit

Permalink
autotools: stop setting -std=gnu89 with --enable-warnings
Browse files Browse the repository at this point in the history
Do not alter the C standard when building with `--enable-warnings` when
building with gcc.

On one hand this alters warning results compared to a default build.
On the other, it may produce different binaries, which is unexpected.

Also fix new warnings that appeared after removing `-std=gnu89`:

- include: fix public curl headers to use the correct printf mask for
  `CURL_FORMAT_CURL_OFF_T` and `CURL_FORMAT_CURL_OFF_TU` with mingw-w64
  and Visual Studio 2013 and newer. This fixes the printf mask warnings
  in examples and tests. E.g. [1]

- conncache: fix printf format string [2].

- http2: fix potential null pointer dereference [3].
  (seen on Slackware with gcc 11.)

- libssh: fix printf format string in SFTP code [4].
  Also make MSVC builds compatible with old CRT versions.

- libssh2: fix printf format string in SFTP code for MSVC.
  Applying the same fix as for libssh above.

- unit1395: fix `argument is null` and related issues [5]:
  - stop calling `strcmp()` with NULL to avoid undefined behaviour.
  - fix checking results if some of them were NULL.
  - do not pass NULL to printf `%s`.

- ci: keep a build job with `-std=gnu89` to continue testing for
  C89-compliance. We can apply this to other gcc jobs as needed.
  Ref: b23ce2c (2022-09-23) curl#9542

[1] https://dev.azure.com/daniel0244/curl/_build/results?buildId=18581&view=logs&jobId=ccf9cc6d-2ef1-5cf2-2c09-30f0c14f923b
[2] https://github.com/curl/curl/actions/runs/6896854263/job/18763831142?pr=12346#step:6:67
[3] https://github.com/curl/curl/actions/runs/6896854253/job/18763839238?pr=12346#step:30:214
[4] https://github.com/curl/curl/actions/runs/6896854253/job/18763838007?pr=12346#step:29:895
[5] https://github.com/curl/curl/actions/runs/6896854253/job/18763836775?pr=12346#step:33:1689

Closes curl#12346
  • Loading branch information
vszakats committed Nov 20, 2023
1 parent 9523192 commit 413a0fe
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 27 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/linux.yml
Expand Up @@ -105,7 +105,7 @@ jobs:
- name: openssl3
install_packages: zlib1g-dev valgrind
install_steps: gcc-11 openssl3 pytest
configure: LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib64" --with-openssl=$HOME/openssl3 --enable-debug --enable-websockets
configure: CFLAGS=-std=gnu89 LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib64" --with-openssl=$HOME/openssl3 --enable-debug --enable-websockets
singleuse: --unit

- name: openssl3-O3
Expand Down
14 changes: 11 additions & 3 deletions include/curl/system.h
Expand Up @@ -201,9 +201,10 @@
# define CURL_TYPEOF_CURL_SOCKLEN_T int

#elif defined(__MINGW32__)
# include <inttypes.h>
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_FORMAT_CURL_OFF_T PRId64
# define CURL_FORMAT_CURL_OFF_TU PRIu64
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
Expand Down Expand Up @@ -370,7 +371,14 @@
/* ===================================== */

#elif defined(_MSC_VER)
# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
# if (_MSC_VER >= 1800)
# include <inttypes.h>
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T PRId64
# define CURL_FORMAT_CURL_OFF_TU PRIu64
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# elif (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
Expand Down
2 changes: 1 addition & 1 deletion lib/conncache.c
Expand Up @@ -243,7 +243,7 @@ CURLcode Curl_conncache_add_conn(struct Curl_easy *data)
conn->connection_id = connc->next_connection_id++;
connc->num_conn++;

DEBUGF(infof(data, "Added connection %ld. "
DEBUGF(infof(data, "Added connection %" CURL_FORMAT_CURL_OFF_T ". "
"The cache now contains %zu members",
conn->connection_id, connc->num_conn));

Expand Down
13 changes: 8 additions & 5 deletions lib/http2.c
Expand Up @@ -369,12 +369,15 @@ static ssize_t nw_out_writer(void *writer_ctx,
{
struct Curl_cfilter *cf = writer_ctx;
struct Curl_easy *data = CF_DATA_CURRENT(cf);
ssize_t nwritten;

nwritten = Curl_conn_cf_send(cf->next, data, (const char *)buf, buflen, err);
if(nwritten > 0)
CURL_TRC_CF(data, cf, "[0] egress: wrote %zd bytes", nwritten);
return nwritten;
if(data) {
ssize_t nwritten = Curl_conn_cf_send(cf->next, data,
(const char *)buf, buflen, err);
if(nwritten > 0)
CURL_TRC_CF(data, cf, "[0] egress: wrote %zd bytes", nwritten);
return nwritten;
}
return 0;
}

static ssize_t send_callback(nghttp2_session *h2,
Expand Down
22 changes: 16 additions & 6 deletions lib/vssh/libssh.c
Expand Up @@ -1160,13 +1160,23 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
else if(statvfs) {
#ifdef _MSC_VER
#define LIBSSH_VFS_SIZE_MASK "I64u"
#else
#define LIBSSH_VFS_SIZE_MASK PRIu64
#endif
char *tmp = aprintf("statvfs:\n"
"f_bsize: %llu\n" "f_frsize: %llu\n"
"f_blocks: %llu\n" "f_bfree: %llu\n"
"f_bavail: %llu\n" "f_files: %llu\n"
"f_ffree: %llu\n" "f_favail: %llu\n"
"f_fsid: %llu\n" "f_flag: %llu\n"
"f_namemax: %llu\n",
"f_bsize: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_frsize: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_blocks: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_bfree: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_bavail: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_files: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_ffree: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_favail: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_fsid: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_flag: %" LIBSSH_VFS_SIZE_MASK "\n"
"f_namemax: %" LIBSSH_VFS_SIZE_MASK "\n",
statvfs->f_bsize, statvfs->f_frsize,
statvfs->f_blocks, statvfs->f_bfree,
statvfs->f_bavail, statvfs->f_files,
Expand Down
22 changes: 16 additions & 6 deletions lib/vssh/libssh2.c
Expand Up @@ -1962,13 +1962,23 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
else if(rc == 0) {
#ifdef _MSC_VER
#define LIBSSH2_VFS_SIZE_MASK "I64u"
#else
#define LIBSSH2_VFS_SIZE_MASK "llu"
#endif
char *tmp = aprintf("statvfs:\n"
"f_bsize: %llu\n" "f_frsize: %llu\n"
"f_blocks: %llu\n" "f_bfree: %llu\n"
"f_bavail: %llu\n" "f_files: %llu\n"
"f_ffree: %llu\n" "f_favail: %llu\n"
"f_fsid: %llu\n" "f_flag: %llu\n"
"f_namemax: %llu\n",
"f_bsize: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_frsize: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_blocks: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_bfree: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_bavail: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_files: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_ffree: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_favail: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_fsid: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_flag: %" LIBSSH2_VFS_SIZE_MASK "\n"
"f_namemax: %" LIBSSH2_VFS_SIZE_MASK "\n",
statvfs.f_bsize, statvfs.f_frsize,
statvfs.f_blocks, statvfs.f_bfree,
statvfs.f_bavail, statvfs.f_files,
Expand Down
1 change: 0 additions & 1 deletion m4/curl-compilers.m4
Expand Up @@ -881,7 +881,6 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
GNU_C)
#
if test "$want_warnings" = "yes"; then
tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
#
dnl Do not enable -pedantic when cross-compiling with a gcc older
dnl than 3.0, to avoid warnings from third party system headers.
Expand Down
10 changes: 6 additions & 4 deletions tests/unit/unit1395.c
Expand Up @@ -83,15 +83,17 @@ UNITTEST_START
abort_unless(err == 0, "returned error");
abort_if(err && out, "returned error with output");

if(out && strcmp(out, pairs[i].output)) {
if(out && pairs[i].output && strcmp(out, pairs[i].output)) {
fprintf(stderr, "Test %u: '%s' gave '%s' instead of '%s'\n",
i, pairs[i].input, out, pairs[i].output);
fail("Test case output mismatched");
fails++;
}
else if(!out && pairs[i].output) {
fprintf(stderr, "Test %u: '%s' gave '%s' instead of NULL\n",
i, pairs[i].input, out);
else if((!out && pairs[i].output) ||
(out && !pairs[i].output)) {
fprintf(stderr, "Test %u: '%s' gave '%s' instead of '%s'\n",
i, pairs[i].input, out ? out : "(null)",
pairs[i].output ? pairs[i].output : "(null)");
fail("Test case output mismatched");
fails++;
}
Expand Down

0 comments on commit 413a0fe

Please sign in to comment.