mirror of
https://github.com/curl/curl.git
synced 2025-03-19 15:40:42 +08:00
build: add more picky warnings and fix them
Enable more picky compiler warnings. I've found these options in the
nghttp3 project when implementing the CMake quick picky warning
functionality for it [1].
`-Wunused-macros` was too noisy to keep around, but fixed a few issues
it revealed while testing.
- autotools: reflect the more precisely-versioned clang warnings.
Follow-up to 033f8e2a08eb1d3102f08c4d8c8e85470f8b460e #12324
- autotools: sync between clang and gcc the way we set `no-multichar`.
- autotools: avoid setting `-Wstrict-aliasing=3` twice.
- autotools: disable `-Wmissing-noreturn` for MSYS gcc targets [2].
It triggers in libtool-generated stub code.
- lib/timeval: delete a redundant `!MSDOS` guard from a `WIN32` branch.
- lib/curl_setup.h: delete duplicate declaration for `fileno`.
Added in initial commit ae1912cb0d494b48d514d937826c9fe83ec96c4d
(1999-12-29). This suggests this may not be needed anymore, but if
it does, we may restore this for those specific (non-Windows) systems.
- lib: delete unused macro `FTP_BUFFER_ALLOCSIZE` since
c1d6fe2aaa5a26e49a69a4f2495b3cc7a24d9394.
- lib: delete unused macro `isxdigit_ascii` since
f65f750742068f579f4ee6d8539ed9d5f0afcb85.
- lib/mqtt: delete unused macro `MQTT_HEADER_LEN`.
- lib/multi: delete unused macro `SH_READ`/`SH_WRITE`.
- lib/hostip: add `noreturn` function attribute via new `CURL_NORETURN`
macro.
- lib/mprintf: delete duplicate declaration for `Curl_dyn_vprintf`.
- lib/rand: fix `-Wunreachable-code` and related fallouts [3].
- lib/setopt: fix `-Wunreachable-code-break`.
- lib/system_win32 and lib/timeval: fix double declarations for
`Curl_freq` and `Curl_isVistaOrGreater` in CMake UNITY mode [4].
- lib/warnless: fix double declarations in CMake UNITY mode [5].
This was due to force-disabling the header guard of `warnless.h` to
to reapply it to source code coming after `warnless.c` in UNITY
builds. This reapplied declarations too, causing the warnings.
Solved by adding a header guard for the lines that actually need
to be reapplied.
- lib/vauth/digest: fix `-Wunreachable-code-break` [6].
- lib/vssh/libssh2: fix `-Wunreachable-code-break` and delete redundant
block.
- lib/vtls/sectransp: fix `-Wunreachable-code-break` [7].
- lib/vtls/sectransp: suppress `-Wunreachable-code`.
Detected in `else` branches of dynamic feature checks, with results
known at compile-time, e.g.
```c
if(SecCertificateCopySubjectSummary) /* -> true */
```
Likely fixable as a separate micro-project, but given SecureTransport
is deprecated anyway, let's just silence these locally.
- src/tool_help: delete duplicate declaration for `helptext`.
- src/tool_xattr: fix `-Wunreachable-code`.
- tests: delete duplicate declaration for `unitfail` [8].
- tests: delete duplicate declaration for `strncasecompare`.
- tests/libtest: delete duplicate declaration for `gethostname`.
Originally added in 687df5c8c39c370a59999b9afc0917d808d978b7
(2010-08-02).
Got complicated later: c49e9683b85ba9d12cbb6eebc4ab2c8dba68fbdc
If there are still systems around with warnings, we may restore the
prototype, but limited for those systems.
- tests/lib2305: delete duplicate declaration for
`libtest_debug_config`.
- tests/h2-download: fix `-Wunreachable-code-break`.
[1] a70edb08e9/cmake/PickyWarningsC.cmake
[2] https://ci.appveyor.com/project/curlorg/curl/builds/48553586/job/3qkgjauiqla5fj45?fullLog=true#L1675
[3] https://github.com/curl/curl/actions/runs/6880886309/job/18716044703?pr=12331#step:7:72
https://github.com/curl/curl/actions/runs/6883016087/job/18722707368?pr=12331#step:7:109
[4] https://ci.appveyor.com/project/curlorg/curl/builds/48555101/job/9g15qkrriklpf1ut#L204
[5] https://ci.appveyor.com/project/curlorg/curl/builds/48555101/job/9g15qkrriklpf1ut#L218
[6] https://github.com/curl/curl/actions/runs/6880886309/job/18716042927?pr=12331#step:7:290
[7] https://github.com/curl/curl/actions/runs/6891484996/job/18746659406?pr=12331#step:9:1193
[8] https://github.com/curl/curl/actions/runs/6882803986/job/18722082562?pr=12331#step:33:1870
Closes #12331
This commit is contained in:
parent
891f1041d6
commit
84338c4de2
CMake
lib
curl_setup.hftplistparser.chostip.chttp_chunks.cmprintf.cmqtt.cmulti.crand.csetopt.ctimeval.c
vauth
vssh
vtls
warnless.cwarnless.hm4
src
tests
http/clients
libtest
server
unit
@ -70,24 +70,37 @@ if(PICKY_COMPILER)
|
||||
|
||||
# Always enable with clang, version dependent with gcc
|
||||
set(WPICKY_COMMON_OLD
|
||||
-Waddress # clang 2.7 gcc 4.3
|
||||
-Wattributes # clang 2.7 gcc 4.1
|
||||
-Wcast-align # clang 1.0 gcc 4.2
|
||||
-Wdeclaration-after-statement # clang 1.0 gcc 3.4
|
||||
-Wdiv-by-zero # clang 2.7 gcc 4.1
|
||||
-Wempty-body # clang 2.7 gcc 4.3
|
||||
-Wendif-labels # clang 1.0 gcc 3.3
|
||||
-Wfloat-equal # clang 1.0 gcc 2.96 (3.0)
|
||||
-Wformat-security # clang 2.7 gcc 4.1
|
||||
-Wignored-qualifiers # clang 2.8 gcc 4.3
|
||||
-Wmissing-field-initializers # clang 2.7 gcc 4.1
|
||||
-Wmissing-noreturn # clang 2.7 gcc 4.1
|
||||
-Wno-format-nonliteral # clang 1.0 gcc 2.96 (3.0)
|
||||
-Wno-sign-conversion # clang 2.9 gcc 4.3
|
||||
-Wno-system-headers # clang 1.0 gcc 3.0
|
||||
# -Wpadded # clang 2.9 gcc 4.1 # Not used because we cannot change public structs
|
||||
-Wredundant-decls # clang 2.7 gcc 4.1
|
||||
-Wold-style-definition # clang 2.7 gcc 3.4
|
||||
-Wstrict-prototypes # clang 1.0 gcc 3.3
|
||||
# -Wswitch-enum # clang 2.7 gcc 4.1 # Not used because this basically disallows default case
|
||||
-Wtype-limits # clang 2.7 gcc 4.3
|
||||
-Wunreachable-code # clang 2.7 gcc 4.1
|
||||
# -Wunused-macros # clang 2.7 gcc 4.1 # Not practical
|
||||
-Wunused-parameter # clang 2.7 gcc 4.1
|
||||
-Wvla # clang 2.8 gcc 4.3
|
||||
)
|
||||
|
||||
set(WPICKY_COMMON
|
||||
-Wdouble-promotion # clang 3.6 gcc 4.6 appleclang 6.3
|
||||
-Wenum-conversion # clang 3.2 gcc 10.0 appleclang 4.6 g++ 11.0
|
||||
-Wpragmas # clang 3.5 gcc 4.1 appleclang 6.0
|
||||
-Wunused-const-variable # clang 3.4 gcc 6.0 appleclang 5.1
|
||||
)
|
||||
|
||||
@ -96,12 +109,16 @@ if(PICKY_COMPILER)
|
||||
${WPICKY_COMMON_OLD}
|
||||
-Wshift-sign-overflow # clang 2.9
|
||||
-Wshorten-64-to-32 # clang 1.0
|
||||
-Wlanguage-extension-token # clang 3.0
|
||||
)
|
||||
# Enable based on compiler version
|
||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6) OR
|
||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.3))
|
||||
list(APPEND WPICKY_ENABLE
|
||||
${WPICKY_COMMON}
|
||||
-Wunreachable-code-break # clang 3.5 appleclang 6.0
|
||||
-Wheader-guard # clang 3.4 appleclang 5.1
|
||||
-Wsometimes-uninitialized # clang 3.2 appleclang 4.6
|
||||
)
|
||||
endif()
|
||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9) OR
|
||||
|
@ -534,10 +534,6 @@
|
||||
|
||||
# define DIR_CHAR "/"
|
||||
|
||||
# ifndef fileno /* sunos 4 have this as a macro! */
|
||||
int fileno(FILE *stream);
|
||||
# endif
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
@ -648,6 +644,18 @@
|
||||
# define WARN_UNUSED_RESULT
|
||||
#endif
|
||||
|
||||
/* noreturn attribute */
|
||||
|
||||
#if !defined(CURL_NORETURN)
|
||||
#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__)
|
||||
# define CURL_NORETURN __attribute__((__noreturn__))
|
||||
#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
|
||||
# define CURL_NORETURN __declspec(noreturn)
|
||||
#else
|
||||
# define CURL_NORETURN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Include macros and defines that should only be processed once.
|
||||
*/
|
||||
|
@ -55,9 +55,6 @@
|
||||
/* The last #include file should be: */
|
||||
#include "memdebug.h"
|
||||
|
||||
/* allocs buffer which will contain one line of LIST command response */
|
||||
#define FTP_BUFFER_ALLOCSIZE 160
|
||||
|
||||
typedef enum {
|
||||
PL_UNIX_TOTALSIZE = 0,
|
||||
PL_UNIX_FILETYPE,
|
||||
|
@ -853,7 +853,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
|
||||
* execution. This effectively causes the remainder of the application to run
|
||||
* within a signal handler which is nonportable and could lead to problems.
|
||||
*/
|
||||
static
|
||||
CURL_NORETURN static
|
||||
void alarmfunc(int sig)
|
||||
{
|
||||
(void)sig;
|
||||
|
@ -75,8 +75,6 @@
|
||||
|
||||
*/
|
||||
|
||||
#define isxdigit_ascii(x) Curl_isxdigit(x)
|
||||
|
||||
void Curl_httpchunk_init(struct Curl_easy *data)
|
||||
{
|
||||
struct connectdata *conn = data->conn;
|
||||
|
@ -1069,9 +1069,6 @@ static int alloc_addbyter(int output, FILE *data)
|
||||
return outc; /* fputc() returns like this on success */
|
||||
}
|
||||
|
||||
extern int Curl_dyn_vprintf(struct dynbuf *dyn,
|
||||
const char *format, va_list ap_save);
|
||||
|
||||
/* appends the formatted string, returns 0 on success, 1 on error */
|
||||
int Curl_dyn_vprintf(struct dynbuf *dyn, const char *format, va_list ap_save)
|
||||
{
|
||||
|
@ -616,9 +616,6 @@ static void mqstate(struct Curl_easy *data,
|
||||
}
|
||||
|
||||
|
||||
/* for the publish packet */
|
||||
#define MQTT_HEADER_LEN 5 /* max 5 bytes */
|
||||
|
||||
static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
|
@ -215,10 +215,6 @@ struct Curl_sh_entry {
|
||||
unsigned int readers; /* this many transfers want to read */
|
||||
unsigned int writers; /* this many transfers want to write */
|
||||
};
|
||||
/* bits for 'action' having no bits means this socket is not expecting any
|
||||
action */
|
||||
#define SH_READ 1
|
||||
#define SH_WRITE 2
|
||||
|
||||
/* look up a given socket in the socket hash, skip invalid sockets */
|
||||
static struct Curl_sh_entry *sh_getentry(struct Curl_hash *sh,
|
||||
@ -2928,7 +2924,7 @@ static CURLMcode singlesocket(struct Curl_multi *multi,
|
||||
}
|
||||
}
|
||||
|
||||
comboaction = (entry->writers? CURL_POLL_OUT : 0) |
|
||||
comboaction = (entry->writers ? CURL_POLL_OUT : 0) |
|
||||
(entry->readers ? CURL_POLL_IN : 0);
|
||||
|
||||
/* socket existed before and has the same action set as before */
|
||||
|
16
lib/rand.c
16
lib/rand.c
@ -101,7 +101,6 @@ CURLcode Curl_win32_random(unsigned char *entropy, size_t length)
|
||||
|
||||
static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
|
||||
{
|
||||
unsigned int r;
|
||||
CURLcode result = CURLE_OK;
|
||||
static unsigned int randseed;
|
||||
static bool seeded = FALSE;
|
||||
@ -143,8 +142,10 @@ static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_ARC4RANDOM) && !defined(USE_OPENSSL)
|
||||
*rnd = (unsigned int)arc4random();
|
||||
return CURLE_OK;
|
||||
if(!seeded) {
|
||||
*rnd = (unsigned int)arc4random();
|
||||
return CURLE_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(RANDOM_FILE) && !defined(WIN32)
|
||||
@ -171,9 +172,12 @@ static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
|
||||
seeded = TRUE;
|
||||
}
|
||||
|
||||
/* Return an unsigned 32-bit pseudo-random number. */
|
||||
r = randseed = randseed * 1103515245 + 12345;
|
||||
*rnd = (r << 16) | ((r >> 16) & 0xFFFF);
|
||||
{
|
||||
unsigned int r;
|
||||
/* Return an unsigned 32-bit pseudo-random number. */
|
||||
r = randseed = randseed * 1103515245 + 12345;
|
||||
*rnd = (r << 16) | ((r >> 16) & 0xFFFF);
|
||||
}
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
|
11
lib/setopt.c
11
lib/setopt.c
@ -2089,14 +2089,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
||||
* Specify entire PEM of the CA certificate
|
||||
*/
|
||||
#ifdef USE_SSL
|
||||
if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB))
|
||||
if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB)) {
|
||||
result = Curl_setblobopt(&data->set.blobs[BLOB_CAINFO],
|
||||
va_arg(param, struct curl_blob *));
|
||||
break;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
return CURLE_NOT_BUILT_IN;
|
||||
|
||||
break;
|
||||
#ifndef CURL_DISABLE_PROXY
|
||||
case CURLOPT_PROXY_CAINFO:
|
||||
/*
|
||||
@ -2112,13 +2112,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
||||
* Specify entire PEM of the CA certificate
|
||||
*/
|
||||
#ifdef USE_SSL
|
||||
if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB))
|
||||
if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB)) {
|
||||
result = Curl_setblobopt(&data->set.blobs[BLOB_CAINFO_PROXY],
|
||||
va_arg(param, struct curl_blob *));
|
||||
break;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
return CURLE_NOT_BUILT_IN;
|
||||
break;
|
||||
#endif
|
||||
case CURLOPT_CAPATH:
|
||||
/*
|
||||
|
@ -24,11 +24,10 @@
|
||||
|
||||
#include "timeval.h"
|
||||
|
||||
#if defined(WIN32) && !defined(MSDOS)
|
||||
#if defined(WIN32)
|
||||
|
||||
/* set in win32_init() */
|
||||
extern LARGE_INTEGER Curl_freq;
|
||||
extern bool Curl_isVistaOrGreater;
|
||||
#include <curl/curl.h>
|
||||
#include "system_win32.h"
|
||||
|
||||
/* In case of bug fix this function has a counterpart in tool_util.c */
|
||||
struct curltime Curl_now(void)
|
||||
|
@ -125,7 +125,6 @@ bool Curl_auth_digest_get_pair(const char *str, char *value, char *content,
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1537,139 +1537,137 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
|
||||
state(data, SSH_SFTP_NEXT_QUOTE);
|
||||
break;
|
||||
}
|
||||
{
|
||||
/*
|
||||
* the arguments following the command must be separated from the
|
||||
* command with a space so we can check for it unconditionally
|
||||
*/
|
||||
cp = strchr(cmd, ' ');
|
||||
if(!cp) {
|
||||
failf(data, "Syntax error command '%s', missing parameter",
|
||||
cmd);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = CURLE_QUOTE_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* also, every command takes at least one argument so we get that
|
||||
* first argument right now
|
||||
*/
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path1, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data, "Syntax error: Bad first parameter to '%s'", cmd);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* SFTP is a binary protocol, so we don't send text commands
|
||||
* to the server. Instead, we scan for commands used by
|
||||
* OpenSSH's sftp program and call the appropriate libssh2
|
||||
* functions.
|
||||
*/
|
||||
if(strncasecompare(cmd, "chgrp ", 6) ||
|
||||
strncasecompare(cmd, "chmod ", 6) ||
|
||||
strncasecompare(cmd, "chown ", 6) ||
|
||||
strncasecompare(cmd, "atime ", 6) ||
|
||||
strncasecompare(cmd, "mtime ", 6)) {
|
||||
/* attribute change */
|
||||
|
||||
/* sshc->quote_path1 contains the mode to set */
|
||||
/* get the destination */
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data, "Syntax error in %s: Bad second parameter", cmd);
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
memset(&sshp->quote_attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
||||
state(data, SSH_SFTP_QUOTE_STAT);
|
||||
break;
|
||||
}
|
||||
if(strncasecompare(cmd, "ln ", 3) ||
|
||||
strncasecompare(cmd, "symlink ", 8)) {
|
||||
/* symbolic linking */
|
||||
/* sshc->quote_path1 is the source */
|
||||
/* get the destination */
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data,
|
||||
"Syntax error in ln/symlink: Bad second parameter");
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
state(data, SSH_SFTP_QUOTE_SYMLINK);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "mkdir ", 6)) {
|
||||
/* create dir */
|
||||
state(data, SSH_SFTP_QUOTE_MKDIR);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "rename ", 7)) {
|
||||
/* rename file */
|
||||
/* first param is the source path */
|
||||
/* second param is the dest. path */
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data, "Syntax error in rename: Bad second parameter");
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
state(data, SSH_SFTP_QUOTE_RENAME);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "rmdir ", 6)) {
|
||||
/* delete dir */
|
||||
state(data, SSH_SFTP_QUOTE_RMDIR);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "rm ", 3)) {
|
||||
state(data, SSH_SFTP_QUOTE_UNLINK);
|
||||
break;
|
||||
}
|
||||
#ifdef HAS_STATVFS_SUPPORT
|
||||
else if(strncasecompare(cmd, "statvfs ", 8)) {
|
||||
state(data, SSH_SFTP_QUOTE_STATVFS);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
failf(data, "Unknown SFTP command");
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
Curl_safefree(sshc->quote_path2);
|
||||
/*
|
||||
* the arguments following the command must be separated from the
|
||||
* command with a space so we can check for it unconditionally
|
||||
*/
|
||||
cp = strchr(cmd, ' ');
|
||||
if(!cp) {
|
||||
failf(data, "Syntax error command '%s', missing parameter",
|
||||
cmd);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = CURLE_QUOTE_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* also, every command takes at least one argument so we get that
|
||||
* first argument right now
|
||||
*/
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path1, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data, "Syntax error: Bad first parameter to '%s'", cmd);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* SFTP is a binary protocol, so we don't send text commands
|
||||
* to the server. Instead, we scan for commands used by
|
||||
* OpenSSH's sftp program and call the appropriate libssh2
|
||||
* functions.
|
||||
*/
|
||||
if(strncasecompare(cmd, "chgrp ", 6) ||
|
||||
strncasecompare(cmd, "chmod ", 6) ||
|
||||
strncasecompare(cmd, "chown ", 6) ||
|
||||
strncasecompare(cmd, "atime ", 6) ||
|
||||
strncasecompare(cmd, "mtime ", 6)) {
|
||||
/* attribute change */
|
||||
|
||||
/* sshc->quote_path1 contains the mode to set */
|
||||
/* get the destination */
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data, "Syntax error in %s: Bad second parameter", cmd);
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
memset(&sshp->quote_attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
|
||||
state(data, SSH_SFTP_QUOTE_STAT);
|
||||
break;
|
||||
}
|
||||
if(strncasecompare(cmd, "ln ", 3) ||
|
||||
strncasecompare(cmd, "symlink ", 8)) {
|
||||
/* symbolic linking */
|
||||
/* sshc->quote_path1 is the source */
|
||||
/* get the destination */
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data,
|
||||
"Syntax error in ln/symlink: Bad second parameter");
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
state(data, SSH_SFTP_QUOTE_SYMLINK);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "mkdir ", 6)) {
|
||||
/* create dir */
|
||||
state(data, SSH_SFTP_QUOTE_MKDIR);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "rename ", 7)) {
|
||||
/* rename file */
|
||||
/* first param is the source path */
|
||||
/* second param is the dest. path */
|
||||
result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
|
||||
if(result) {
|
||||
if(result == CURLE_OUT_OF_MEMORY)
|
||||
failf(data, "Out of memory");
|
||||
else
|
||||
failf(data, "Syntax error in rename: Bad second parameter");
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = result;
|
||||
break;
|
||||
}
|
||||
state(data, SSH_SFTP_QUOTE_RENAME);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "rmdir ", 6)) {
|
||||
/* delete dir */
|
||||
state(data, SSH_SFTP_QUOTE_RMDIR);
|
||||
break;
|
||||
}
|
||||
else if(strncasecompare(cmd, "rm ", 3)) {
|
||||
state(data, SSH_SFTP_QUOTE_UNLINK);
|
||||
break;
|
||||
}
|
||||
#ifdef HAS_STATVFS_SUPPORT
|
||||
else if(strncasecompare(cmd, "statvfs ", 8)) {
|
||||
state(data, SSH_SFTP_QUOTE_STATVFS);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
failf(data, "Unknown SFTP command");
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
Curl_safefree(sshc->quote_path2);
|
||||
state(data, SSH_SFTP_CLOSE);
|
||||
sshc->nextstate = SSH_NO_STATE;
|
||||
sshc->actualcode = CURLE_QUOTE_ERROR;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case SSH_SFTP_NEXT_QUOTE:
|
||||
Curl_safefree(sshc->quote_path1);
|
||||
|
@ -49,6 +49,7 @@
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Waddress"
|
||||
#pragma GCC diagnostic ignored "-Wundef"
|
||||
#pragma GCC diagnostic ignored "-Wunreachable-code"
|
||||
#endif
|
||||
|
||||
#include <limits.h>
|
||||
@ -3403,7 +3404,6 @@ again:
|
||||
}
|
||||
*curlcode = CURLE_AGAIN;
|
||||
return -1L;
|
||||
break;
|
||||
|
||||
/* errSSLClosedGraceful - server gracefully shut down the SSL session
|
||||
errSSLClosedNoNotify - server hung up on us instead of sending a
|
||||
@ -3413,7 +3413,6 @@ again:
|
||||
case errSSLClosedNoNotify:
|
||||
*curlcode = CURLE_OK;
|
||||
return 0;
|
||||
break;
|
||||
|
||||
/* The below is errSSLPeerAuthCompleted; it's not defined in
|
||||
Leopard's headers */
|
||||
@ -3433,7 +3432,6 @@ again:
|
||||
failf(data, "SSLRead() return error %d", err);
|
||||
*curlcode = CURLE_RECV_ERROR;
|
||||
return -1L;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (ssize_t)processed;
|
||||
|
@ -379,8 +379,8 @@ ssize_t curlx_write(int fd, const void *buf, size_t count)
|
||||
return (ssize_t)write(fd, buf, curlx_uztoui(count));
|
||||
}
|
||||
|
||||
/* Ensure that warnless.h continues to have an effect in "unity" builds. */
|
||||
#undef HEADER_CURL_WARNLESS_H
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
/* Ensure that warnless.h redefinitions continue to have an effect
|
||||
in "unity" builds. */
|
||||
#undef HEADER_CURL_WARNLESS_H_REDEFS
|
||||
|
@ -75,11 +75,6 @@ ssize_t curlx_read(int fd, void *buf, size_t count);
|
||||
|
||||
ssize_t curlx_write(int fd, const void *buf, size_t count);
|
||||
|
||||
#undef read
|
||||
#define read(fd, buf, count) curlx_read(fd, buf, count)
|
||||
#undef write
|
||||
#define write(fd, buf, count) curlx_write(fd, buf, count)
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
#if defined(__INTEL_COMPILER) && defined(__unix__)
|
||||
@ -97,3 +92,15 @@ unsigned short curlx_ntohs(unsigned short usnum);
|
||||
#endif /* __INTEL_COMPILER && __unix__ */
|
||||
|
||||
#endif /* HEADER_CURL_WARNLESS_H */
|
||||
|
||||
#ifndef HEADER_CURL_WARNLESS_H_REDEFS
|
||||
#define HEADER_CURL_WARNLESS_H_REDEFS
|
||||
|
||||
#if defined(WIN32)
|
||||
#undef read
|
||||
#define read(fd, buf, count) curlx_read(fd, buf, count)
|
||||
#undef write
|
||||
#define write(fd, buf, count) curlx_write(fd, buf, count)
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_WARNLESS_H_REDEFS */
|
||||
|
@ -788,10 +788,10 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [inline nested-externs])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-declarations])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-prototypes])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [old-style-definition])
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [float-equal])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [no-multichar sign-compare])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sign-compare])
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar"
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [undef])
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [endif-labels strict-prototypes])
|
||||
@ -805,29 +805,46 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused])
|
||||
fi
|
||||
#
|
||||
dnl Only clang 2.7 or later
|
||||
if test "$compiler_num" -ge "207"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [address])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [attributes])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [bad-function-cast])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [conversion])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [div-by-zero format-security])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [empty-body])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-field-initializers])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-noreturn])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [old-style-definition])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [redundant-decls])
|
||||
# CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum]) # Not used because this basically disallows default case
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [type-limits])
|
||||
# CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros]) # Not practical
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code unused-parameter])
|
||||
fi
|
||||
#
|
||||
dnl Only clang 2.8 or later
|
||||
if test "$compiler_num" -ge "208"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [ignored-qualifiers])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [vla])
|
||||
fi
|
||||
#
|
||||
dnl Only clang 2.9 or later
|
||||
if test "$compiler_num" -ge "209"; then
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wno-sign-conversion"
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [shift-sign-overflow])
|
||||
# CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded]) # Not used because we cannot change public structs
|
||||
fi
|
||||
#
|
||||
dnl Only clang 3.0 or later (possibly earlier)
|
||||
dnl Only clang 3.0 or later
|
||||
if test "$compiler_num" -ge "300"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [bad-function-cast])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [conversion])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [empty-body])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [ignored-qualifiers])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [type-limits])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [no-sign-conversion])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [language-extension-token])
|
||||
fi
|
||||
#
|
||||
dnl Only clang 3.2 or later
|
||||
if test "$compiler_num" -ge "302"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [enum-conversion])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sometimes-uninitialized])
|
||||
case $host_os in
|
||||
cygwin* | mingw*)
|
||||
dnl skip missing-variable-declarations warnings for cygwin and
|
||||
@ -841,9 +858,16 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
|
||||
#
|
||||
dnl Only clang 3.4 or later
|
||||
if test "$compiler_num" -ge "304"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [header-guard])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-const-variable])
|
||||
fi
|
||||
#
|
||||
dnl Only clang 3.5 or later
|
||||
if test "$compiler_num" -ge "305"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pragmas])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code-break])
|
||||
fi
|
||||
#
|
||||
dnl Only clang 3.6 or later
|
||||
if test "$compiler_num" -ge "306"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [double-promotion])
|
||||
@ -961,6 +985,26 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
|
||||
tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3"
|
||||
fi
|
||||
#
|
||||
dnl Only gcc 4.1 or later
|
||||
if test "$compiler_num" -ge "401"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [attributes])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [div-by-zero format-security])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-field-initializers])
|
||||
case $host in
|
||||
*-*-msys*)
|
||||
;;
|
||||
*)
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-noreturn]) # Seen to clash with libtool-generated stub code
|
||||
;;
|
||||
esac
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code unused-parameter])
|
||||
# CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded]) # Not used because we cannot change public structs
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pragmas])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [redundant-decls])
|
||||
# CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum]) # Not used because this basically disallows default case
|
||||
# CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros]) # Not practical
|
||||
fi
|
||||
#
|
||||
dnl Only gcc 4.2 or later
|
||||
if test "$compiler_num" -ge "402"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [cast-align])
|
||||
@ -968,6 +1012,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
|
||||
#
|
||||
dnl Only gcc 4.3 or later
|
||||
if test "$compiler_num" -ge "403"; then
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [address])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [type-limits old-style-declaration])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-parameter-type empty-body])
|
||||
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [clobbered ignored-qualifiers])
|
||||
|
@ -73,8 +73,6 @@ static const struct category_descriptors categories[] = {
|
||||
{NULL, NULL, CURLHELP_HIDDEN}
|
||||
};
|
||||
|
||||
extern const struct helptxt helptext[];
|
||||
|
||||
|
||||
static void print_category(curlhelp_t category)
|
||||
{
|
||||
|
@ -87,11 +87,12 @@ static int xattr(int fd,
|
||||
int err = 0;
|
||||
if(value) {
|
||||
#ifdef DEBUGBUILD
|
||||
(void)fd;
|
||||
if(getenv("CURL_FAKE_XATTR")) {
|
||||
printf("%s => %s\n", attr, value);
|
||||
}
|
||||
return 0;
|
||||
#endif
|
||||
#else
|
||||
#ifdef HAVE_FSETXATTR_6
|
||||
err = fsetxattr(fd, attr, value, strlen(value), 0, 0);
|
||||
#elif defined(HAVE_FSETXATTR_5)
|
||||
@ -104,6 +105,7 @@ static int xattr(int fd,
|
||||
attribute */
|
||||
err = (rc < 0 ? -1 : 0);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
return err;
|
||||
|
@ -196,7 +196,6 @@ int main(int argc, char *argv[])
|
||||
case 'h':
|
||||
usage(NULL);
|
||||
return 2;
|
||||
break;
|
||||
case 'a':
|
||||
abort_paused = 1;
|
||||
break;
|
||||
|
@ -67,7 +67,7 @@ endforeach()
|
||||
# Allows for hostname override to make tests machine independent.
|
||||
# TODO this cmake build assumes a shared build, detect static linking here!
|
||||
if(NOT WIN32)
|
||||
add_library(hostname MODULE EXCLUDE_FROM_ALL sethostname.c sethostname.h)
|
||||
add_library(hostname MODULE EXCLUDE_FROM_ALL sethostname.c)
|
||||
add_dependencies(testdeps hostname)
|
||||
# Output to .libs for compatibility with autotools, the test data expects a
|
||||
# library at (tests)/libtest/.libs/libhostname.so
|
||||
|
@ -103,7 +103,7 @@ libhostname_la_CPPFLAGS = $(AM_CPPFLAGS) $(libhostname_la_CPPFLAGS_EXTRA)
|
||||
libhostname_la_LDFLAGS = $(AM_LDFLAGS) $(libhostname_la_LDFLAGS_EXTRA)
|
||||
libhostname_la_CFLAGS = $(AM_CFLAGS) $(libhostname_la_CFLAGS_EXTRA)
|
||||
|
||||
libhostname_la_SOURCES = sethostname.c sethostname.h
|
||||
libhostname_la_SOURCES = sethostname.c
|
||||
|
||||
libhostname_la_LIBADD =
|
||||
libhostname_la_DEPENDENCIES =
|
||||
|
@ -71,8 +71,6 @@ static void websocket(CURL *curl)
|
||||
websocket_close(curl);
|
||||
}
|
||||
|
||||
extern struct libtest_trace_cfg libtest_debug_config;
|
||||
|
||||
int test(char *URL)
|
||||
{
|
||||
CURL *curl;
|
||||
|
@ -23,8 +23,6 @@
|
||||
***************************************************************************/
|
||||
#include "curl_setup.h"
|
||||
|
||||
#include "sethostname.h"
|
||||
|
||||
/*
|
||||
* we force our own host name, in order to make some tests machine independent
|
||||
*/
|
||||
|
@ -1,42 +0,0 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at https://curl.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* SPDX-License-Identifier: curl
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
#ifdef CURL_STATICLIB
|
||||
# define LIBHOSTNAME_EXTERN
|
||||
#elif defined(WIN32)
|
||||
# define LIBHOSTNAME_EXTERN __declspec(dllexport)
|
||||
#elif defined(CURL_HIDDEN_SYMBOLS)
|
||||
# define LIBHOSTNAME_EXTERN CURL_EXTERN_SYMBOL
|
||||
#else
|
||||
# define LIBHOSTNAME_EXTERN
|
||||
#endif
|
||||
|
||||
#ifdef USE_WINSOCK
|
||||
# define FUNCALLCONV __stdcall
|
||||
#else
|
||||
# define FUNCALLCONV
|
||||
#endif
|
||||
|
||||
LIBHOSTNAME_EXTERN int FUNCALLCONV
|
||||
gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen);
|
@ -98,7 +98,6 @@
|
||||
#define MQTT_CONNACK_LEN 4
|
||||
#define MQTT_SUBACK_LEN 5
|
||||
#define MQTT_CLIENTID_LEN 12 /* "curl0123abcd" */
|
||||
#define MQTT_HEADER_LEN 5 /* max 5 bytes */
|
||||
|
||||
struct configurable {
|
||||
unsigned char version; /* initial version byte in the request must match
|
||||
|
@ -68,7 +68,6 @@ int write_pidfile(const char *filename);
|
||||
int write_portfile(const char *filename, int port);
|
||||
void set_advisor_read_lock(const char *filename);
|
||||
void clear_advisor_read_lock(const char *filename);
|
||||
int strncasecompare(const char *first, const char *second, size_t max);
|
||||
|
||||
/* global variable which if set indicates that the program should finish */
|
||||
extern volatile int got_exit_signal;
|
||||
|
@ -93,8 +93,6 @@
|
||||
} while(0)
|
||||
|
||||
|
||||
extern int unitfail;
|
||||
|
||||
#define UNITTEST_START \
|
||||
int test(char *arg) \
|
||||
{ \
|
||||
|
Loading…
x
Reference in New Issue
Block a user