LibC+userspace: Make everything compile with -Wall -Wextra -Werror
I added -Wall -Wextra -Werror as public compile flags to libc. Now everything in userspace in compiled using these flags. I made all necessary changes to allow compilation to work. Only exception is execvp which has a large stack usage. Maybe it should use malloc for the buffer but posix allows ENOMEM only when kernel is out of memory... This can be fixed when fexecve is implemented and there is no need for absolute path.
This commit is contained in:
parent
f077e17b2a
commit
00d57d783e
|
@ -47,6 +47,7 @@ add_library(libc ${LIBC_SOURCES})
|
|||
add_dependencies(libc headers crtx-install)
|
||||
|
||||
target_compile_options(libc PRIVATE -g -Wstack-usage=512)
|
||||
target_compile_options(libc PUBLIC -Wall -Wextra -Werror -Wno-error=stack-usage=)
|
||||
|
||||
add_custom_target(libc-install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/libc.a ${BANAN_LIB}/
|
||||
|
|
|
@ -104,7 +104,7 @@ struct passwd* getpwnam(const char* name)
|
|||
{
|
||||
passwd* pwd;
|
||||
setpwent();
|
||||
while (pwd = getpwent())
|
||||
while ((pwd = getpwent()))
|
||||
if (strcmp(pwd->pw_name, name) == 0)
|
||||
return pwd;
|
||||
return nullptr;
|
||||
|
@ -114,7 +114,7 @@ struct passwd* getpwuid(uid_t uid)
|
|||
{
|
||||
passwd* pwd;
|
||||
setpwent();
|
||||
while (pwd = getpwent())
|
||||
while ((pwd = getpwent()))
|
||||
if (pwd->pw_uid == uid)
|
||||
return pwd;
|
||||
return nullptr;
|
||||
|
|
|
@ -13,7 +13,7 @@ struct FILE
|
|||
bool eof { false };
|
||||
bool error { false };
|
||||
|
||||
unsigned char buffer[BUFSIZ];
|
||||
unsigned char buffer[BUFSIZ] {};
|
||||
uint32_t buffer_index { 0 };
|
||||
};
|
||||
|
||||
|
@ -260,7 +260,7 @@ size_t fread(void* buffer, size_t size, size_t nitems, FILE* file)
|
|||
|
||||
while (nread < target)
|
||||
{
|
||||
size_t ret = syscall(SYS_READ, file->fd, (uint8_t*)buffer + nread, target - nread);
|
||||
ssize_t ret = syscall(SYS_READ, file->fd, (uint8_t*)buffer + nread, target - nread);
|
||||
|
||||
if (ret < 0)
|
||||
file->error = true;
|
||||
|
|
|
@ -600,7 +600,6 @@ int execute_piped_commands(BAN::Vector<BAN::Vector<BAN::String>>& commands)
|
|||
int next_stdin = STDIN_FILENO;
|
||||
for (size_t i = 0; i < commands.size(); i++)
|
||||
{
|
||||
bool first = (i == 0);
|
||||
bool last = (i == commands.size() - 1);
|
||||
|
||||
int pipefd[2] { -1, STDOUT_FILENO };
|
||||
|
@ -831,7 +830,7 @@ int prompt_length()
|
|||
void print_prompt()
|
||||
{
|
||||
auto prompt = get_prompt();
|
||||
fprintf(stdout, "%.*s", prompt.size(), prompt.data());
|
||||
fprintf(stdout, "%.*s", (int)prompt.size(), prompt.data());
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <BAN/Vector.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -85,13 +86,13 @@ BAN::Array<Position, 2> find_grid_first_moves(const Grid& grid)
|
|||
if (grid[y][x] == 'S')
|
||||
{
|
||||
size_t index = 0;
|
||||
if (can_enter_tile_from(grid[y - 1][x], Direction::South))
|
||||
if (index < 2 && can_enter_tile_from(grid[y - 1][x], Direction::South))
|
||||
positions[index++] = { x, y - 1, Direction::South };
|
||||
if (can_enter_tile_from(grid[y + 1][x], Direction::North))
|
||||
if (index < 2 && can_enter_tile_from(grid[y + 1][x], Direction::North))
|
||||
positions[index++] = { x, y + 1, Direction::North };
|
||||
if (can_enter_tile_from(grid[y][x - 1], Direction::East))
|
||||
if (index < 2 && can_enter_tile_from(grid[y][x - 1], Direction::East))
|
||||
positions[index++] = { x - 1, y, Direction::East };
|
||||
if (can_enter_tile_from(grid[y][x + 1], Direction::West))
|
||||
if (index < 2 && can_enter_tile_from(grid[y][x + 1], Direction::West))
|
||||
positions[index++] = { x + 1, y, Direction::West };
|
||||
ASSERT(index == 2);
|
||||
return positions;
|
||||
|
@ -268,11 +269,11 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
printf("puzzle1: %lld\n", puzzle1(fp));
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle1(fp));
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
printf("puzzle2: %lld\n", puzzle2(fp));
|
||||
printf("puzzle2: %" PRId64 "\n", puzzle2(fp));
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ int puzzle2(FILE* fp)
|
|||
continue;
|
||||
ptr += 5;
|
||||
|
||||
int id = parse_int_and_advance(ptr);
|
||||
parse_int_and_advance(ptr);
|
||||
ptr += 2;
|
||||
|
||||
int needed_red = 0;
|
||||
|
|
|
@ -21,9 +21,9 @@ int puzzle1(FILE* fp)
|
|||
|
||||
int result = 0;
|
||||
|
||||
for (ssize_t y = 0; y < lines.size(); y++)
|
||||
for (size_t y = 0; y < lines.size(); y++)
|
||||
{
|
||||
for (ssize_t x = 0; x < lines[y].size(); x++)
|
||||
for (size_t x = 0; x < lines[y].size(); x++)
|
||||
{
|
||||
if (!isdigit(lines[y][x]))
|
||||
continue;
|
||||
|
@ -32,14 +32,14 @@ int puzzle1(FILE* fp)
|
|||
|
||||
for (ssize_t y_off = -1; y_off <= 1; y_off++)
|
||||
{
|
||||
if (y + y_off < 0)
|
||||
if ((ssize_t)y < y_off)
|
||||
continue;
|
||||
if (y + y_off >= lines.size())
|
||||
break;
|
||||
|
||||
for (ssize_t x_off = -1;; x_off++)
|
||||
{
|
||||
if (x + x_off < 0)
|
||||
if ((ssize_t)x < x_off)
|
||||
continue;
|
||||
if (x + x_off >= lines[y + y_off].size())
|
||||
break;
|
||||
|
@ -94,9 +94,9 @@ int puzzle2(FILE* fp)
|
|||
// Map numbers next to '*' to asterisk's coordinates.
|
||||
HashMap<uint32_t, Vector<int>> gears;
|
||||
|
||||
for (ssize_t y = 0; y < lines.size(); y++)
|
||||
for (size_t y = 0; y < lines.size(); y++)
|
||||
{
|
||||
for (ssize_t x = 0; x < lines[y].size(); x++)
|
||||
for (size_t x = 0; x < lines[y].size(); x++)
|
||||
{
|
||||
if (!isdigit(lines[y][x]))
|
||||
continue;
|
||||
|
@ -111,14 +111,14 @@ int puzzle2(FILE* fp)
|
|||
|
||||
for (ssize_t y_off = -1; y_off <= 1; y_off++)
|
||||
{
|
||||
if (y + y_off < 0)
|
||||
if ((ssize_t)y < y_off)
|
||||
continue;
|
||||
if (y + y_off >= lines.size())
|
||||
break;
|
||||
|
||||
for (ssize_t x_off = -1;; x_off++)
|
||||
{
|
||||
if (x + x_off < 0)
|
||||
if ((ssize_t)x < x_off)
|
||||
continue;
|
||||
if (x + x_off >= lines[y + y_off].size())
|
||||
break;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <BAN/HashMap.h>
|
||||
#include <BAN/Vector.h>
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
|
||||
using i64 = int64_t;
|
||||
|
@ -31,7 +32,7 @@ i64 puzzle1(FILE* fp)
|
|||
line = line.substring(0, line.size() - 1);
|
||||
|
||||
auto seeds_str = MUST(line.split(' '));
|
||||
for (i64 i = 1; i < seeds_str.size(); i++)
|
||||
for (size_t i = 1; i < seeds_str.size(); i++)
|
||||
MUST(current.emplace_back(parse_i64(seeds_str[i]), 0));
|
||||
}
|
||||
|
||||
|
@ -92,7 +93,7 @@ i64 puzzle2(FILE* fp)
|
|||
BAN::StringView line(buffer);
|
||||
line = line.substring(0, line.size() - 1);
|
||||
auto seeds_str = MUST(line.split(' '));
|
||||
for (i64 i = 1; i < seeds_str.size(); i += 2)
|
||||
for (size_t i = 1; i < seeds_str.size(); i += 2)
|
||||
MUST(current.emplace_back(parse_i64(seeds_str[i]), parse_i64(seeds_str[i + 1]), 0));
|
||||
}
|
||||
|
||||
|
@ -179,11 +180,11 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
printf("puzzle1: %lld\n", puzzle1(fp));
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle1(fp));
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
printf("puzzle2: %lld\n", puzzle2(fp));
|
||||
printf("puzzle2: %" PRId64 "\n", puzzle2(fp));
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <BAN/Vector.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -112,11 +113,11 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
printf("puzzle1: %lld\n", puzzle1(fp));
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle1(fp));
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
printf("puzzle2: %lld\n", puzzle2(fp));
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle2(fp));
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <BAN/String.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -142,11 +143,11 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
printf("puzzle1: %lld\n", puzzle(fp, false));
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle(fp, false));
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
printf("puzzle2: %lld\n", puzzle(fp, true));
|
||||
printf("puzzle2: %" PRId64 "\n", puzzle(fp, true));
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <BAN/String.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -121,11 +122,11 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
printf("puzzle1: %lld\n", puzzle1(fp));
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle1(fp));
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
printf("puzzle2: %lld\n", puzzle2(fp));
|
||||
printf("puzzle2: %" PRId64 "\n", puzzle2(fp));
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <BAN/Vector.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -114,11 +115,11 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
printf("puzzle1: %lld\n", puzzle1(fp));
|
||||
printf("puzzle1: %" PRId64 "\n", puzzle1(fp));
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
printf("puzzle2: %lld\n", puzzle2(fp));
|
||||
printf("puzzle2: %" PRId64 "\n", puzzle2(fp));
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
bool cat_file(int fd)
|
||||
{
|
||||
char buffer[1024];
|
||||
size_t n_read;
|
||||
while (ssize_t n_read = read(fd, buffer, sizeof(buffer)))
|
||||
{
|
||||
if (n_read == -1)
|
||||
|
|
|
@ -59,7 +59,7 @@ bool copy_file(const BAN::String& source, BAN::String destination)
|
|||
break;
|
||||
}
|
||||
|
||||
size_t written = 0;
|
||||
ssize_t written = 0;
|
||||
while (written < nread)
|
||||
{
|
||||
ssize_t nwrite = write(dest_fd, buffer, nread - written);
|
||||
|
|
|
@ -10,9 +10,7 @@
|
|||
int parse_int(const char* val)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
const char* ptr = val;
|
||||
while (*ptr)
|
||||
for (const char* ptr = val; *ptr; ptr++)
|
||||
{
|
||||
if (!isdigit(*ptr))
|
||||
{
|
||||
|
@ -20,9 +18,7 @@ int parse_int(const char* val)
|
|||
exit(1);
|
||||
}
|
||||
result = (result * 10) + (*ptr - '0');
|
||||
*ptr++;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <BAN/Optional.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
|
||||
BAN::Optional<uint64_t> parse_u64(const uint8_t*& data, size_t data_size)
|
||||
|
@ -86,7 +87,7 @@ BAN::ErrorOr<BAN::UniqPtr<Image>> load_netbpm(const void* mmap_addr, size_t size
|
|||
return BAN::Error::from_errno(EINVAL);
|
||||
}
|
||||
|
||||
printf("Netbpm image %llux%llu\n", *width, *height);
|
||||
printf("Netbpm image %" PRIuPTR "x%" PRIuPTR "\n", *width, *height);
|
||||
|
||||
BAN::Vector<Image::Color> bitmap;
|
||||
TRY(bitmap.resize(*width * *height));
|
||||
|
|
|
@ -138,7 +138,7 @@ int list_directory(const BAN::String& path, config_t config)
|
|||
}
|
||||
|
||||
struct dirent* dirent;
|
||||
while (dirent = readdir(dirp))
|
||||
while ((dirent = readdir(dirp)))
|
||||
{
|
||||
if (!config.all && dirent->d_name[0] == '.')
|
||||
continue;
|
||||
|
@ -216,15 +216,15 @@ int list_directory(const BAN::String& path, config_t config)
|
|||
|
||||
for (const auto& full_entry : full_entries)
|
||||
printf("%*s %*s %*s %*s %*s %*s %*s %*s %s\n",
|
||||
max_entry.access.size(), full_entry.access.data(),
|
||||
max_entry.hard_links.size(), full_entry.hard_links.data(),
|
||||
max_entry.owner_name.size(), full_entry.owner_name.data(),
|
||||
max_entry.owner_group.size(), full_entry.owner_group.data(),
|
||||
max_entry.size.size(), full_entry.size.data(),
|
||||
max_entry.month.size(), full_entry.month.data(),
|
||||
max_entry.day.size(), full_entry.day.data(),
|
||||
max_entry.time.size(), full_entry.time.data(),
|
||||
full_entry.full_name.data()
|
||||
(int)max_entry.access.size(), full_entry.access.data(),
|
||||
(int)max_entry.hard_links.size(), full_entry.hard_links.data(),
|
||||
(int)max_entry.owner_name.size(), full_entry.owner_name.data(),
|
||||
(int)max_entry.owner_group.size(), full_entry.owner_group.data(),
|
||||
(int)max_entry.size.size(), full_entry.size.data(),
|
||||
(int)max_entry.month.size(), full_entry.month.data(),
|
||||
(int)max_entry.day.size(), full_entry.day.data(),
|
||||
(int)max_entry.time.size(), full_entry.time.data(),
|
||||
full_entry.full_name.data()
|
||||
);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
void usage(int ret, char* arg0)
|
||||
{
|
||||
FILE* fout = (ret == 0) ? stdout : stderr;
|
||||
fprintf(fout, "usage: %s [OPTIONS]...\n");
|
||||
fprintf(fout, "usage: %s [OPTIONS]...\n", arg0);
|
||||
fprintf(fout, " -s, --shutdown Shutdown the system (default)\n");
|
||||
fprintf(fout, " -r, --reboot Reboot the system\n");
|
||||
fprintf(fout, " -h, --help Show this message\n");
|
||||
|
|
|
@ -54,13 +54,13 @@ bool delete_recursive(const char* path)
|
|||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void usage(const char* argv0, int ret)
|
||||
{
|
||||
FILE* out = (ret == 0) ? stdout : stderr;
|
||||
fprintf(out, "usage: %s [OPTIONS]... FILE...\n");
|
||||
fprintf(out, "usage: %s [OPTIONS]... FILE...\n", argv0);
|
||||
fprintf(out, " remove each FILE\n");
|
||||
fprintf(out, "OPTIONS:\n");
|
||||
fprintf(out, " -r remove directories and their contents recursively\n");
|
||||
|
|
|
@ -27,7 +27,7 @@ bool g_running = true;
|
|||
Point g_grid_size = { 21, 21 };
|
||||
Direction g_direction = Direction::Up;
|
||||
Point g_head = { 10, 10 };
|
||||
int g_tail_target = 3;
|
||||
size_t g_tail_target = 3;
|
||||
int g_score = 0;
|
||||
BAN::Vector<Point> g_tail;
|
||||
Point g_apple;
|
||||
|
@ -133,6 +133,8 @@ void update()
|
|||
if (g_direction != Direction::Left)
|
||||
new_direction = Direction::Right;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -154,6 +156,8 @@ void update()
|
|||
case Direction::Right:
|
||||
g_head.x++;
|
||||
break;
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
if (g_head.x < 0 || g_head.y < 0 || g_head.x >= g_grid_size.x || g_head.y >= g_grid_size.y)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
void print_timestamp(timespec ts)
|
||||
{
|
||||
auto time = BAN::from_unix_time(ts.tv_sec);
|
||||
printf("%04d-%02d-%02d %02d:%02d:%02d.%09d",
|
||||
printf("%04d-%02d-%02d %02d:%02d:%02d.%09ld",
|
||||
time.year, time.month, time.day,
|
||||
time.hour, time.minute, time.second,
|
||||
ts.tv_nsec
|
||||
|
|
|
@ -16,7 +16,7 @@ int main(int argc, char** argv)
|
|||
|
||||
uint8_t buffer[1024];
|
||||
while (size_t ret = fread(buffer, 1, sizeof(buffer), fp))
|
||||
for (int j = 0; j < ret; j++)
|
||||
for (size_t j = 0; j < ret; j++)
|
||||
sum += buffer[j];
|
||||
|
||||
if (ferror(fp))
|
||||
|
|
Loading…
Reference in New Issue