diff options
-rw-r--r-- | .clang-tidy | 49 | ||||
-rw-r--r-- | src/CGIScript.cpp | 8 | ||||
-rw-r--r-- | src/CGIScript.h | 2 | ||||
-rw-r--r-- | src/ClientConnection.cpp | 6 | ||||
-rw-r--r-- | src/ClientConnection.h | 4 | ||||
-rw-r--r-- | src/HttpRequest.cpp | 4 | ||||
-rw-r--r-- | src/HttpResponse.cpp | 6 | ||||
-rw-r--r-- | src/ServerConnection.cpp | 10 | ||||
-rw-r--r-- | src/ServerConnection.h | 2 | ||||
-rw-r--r-- | src/main.cpp | 10 |
10 files changed, 75 insertions, 26 deletions
diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..03f3649 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,49 @@ +--- +Checks: '-*, + bugprone-*, + cert-*, + cppcoreguidelines-*, + clang-diagnostic-*, + clang-analyzer-*, + modernize-*, + performance-*, + readability-*, + -modernize-use-trailing-return-type, + -readability-braces-around-statements' +WarningsAsErrors: '' +HeaderFilterRegex: '' +AnalyzeTemporaryDtors: false +FormatStyle: 'file' +CheckOptions: + - key: llvm-else-after-return.WarnOnConditionVariables + value: 'false' + - key: modernize-loop-convert.MinConfidence + value: reasonable + - key: modernize-replace-auto-ptr.IncludeStyle + value: llvm + - key: modernize-pass-by-value.IncludeStyle + value: llvm + - key: google-readability-namespace-comments.ShortNamespaceLines + value: '10' + - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic + value: 'true' + - key: modernize-loop-convert.MaxCopySize + value: '16' + - key: cert-dcl16-c.NewSuffixes + value: 'L;LL;LU;LLU' + - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField + value: 'false' + - key: cert-str34-c.DiagnoseSignedUnsignedCharComparisons + value: 'false' + - key: modernize-use-nullptr.NullMacros + value: 'NULL' + - key: llvm-qualified-auto.AddConstToQualified + value: 'false' + - key: modernize-loop-convert.NamingStyle + value: CamelCase + - key: llvm-else-after-return.WarnOnUnfixable + value: 'false' + - key: google-readability-function-size.StatementThreshold + value: '800' +... + diff --git a/src/CGIScript.cpp b/src/CGIScript.cpp index a29f1eb..8731023 100644 --- a/src/CGIScript.cpp +++ b/src/CGIScript.cpp @@ -17,20 +17,20 @@ CGIScript::~CGIScript() { pclose(m_pipe); - for (auto key : m_environment_variables) + for (const auto* key : m_environment_variables) unsetenv(key); } void CGIScript::set_environment(const char* key, const char* value) { m_environment_variables.push_back(key); - setenv(key, value, true); + setenv(key, value, 1); } bool CGIScript::open() { m_pipe = popen(m_script_path.c_str(), "r"); - if (!m_pipe) { + if (m_pipe == nullptr) { perror("cfws: popen"); return false; } @@ -43,7 +43,7 @@ std::string CGIScript::read_output() { std::stringstream sstream; - char ch; + char ch = 0; while ((ch = fgetc(m_pipe)) != EOF) sstream << ch; diff --git a/src/CGIScript.h b/src/CGIScript.h index 5a7f46e..a3e40fd 100644 --- a/src/CGIScript.h +++ b/src/CGIScript.h @@ -15,7 +15,7 @@ public: std::string read_output(); private: - FILE* m_pipe; + FILE* m_pipe {}; const std::string& m_script_path; bool m_is_open { false }; diff --git a/src/ClientConnection.cpp b/src/ClientConnection.cpp index 6a0670c..c434212 100644 --- a/src/ClientConnection.cpp +++ b/src/ClientConnection.cpp @@ -10,13 +10,13 @@ ClientConnection::ClientConnection(int socket) { } -HttpRequest ClientConnection::read_request() +HttpRequest ClientConnection::read_request() const { // TODO: Clean up this code to ensure it works with multiple lines // and not risk a buffer overflow. constexpr int BUFFER_SIZE = 4096; char buffer[BUFFER_SIZE + 1]; - int n; + int n = 0; memset(buffer, 0, BUFFER_SIZE); while ((n = read(m_socket_fd, buffer, BUFFER_SIZE - 1)) > 0) { @@ -29,7 +29,7 @@ HttpRequest ClientConnection::read_request() return HttpRequest(buffer); } -bool ClientConnection::send(const HttpResponse& response) +bool ClientConnection::send(const HttpResponse& response) const { if (!m_is_open) return false; diff --git a/src/ClientConnection.h b/src/ClientConnection.h index 9d5eadd..fee0aeb 100644 --- a/src/ClientConnection.h +++ b/src/ClientConnection.h @@ -7,9 +7,9 @@ class ClientConnection { public: ClientConnection(int socket); - HttpRequest read_request(); + HttpRequest read_request() const; - bool send(const HttpResponse&); + bool send(const HttpResponse&) const; void close_connection(); private: diff --git a/src/HttpRequest.cpp b/src/HttpRequest.cpp index d1d183e..37c85fd 100644 --- a/src/HttpRequest.cpp +++ b/src/HttpRequest.cpp @@ -11,14 +11,14 @@ HttpRequest::HttpRequest(const std::string& request_string) line = s.substr(0, pos); if (line.find("GET ") != std::string::npos) { - m_uri = s.substr(4, line.find(" ", 5) - 4); + m_uri = s.substr(4, line.find(' ', 5) - 4); std::cout << m_uri << std::endl; } // If the line contains a colon, we assume it's a header. // TODO: This may not always be the case. size_t delim_pos = 0; - if ((delim_pos = line.find(":")) != std::string::npos) { + if ((delim_pos = line.find(':')) != std::string::npos) { std::string header_key = s.substr(0, delim_pos); std::string header_value = s.substr(delim_pos + 2, s.find("\r\n") - delim_pos - 2); m_headers[header_key] = header_value; diff --git a/src/HttpResponse.cpp b/src/HttpResponse.cpp index 2f330e5..c8afc63 100644 --- a/src/HttpResponse.cpp +++ b/src/HttpResponse.cpp @@ -9,14 +9,14 @@ void HttpResponse::add_headers_and_content(const std::string& input) size_t pos = 0; std::string s = input; std::string line; - while ((pos = s.find("\n")) != std::string::npos) { + while ((pos = s.find('\n')) != std::string::npos) { line = s.substr(0, pos + 1); if (is_parsing_headers) { size_t delim_pos = 0; - if ((delim_pos = line.find(":")) != std::string::npos) { + if ((delim_pos = line.find(':')) != std::string::npos) { std::string header_key = s.substr(0, delim_pos); - std::string header_value = s.substr(delim_pos + 2, s.find("\n") - delim_pos - 2); + std::string header_value = s.substr(delim_pos + 2, s.find('\n') - delim_pos - 2); m_headers[header_key] = header_value; } else { is_parsing_headers = false; diff --git a/src/ServerConnection.cpp b/src/ServerConnection.cpp index afe9bcb..64692b6 100644 --- a/src/ServerConnection.cpp +++ b/src/ServerConnection.cpp @@ -1,8 +1,8 @@ #include "ServerConnection.h" #include <arpa/inet.h> +#include <csignal> #include <netdb.h> -#include <signal.h> #include <sys/ioctl.h> #include <sys/socket.h> #include <sys/time.h> @@ -19,13 +19,13 @@ static void error_and_die(const char* message) ServerConnection::ServerConnection(int port) { - sockaddr_in address; + sockaddr_in address {}; int socket_options = 1; if ((m_socket_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) error_and_die("Failed to create socket"); - if (setsockopt(m_socket_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &socket_options, sizeof(socket_options))) + if (setsockopt(m_socket_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &socket_options, sizeof(socket_options)) != 0) error_and_die("setsockopt"); address.sin_family = AF_INET; @@ -39,8 +39,8 @@ ServerConnection::ServerConnection(int port) error_and_die("listen"); } -ClientConnection ServerConnection::accept_client_connection() +ClientConnection ServerConnection::accept_client_connection() const { int client_socket = accept(m_socket_fd, (sockaddr*)nullptr, nullptr); - return ClientConnection(client_socket); + return { client_socket }; } diff --git a/src/ServerConnection.h b/src/ServerConnection.h index f01a1b6..8f0af70 100644 --- a/src/ServerConnection.h +++ b/src/ServerConnection.h @@ -6,7 +6,7 @@ class ServerConnection { public: ServerConnection(int port); - ClientConnection accept_client_connection(); + ClientConnection accept_client_connection() const; private: int m_socket_fd; diff --git a/src/main.cpp b/src/main.cpp index d8c343a..89a8139 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,7 +10,7 @@ #include "HttpResponse.h" #include "ServerConnection.h" -static HttpResponse serve_from_filesystem(HttpRequest request) +static HttpResponse serve_from_filesystem(const HttpRequest& request) { namespace fs = std::filesystem; @@ -50,7 +50,7 @@ static HttpResponse serve_from_filesystem(HttpRequest request) return response; } -static HttpResponse serve_from_cgi(const std::string& script_path, HttpRequest request) +static HttpResponse serve_from_cgi(const std::string& script_path, const HttpRequest& request) { HttpResponse response; response.add_header("Server", "cfws"); @@ -85,8 +85,8 @@ static HttpResponse serve_from_cgi(const std::string& script_path, HttpRequest r } static option long_options[] = { - { "cgi", required_argument, NULL, 'c' }, - { "port", required_argument, NULL, 'p' }, + { "cgi", required_argument, nullptr, 'c' }, + { "port", required_argument, nullptr, 'p' }, }; int main(int argc, char** argv) @@ -95,7 +95,7 @@ int main(int argc, char** argv) bool in_cgi_mode = false; std::string cgi_program_name; - int c; + int c = 0; int option_index = 0; while ((c = getopt_long(argc, argv, "c:p:", long_options, &option_index)) != -1) { switch (c) { |