From d50d997d6e32e9ddafea8c777a7fb935840e225d Mon Sep 17 00:00:00 2001 From: "Enrico Fraccaroli (Galfurian)" Date: Thu, 24 Aug 2023 12:17:16 -0400 Subject: [PATCH] Wrap single line statements inside braces. --- libc/inc/sys/unistd.h | 2 +- libc/src/abort.c | 3 +- libc/src/assert.c | 2 +- libc/src/fcvt.c | 3 +- libc/src/grp.c | 46 +++--- libc/src/io/debug.c | 20 +-- libc/src/libc_start.c | 4 +- libc/src/libgen.c | 8 +- libc/src/math.c | 15 +- libc/src/pwd.c | 57 +++++--- libc/src/sched.c | 2 +- libc/src/setenv.c | 18 ++- libc/src/stdlib.c | 7 +- libc/src/string.c | 33 +++-- libc/src/sys/ipc.c | 31 ++-- libc/src/sys/mman.c | 4 +- libc/src/sys/unistd.c | 2 +- libc/src/sys/utsname.c | 4 +- libc/src/termios.c | 8 +- libc/src/time.c | 14 +- libc/src/unistd/chdir.c | 2 +- libc/src/unistd/close.c | 2 +- libc/src/unistd/creat.c | 2 +- libc/src/unistd/exec.c | 24 ++-- libc/src/unistd/fork.c | 2 +- libc/src/unistd/getcwd.c | 2 +- libc/src/unistd/getdents.c | 2 +- libc/src/unistd/getgid.c | 2 +- libc/src/unistd/getpgid.c | 2 +- libc/src/unistd/getpid.c | 2 +- libc/src/unistd/getppid.c | 2 +- libc/src/unistd/getsid.c | 2 +- libc/src/unistd/getuid.c | 2 +- libc/src/unistd/interval.c | 4 +- libc/src/unistd/kill.c | 2 +- libc/src/unistd/lseek.c | 2 +- libc/src/unistd/mkdir.c | 2 +- libc/src/unistd/nice.c | 2 +- libc/src/unistd/open.c | 2 +- libc/src/unistd/read.c | 2 +- libc/src/unistd/reboot.c | 2 +- libc/src/unistd/rmdir.c | 2 +- libc/src/unistd/setgid.c | 2 +- libc/src/unistd/setpgid.c | 2 +- libc/src/unistd/setsid.c | 2 +- libc/src/unistd/setuid.c | 2 +- libc/src/unistd/signal.c | 8 +- libc/src/unistd/stat.c | 2 +- libc/src/unistd/unlink.c | 2 +- libc/src/unistd/waitpid.c | 16 ++- libc/src/unistd/write.c | 2 +- libc/src/vscanf.c | 62 ++++---- libc/src/vsprintf.c | 33 +++-- mentos/inc/drivers/keyboard/keymap.h | 2 +- mentos/inc/hardware/timer.h | 2 +- mentos/src/boot.c | 25 ++-- mentos/src/drivers/keyboard/keyboard.c | 71 ++++----- mentos/src/drivers/keyboard/keymap.c | 8 +- mentos/src/drivers/mouse.c | 20 +-- mentos/src/drivers/ps2.c | 49 ++++--- mentos/src/drivers/rtc.c | 25 ++-- mentos/src/fs/ext2.c | 175 +++++++++++++---------- mentos/src/fs/ioctl.c | 4 +- mentos/src/fs/namei.c | 4 +- mentos/src/fs/open.c | 16 +-- mentos/src/fs/procfs.c | 89 +++++++----- mentos/src/fs/read_write.c | 8 +- mentos/src/fs/readdir.c | 17 +-- mentos/src/fs/stat.c | 4 +- mentos/src/fs/vfs.c | 29 ++-- mentos/src/hardware/cpuid.c | 2 +- mentos/src/hardware/timer.c | 130 +++++++++-------- mentos/src/io/debug.c | 20 +-- mentos/src/io/proc_feedback.c | 4 +- mentos/src/io/proc_ipc.c | 4 +- mentos/src/io/proc_running.c | 58 ++++---- mentos/src/io/proc_system.c | 31 ++-- mentos/src/io/proc_video.c | 29 ++-- mentos/src/io/stdio.c | 34 +++-- mentos/src/io/vga/vga.c | 76 ++++++---- mentos/src/io/video.c | 28 ++-- mentos/src/ipc/msg.c | 25 ++-- mentos/src/kernel/sys.c | 4 +- mentos/src/klib/fcvt.c | 3 +- mentos/src/klib/hashmap.c | 39 +++-- mentos/src/klib/libgen.c | 8 +- mentos/src/klib/list.c | 5 +- mentos/src/klib/math.c | 15 +- mentos/src/klib/ndtree.c | 45 +++--- mentos/src/klib/rbtree.c | 83 ++++++----- mentos/src/klib/spinlock.c | 3 +- mentos/src/klib/string.c | 29 ++-- mentos/src/klib/time.c | 12 +- mentos/src/klib/vscanf.c | 67 +++++---- mentos/src/klib/vsprintf.c | 32 +++-- mentos/src/mem/kheap.c | 18 ++- mentos/src/mem/paging.c | 61 ++++---- mentos/src/mem/slab.c | 16 ++- mentos/src/mem/vmem_map.c | 5 +- mentos/src/mem/zone_allocator.c | 13 +- mentos/src/multiboot.c | 35 +++-- mentos/src/process/process.c | 50 ++++--- mentos/src/process/scheduler.c | 89 +++++++----- mentos/src/process/scheduler_algorithm.c | 15 +- mentos/src/process/scheduler_feedback.c | 11 +- mentos/src/sys/module.c | 14 +- mentos/src/sys/utsname.c | 14 +- mentos/src/system/printk.c | 2 +- mentos/src/system/signal.c | 6 +- mentos/src/system/syscall.c | 15 +- 110 files changed, 1252 insertions(+), 930 deletions(-) diff --git a/libc/inc/sys/unistd.h b/libc/inc/sys/unistd.h index d54c6e4..a7aeb82 100644 --- a/libc/inc/sys/unistd.h +++ b/libc/inc/sys/unistd.h @@ -246,4 +246,4 @@ ssize_t getdents(int fd, dirent_t *dirp, unsigned int count); /// shall return a non-zero value that is the number of seconds until the /// previous request would have generated a SIGALRM signal. Otherwise, alarm() /// shall return 0. -int alarm(int seconds); +unsigned alarm(int seconds); diff --git a/libc/src/abort.c b/libc/src/abort.c index 5596b77..4289026 100644 --- a/libc/src/abort.c +++ b/libc/src/abort.c @@ -4,9 +4,9 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "string.h" #include "signal.h" #include "stdio.h" +#include "string.h" /// @brief Since there could be signal handlers listening for the abort, we need /// to keep track at which stage of the abort we are. @@ -28,7 +28,6 @@ void abort(void) /* Send signal which possibly calls a user handler. */ if (stage == 1) { - // We must allow recursive calls of abort int save_stage = stage; diff --git a/libc/src/assert.c b/libc/src/assert.c index cbb53a6..09e1824 100644 --- a/libc/src/assert.c +++ b/libc/src/assert.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "assert.h" -#include "stdlib.h" #include "stdio.h" +#include "stdlib.h" void __assert_fail(const char *assertion, const char *file, const char *function, unsigned int line) { diff --git a/libc/src/fcvt.c b/libc/src/fcvt.c index 6b5f1b5..add331e 100644 --- a/libc/src/fcvt.c +++ b/libc/src/fcvt.c @@ -83,8 +83,9 @@ static void cvt(double arg, int ndigits, int *decpt, int *sign, char *buf, unsig *p1 = '1'; (*decpt)++; if (eflag == 0) { - if (p > buf) + if (p > buf) { *p = '0'; + } p++; } } diff --git a/libc/src/grp.c b/libc/src/grp.c index 5ae5fe6..06216e1 100644 --- a/libc/src/grp.c +++ b/libc/src/grp.c @@ -4,13 +4,13 @@ /// See LICENSE.md for details. #include "grp.h" -#include "sys/unistd.h" -#include "sys/errno.h" -#include "io/debug.h" #include "assert.h" -#include "string.h" -#include "stdio.h" #include "fcntl.h" +#include "io/debug.h" +#include "stdio.h" +#include "string.h" +#include "sys/errno.h" +#include "sys/unistd.h" /// Holds the file descriptor while we are working with `/etc/group`. static int __fd = -1; @@ -24,14 +24,17 @@ static inline void __parse_line(group_t *grp, char *buf) assert(grp && "Received null grp!"); char *token; // Parse the group name. - if ((token = strtok(buf, ":")) != NULL) + if ((token = strtok(buf, ":")) != NULL) { grp->gr_name = token; + } // Parse the group passwd. - if ((token = strtok(NULL, ":")) != NULL) + if ((token = strtok(NULL, ":")) != NULL) { grp->gr_passwd = token; + } // Parse the group id. - if ((token = strtok(NULL, ":")) != NULL) + if ((token = strtok(NULL, ":")) != NULL) { grp->gr_gid = atoi(token); + } size_t found_users = 0; while ((token = strtok(NULL, ",\n\0")) != NULL && found_users < MAX_MEMBERS_PER_GROUP) { @@ -57,8 +60,9 @@ static inline char *__search_entry(int fd, char *buf, int buflen, const char *na int pos = 0; while ((ret = read(fd, &c, 1U))) { // Skip carriage return. - if (c == '\r') + if (c == '\r') { continue; + } if (pos >= buflen) { errno = ERANGE; return NULL; @@ -69,8 +73,9 @@ static inline char *__search_entry(int fd, char *buf, int buflen, const char *na buf[pos] = 0; // Check the entry. if (name) { - if (strncmp(buf, name, strlen(name)) == 0) + if (strncmp(buf, name, strlen(name)) == 0) { return buf; + } } else { int gid_start = -1, col_count = 0; for (int i = 0; i < pos; ++i) { @@ -85,15 +90,17 @@ static inline char *__search_entry(int fd, char *buf, int buflen, const char *na // Parse the gid. int found_gid = atoi(&buf[gid_start]); // Check the gid. - if (found_gid == gid) + if (found_gid == gid) { return buf; + } } } // Reset the index. pos = 0; // If we have reached the EOF stop. - if (ret == EOF) + if (ret == EOF) { break; + } } else { buf[pos++] = c; } @@ -108,23 +115,26 @@ group_t *getgrgid(gid_t gid) static char buffer[BUFSIZ]; group_t *result; - if (!getgrgid_r(gid, &grp, buffer, BUFSIZ, &result)) + if (!getgrgid_r(gid, &grp, buffer, BUFSIZ, &result)) { return NULL; + } return &grp; } group_t *getgrnam(const char *name) { - if (name == NULL) + if (name == NULL) { return NULL; + } static group_t grp; static char buffer[BUFSIZ]; group_t *result; - if (!getgrnam_r(name, &grp, buffer, BUFSIZ, &result)) + if (!getgrnam_r(name, &grp, buffer, BUFSIZ, &result)) { return NULL; + } return &grp; } @@ -199,8 +209,9 @@ group_t *getgrent(void) static char buffer[BUFSIZ]; while ((ret = read(__fd, &c, 1U))) { // Skip carriage return. - if (c == '\r') + if (c == '\r') { continue; + } if (pos >= BUFSIZ) { errno = ERANGE; @@ -220,8 +231,9 @@ group_t *getgrent(void) } // If we have reached the EOF stop. - if (ret == EOF) + if (ret == EOF) { break; + } } else { buffer[pos++] = c; diff --git a/libc/src/io/debug.c b/libc/src/io/debug.c index c282104..20a00b4 100644 --- a/libc/src/io/debug.c +++ b/libc/src/io/debug.c @@ -4,12 +4,12 @@ /// See LICENSE.md for details. #include "io/debug.h" -#include "io/port_io.h" #include "io/ansi_colors.h" -#include "sys/bitops.h" -#include "string.h" -#include "stdio.h" +#include "io/port_io.h" #include "math.h" +#include "stdio.h" +#include "string.h" +#include "sys/bitops.h" /// Serial port for QEMU. #define SERIAL_COM1 (0x03F8) @@ -23,8 +23,9 @@ void dbg_putchar(char c) void dbg_puts(const char *s) { - while ((*s) != 0) + while ((*s) != 0) { dbg_putchar(*s++); + } } static inline void __debug_print_header(const char *file, const char *fun, int line, short log_level, char *header) @@ -76,8 +77,9 @@ static inline void __debug_print_header(const char *file, const char *fun, int l void set_log_level(int level) { - if ((level >= LOGLEVEL_EMERG) && (level <= LOGLEVEL_DEBUG)) + if ((level >= LOGLEVEL_EMERG) && (level <= LOGLEVEL_DEBUG)) { max_log_level = level; + } } int get_log_level() @@ -92,8 +94,9 @@ void dbg_printf(const char *file, const char *fun, int line, char *header, short static short new_line = 1; // Stage 1: FORMAT - if (strlen(format) >= BUFSIZ) + if (strlen(format) >= BUFSIZ) { return; + } // Start variabile argument's list. va_list ap; @@ -132,8 +135,9 @@ const char *to_human_size(unsigned long bytes) int i = 0; double dblBytes = bytes; if (bytes > 1024) { - for (i = 0; (bytes / 1024) > 0 && i < length - 1; i++, bytes /= 1024) + for (i = 0; (bytes / 1024) > 0 && i < length - 1; i++, bytes /= 1024) { dblBytes = bytes / 1024.0; + } } sprintf(output, "%.02lf %2s", dblBytes, suffix[i]); return output; diff --git a/libc/src/libc_start.c b/libc/src/libc_start.c index 410f994..01683ae 100644 --- a/libc/src/libc_start.c +++ b/libc/src/libc_start.c @@ -4,11 +4,11 @@ /// See LICENSE.md for details. #include "sys/unistd.h" +#include "assert.h" #include "stdlib.h" #include "string.h" -#include "assert.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" /// @brief Reference to the `environ` variable in `setenv.c`. extern char **environ; diff --git a/libc/src/libgen.c b/libc/src/libgen.c index bd57fad..69ee687 100644 --- a/libc/src/libgen.c +++ b/libc/src/libgen.c @@ -3,13 +3,13 @@ /// @copyright (c) 2014-2023 This file is distributed under the MIT License. /// See LICENSE.md for details. +#include "libgen.h" +#include "io/debug.h" +#include "limits.h" +#include "string.h" #include #include #include -#include "libgen.h" -#include "string.h" -#include "limits.h" -#include "io/debug.h" int dirname(const char *path, char *buffer, size_t buflen) { diff --git a/libc/src/math.c b/libc/src/math.c index 55daa98..8b98abb 100644 --- a/libc/src/math.c +++ b/libc/src/math.c @@ -18,26 +18,30 @@ double round(double x) double floor(double x) { if (x > -1.0 && x < 1.0) { - if (x >= 0) + if (x >= 0) { return 0.0; + } return -1.0; } int i = (int)x; - if (x < 0) + if (x < 0) { return (double)(i - 1); + } return (double)i; } double ceil(double x) { if (x > -1.0 && x < 1.0) { - if (x <= 0) + if (x <= 0) { return 0.0; + } return 1.0; } int i = (int)x; - if (x > 0) + if (x > 0) { return (double)(i + 1); + } return (double)i; } @@ -145,8 +149,9 @@ double ln(double x) double logx(double x, double y) { // Base may not equal 1 or be negative. - if (y == 1.f || y < 0.f || ln(y) == 0.f) + if (y == 1.f || y < 0.f || ln(y) == 0.f) { return 0.f; + } return ln(x) / ln(y); } diff --git a/libc/src/pwd.c b/libc/src/pwd.c index 4c79c2f..e6203ca 100644 --- a/libc/src/pwd.c +++ b/libc/src/pwd.c @@ -4,13 +4,13 @@ /// See LICENSE.md for details. #include "pwd.h" -#include "sys/unistd.h" -#include "sys/errno.h" -#include "io/debug.h" #include "assert.h" -#include "string.h" -#include "stdio.h" #include "fcntl.h" +#include "io/debug.h" +#include "stdio.h" +#include "string.h" +#include "sys/errno.h" +#include "sys/unistd.h" /// @brief Parses the input buffer and fills pwd with its details. /// @param pwd the structure we need to fill. @@ -20,32 +20,40 @@ static inline void __parse_line(passwd_t *pwd, char *buf) assert(pwd && "Received null pwd!"); char *token, *ch; // Parse the username. - if ((token = strtok(buf, ":")) != NULL) + if ((token = strtok(buf, ":")) != NULL) { pwd->pw_name = token; + } // Parse the password. - if ((token = strtok(NULL, ":")) != NULL) + if ((token = strtok(NULL, ":")) != NULL) { pwd->pw_passwd = token; + } // Parse the user ID. - if ((token = strtok(NULL, ":")) != NULL) + if ((token = strtok(NULL, ":")) != NULL) { pwd->pw_uid = atoi(token); + } // Parse the group ID. - if ((token = strtok(NULL, ":")) != NULL) + if ((token = strtok(NULL, ":")) != NULL) { pwd->pw_gid = atoi(token); + } // Parse the user information. - if ((token = strtok(NULL, ":")) != NULL) + if ((token = strtok(NULL, ":")) != NULL) { pwd->pw_gecos = token; + } // Parse the dir. - if ((token = strtok(NULL, ":")) != NULL) + if ((token = strtok(NULL, ":")) != NULL) { pwd->pw_dir = token; + } // Parse the shell. if ((token = strtok(NULL, ":")) != NULL) { pwd->pw_shell = token; // Find carriege return. - if ((ch = strchr(pwd->pw_shell, '\r'))) + if ((ch = strchr(pwd->pw_shell, '\r'))) { *ch = 0; + } // Find newline. - if ((ch = strchr(pwd->pw_shell, '\n'))) + if ((ch = strchr(pwd->pw_shell, '\n'))) { *ch = 0; + } } } @@ -71,7 +79,7 @@ ssize_t __readline(int fd, char *buffer, size_t buflen) } } } - long newline_len = (int)(newline - buffer); + long newline_len = (newline - buffer); if (newline_len <= 0) { return 0; } @@ -106,17 +114,20 @@ static inline char *__search_entry(int fd, char *buffer, int buflen, const char } else { // Name char *ptr = strchr(buffer, ':'); - if (ptr == NULL) + if (ptr == NULL) { continue; + } // Password ++ptr; char *uid_start = strchr(ptr, ':'); - if (uid_start == NULL) + if (uid_start == NULL) { continue; + } ++uid_start; ptr = strchr(uid_start, ':'); - if (ptr == NULL) + if (ptr == NULL) { continue; + } *ptr = '\0'; // Parse the uid. int found_uid = atoi(uid_start); @@ -132,13 +143,15 @@ static inline char *__search_entry(int fd, char *buffer, int buflen, const char passwd_t *getpwnam(const char *name) { - if (name == NULL) + if (name == NULL) { return NULL; + } static passwd_t pwd; static char buffer[BUFSIZ]; passwd_t *result; - if (!getpwnam_r(name, &pwd, buffer, BUFSIZ, &result)) + if (!getpwnam_r(name, &pwd, buffer, BUFSIZ, &result)) { return NULL; + } return &pwd; } @@ -147,15 +160,17 @@ passwd_t *getpwuid(uid_t uid) static passwd_t pwd; static char buffer[BUFSIZ]; passwd_t *result; - if (!getpwuid_r(uid, &pwd, buffer, BUFSIZ, &result)) + if (!getpwuid_r(uid, &pwd, buffer, BUFSIZ, &result)) { return NULL; + } return &pwd; } int getpwnam_r(const char *name, passwd_t *pwd, char *buf, size_t buflen, passwd_t **result) { - if (name == NULL) + if (name == NULL) { return 0; + } int fd = open("/etc/passwd", O_RDONLY, 0); if (fd == -1) { pr_debug("Cannot open `/etc/passwd`\n"); diff --git a/libc/src/sched.c b/libc/src/sched.c index 67d7257..fffa977 100644 --- a/libc/src/sched.c +++ b/libc/src/sched.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "system/syscall_types.h" -#include "sys/errno.h" #include "sched.h" +#include "sys/errno.h" _syscall2(int, sched_setparam, pid_t, pid, const sched_param_t *, param) diff --git a/libc/src/setenv.c b/libc/src/setenv.c index 7c83593..ec6447a 100644 --- a/libc/src/setenv.c +++ b/libc/src/setenv.c @@ -3,10 +3,10 @@ /// @copyright (c) 2014-2023 This file is distributed under the MIT License. /// See LICENSE.md for details. -#include #include "sys/errno.h" -#include "string.h" #include "stdlib.h" +#include "string.h" +#include char **environ; @@ -23,9 +23,11 @@ static inline int __find_entry(const char *name, const size_t name_len) { if (environ) { int index = 0; - for (char **ptr = environ; *ptr; ++ptr, ++index) - if (!strncmp((*ptr), name, name_len) && (*ptr)[name_len] == '=') + for (char **ptr = environ; *ptr; ++ptr, ++index) { + if (!strncmp((*ptr), name, name_len) && (*ptr)[name_len] == '=') { return index; + } + } } return -1; } @@ -98,8 +100,9 @@ int setenv(const char *name, const char *value, int replace) environ = __environ = new_environ; } // Free the previous entry. - if (environ[index]) + if (environ[index]) { free(environ[index]); + } // Allocate the new entry. environ[index] = malloc(total_len); // Memcopy because we do not want the null terminating character. @@ -129,8 +132,9 @@ int unsetenv(const char *name) if (!strncmp(*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; - do dp[0] = dp[1]; - while (*dp++); + do { + dp[0] = dp[1]; + } while (*dp++); /* Continue the loop in case NAME appears again. */ } else { ++ep; diff --git a/libc/src/stdlib.c b/libc/src/stdlib.c index 598321f..5a28435 100644 --- a/libc/src/stdlib.c +++ b/libc/src/stdlib.c @@ -4,10 +4,10 @@ /// See LICENSE.md for details. #include "stddef.h" -#include "system/syscall_types.h" +#include "assert.h" #include "stdlib.h" #include "string.h" -#include "assert.h" +#include "system/syscall_types.h" /// @brief Number which identifies a memory area allocated through a call to /// malloc(), calloc() or realloc(). @@ -37,8 +37,9 @@ void *malloc(unsigned int size) void *calloc(size_t num, size_t size) { void *ptr = malloc(num * size); - if (ptr) + if (ptr) { memset(ptr, 0, num * size); + } return ptr; } diff --git a/libc/src/string.c b/libc/src/string.c index 28ddf25..30e6d3b 100644 --- a/libc/src/string.c +++ b/libc/src/string.c @@ -5,9 +5,9 @@ #include "string.h" #include "ctype.h" +#include "fcntl.h" #include "stdio.h" #include "stdlib.h" -#include "fcntl.h" #ifdef __KERNEL__ #include "mem/kheap.h" @@ -25,8 +25,9 @@ char *strncpy(char *destination, const char *source, size_t num) // is found before num characters have been copied, destination is padded // with zeros until a total of num characters have been written to it. if (num) { - while (--num) + while (--num) { *destination++ = '\0'; + } } } // Pointer to destination is returned. @@ -35,8 +36,9 @@ char *strncpy(char *destination, const char *source, size_t num) int strncmp(const char *s1, const char *s2, size_t n) { - if (!n) + if (!n) { return 0; + } while ((--n > 0) && (*s1) && (*s2) && (*s1 == *s2)) { s1++; s2++; @@ -74,8 +76,9 @@ char *strchr(const char *s, int ch) while (*s && *s != (char)ch) { s++; } - if (*s == (char)ch) + if (*s == (char)ch) { return (char *)s; + } { return NULL; } @@ -163,8 +166,9 @@ size_t strcspn(const char *string, const char *control) size_t n; // Clear out bit map. - for (n = 0; n < 32; n++) + for (n = 0; n < 32; n++) { map[n] = 0; + } // Set bits in control map. while (*ctrl) { @@ -192,8 +196,9 @@ char *strpbrk(const char *string, const char *control) int n; // Clear out bit map. - for (n = 0; n < 32; n++) + for (n = 0; n < 32; n++) { map[n] = 0; + } // Set bits in control map. while (*ctrl) { @@ -317,8 +322,9 @@ char *strncat(char *s1, const char *s2, size_t n) s1--; while (n--) { - if (!(*s1++ = *s2++)) + if (!(*s1++ = *s2++)) { return start; + } } *s1 = '\0'; @@ -397,11 +403,10 @@ char *strtok_r(char *str, const char *delim, char **saveptr) *saveptr = s; // Determine if a token has been found. - if (str == (char *)s) { + if (str == s) { return NULL; - } else { - return str; } + return str; } // Intrinsic functions. @@ -453,7 +458,7 @@ void *memcpy(void *dst, const void *src, size_t num) // Initialize the content of the memory. while (num--) *_dst++ = *_src++; // Return the pointer. - return (void *)dst; + return dst; } void *memccpy(void *dst, const void *src, int c, size_t n) @@ -625,8 +630,9 @@ char *strdup(const char *s) #else char *new = malloc(len); #endif - if (new == NULL) + if (new == NULL) { return NULL; + } new[len] = '\0'; return (char *)memcpy(new, s, len); } @@ -639,8 +645,9 @@ char *strndup(const char *s, size_t n) #else char *new = malloc(len); #endif - if (new == NULL) + if (new == NULL) { return NULL; + } new[len] = '\0'; return (char *)memcpy(new, s, len); } diff --git a/libc/src/sys/ipc.c b/libc/src/sys/ipc.c index 861f849..84a35c1 100644 --- a/libc/src/sys/ipc.c +++ b/libc/src/sys/ipc.c @@ -4,21 +4,21 @@ /// See LICENSE.md for details. #include "sys/ipc.h" -#include "sys/unistd.h" -#include "sys/errno.h" -#include "sys/stat.h" -#include "sys/sem.h" -#include "sys/shm.h" -#include "sys/msg.h" -#include "system/syscall_types.h" -#include "stddef.h" -#include "string.h" #include "io/debug.h" +#include "io/debug.h" +#include "stddef.h" +#include "stdio.h" #include "stdio.h" #include "stdlib.h" -#include "io/debug.h" -#include "stdio.h" +#include "string.h" +#include "sys/errno.h" +#include "sys/msg.h" +#include "sys/sem.h" +#include "sys/shm.h" +#include "sys/stat.h" +#include "sys/unistd.h" +#include "system/syscall_types.h" _syscall3(void *, shmat, int, shmid, const void *, shmaddr, int, shmflg) @@ -41,8 +41,9 @@ int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg) long __res; do { __inline_syscall4(__res, msgsnd, msqid, msgp, msgsz, msgflg); - if (!(msgflg & IPC_NOWAIT) && (__res == -EAGAIN)) + if (!(msgflg & IPC_NOWAIT) && (__res == -EAGAIN)) { continue; + } break; } while (1); __syscall_return(int, __res); @@ -53,8 +54,9 @@ ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg) long __res; do { __inline_syscall5(__res, msgrcv, msqid, msgp, msgsz, msgtyp, msgflg); - if (!(msgflg & IPC_NOWAIT) && ((__res == -EAGAIN) || (__res == -ENOMSG))) + if (!(msgflg & IPC_NOWAIT) && ((__res == -EAGAIN) || (__res == -ENOMSG))) { continue; + } break; } while (1); __syscall_return(int, __res); @@ -92,8 +94,9 @@ long semop(int semid, struct sembuf *sops, unsigned nsops) // If we get an error, the operation has been taken care of we stop // the loop. We also stop the loop if the operation is not allowed // and the IPC_NOWAIT flag is 1 - if ((__res != -EAGAIN) || (op->sem_flg & IPC_NOWAIT)) + if ((__res != -EAGAIN) || (op->sem_flg & IPC_NOWAIT)) { break; + } } // If the operation couldn't be performed and we had the IPC_NOWAIT set // to 1 then we return. diff --git a/libc/src/sys/mman.c b/libc/src/sys/mman.c index d4a53d5..386e85c 100644 --- a/libc/src/sys/mman.c +++ b/libc/src/sys/mman.c @@ -5,9 +5,9 @@ /// See LICENSE.md for details. #include "sys/mman.h" -#include "system/syscall_types.h" -#include "sys/unistd.h" #include "sys/errno.h" +#include "sys/unistd.h" +#include "system/syscall_types.h" _syscall6(void *, mmap, void *, addr, size_t, length, int, prot, int, flags, int, fd, off_t, offset) diff --git a/libc/src/sys/unistd.c b/libc/src/sys/unistd.c index 97e51d6..cef46a3 100644 --- a/libc/src/sys/unistd.c +++ b/libc/src/sys/unistd.c @@ -4,9 +4,9 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "string.h" #include "limits.h" #include "stdio.h" +#include "string.h" #if 0 #include "vfs.h" diff --git a/libc/src/sys/utsname.c b/libc/src/sys/utsname.c index e8990cb..6ee65c5 100644 --- a/libc/src/sys/utsname.c +++ b/libc/src/sys/utsname.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "sys/utsname.h" -#include "system/syscall_types.h" -#include "sys/errno.h" #include "stddef.h" +#include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, uname, utsname_t *, buf) diff --git a/libc/src/termios.c b/libc/src/termios.c index b691983..7997d1a 100644 --- a/libc/src/termios.c +++ b/libc/src/termios.c @@ -4,9 +4,9 @@ /// See LICENSE.md for details. #include "termios.h" -#include "system/syscall_types.h" -#include "sys/errno.h" #include "bits/ioctls.h" +#include "sys/errno.h" +#include "system/syscall_types.h" int tcgetattr(int fd, termios_t *termios_p) { @@ -16,7 +16,7 @@ int tcgetattr(int fd, termios_t *termios_p) : "0"(__NR_ioctl), "b"((long)(fd)), "c"((long)(TCGETS)), "d"((long)(termios_p))); if (retval < 0) { - errno = -retval; + errno = -retval; retval = -1; } return retval; @@ -30,7 +30,7 @@ int tcsetattr(int fd, int optional_actions, const termios_t *termios_p) : "0"(__NR_ioctl), "b"((long)(fd)), "c"((long)(TCSETS)), "d"((long)(termios_p))); if (retval < 0) { - errno = -retval; + errno = -retval; retval = -1; } return retval; diff --git a/libc/src/time.c b/libc/src/time.c index 0af6036..198e10a 100644 --- a/libc/src/time.c +++ b/libc/src/time.c @@ -4,10 +4,10 @@ /// See LICENSE.md for details. #include "time.h" -#include "system/syscall_types.h" -#include "sys/errno.h" -#include "string.h" #include "stdio.h" +#include "string.h" +#include "sys/errno.h" +#include "system/syscall_types.h" /// @brief List of week days name. static const char *weekdays[] = { @@ -23,7 +23,7 @@ static const char *months[] = { /// @brief Time function. _syscall1(time_t, time, time_t *, t) -time_t difftime(time_t time1, time_t time2) + time_t difftime(time_t time1, time_t time2) { return time1 - time2; } @@ -69,7 +69,7 @@ tm_t *localtime(const time_t *time) t /= 24; // Convert Unix time to date a = (unsigned int)((4 * t + 102032) / 146097 + 15); - b = (unsigned int)(t + 2442113 + a - (a / 4)); + b = (t + 2442113 + a - (a / 4)); c = (20 * b - 2442) / 7305; d = b - 365 * c - (c / 4); e = d * 1000 / 30601; @@ -383,7 +383,7 @@ size_t strftime(char *str, size_t maxsize, const char *format, const tm_t *timep /// @brief nanosleep function. _syscall2(int, nanosleep, const timespec *, req, timespec *, rem) -unsigned int sleep(unsigned int seconds) + unsigned int sleep(unsigned int seconds) { timespec req, rem; req.tv_sec = seconds; @@ -399,4 +399,4 @@ unsigned int sleep(unsigned int seconds) _syscall2(int, getitimer, int, which, itimerval *, curr_value) -_syscall3(int, setitimer, int, which, const itimerval *, new_value, itimerval *, old_value) + _syscall3(int, setitimer, int, which, const itimerval *, new_value, itimerval *, old_value) diff --git a/libc/src/unistd/chdir.c b/libc/src/unistd/chdir.c index 1557053..b3facf6 100644 --- a/libc/src/unistd/chdir.c +++ b/libc/src/unistd/chdir.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, chdir, const char *, path) diff --git a/libc/src/unistd/close.c b/libc/src/unistd/close.c index d7b15d7..524fe7e 100644 --- a/libc/src/unistd/close.c +++ b/libc/src/unistd/close.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, close, int, fd) diff --git a/libc/src/unistd/creat.c b/libc/src/unistd/creat.c index 69555e4..81ecc1f 100644 --- a/libc/src/unistd/creat.c +++ b/libc/src/unistd/creat.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall2(int, creat, const char *, pathname, mode_t, mode) diff --git a/libc/src/unistd/exec.c b/libc/src/unistd/exec.c index 3e9ccf8..7ec62e2 100644 --- a/libc/src/unistd/exec.c +++ b/libc/src/unistd/exec.c @@ -4,14 +4,14 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" -#include "sys/errno.h" -#include "sys/stat.h" +#include "fcntl.h" #include "io/debug.h" +#include "stdarg.h" #include "stdlib.h" #include "string.h" -#include "stdarg.h" -#include "fcntl.h" +#include "sys/errno.h" +#include "sys/stat.h" +#include "system/syscall_types.h" extern char **environ; @@ -43,7 +43,7 @@ static inline int __find_in_path(const char *file, char *buf, size_t buf_len) strcat(buf, file); if (stat(buf, &stat_buf) == 0) { if (stat_buf.st_mode & S_IXUSR) { - // TODO: Check why `init` has problems with this free. + // TODO(enrico): Check why `init` has problems with this free. // To reproduce the problem use this in init.c: // execvp("login", _argv); free(path); @@ -128,8 +128,9 @@ int execl(const char *path, const char *arg, ...) char *argv[argc + 1]; va_start(ap, arg); argv[0] = (char *)arg; - for (int i = 1; i <= argc; ++i) + for (int i = 1; i <= argc; ++i) { argv[i] = va_arg(ap, char *); + } va_end(ap); // Now, we can call `execve` plain and simple. @@ -156,8 +157,9 @@ int execlp(const char *file, const char *arg, ...) char *argv[argc + 1]; va_start(ap, arg); argv[0] = (char *)arg; - for (int i = 1; i < argc; ++i) + for (int i = 1; i < argc; ++i) { argv[i] = va_arg(ap, char *); + } va_end(ap); // Close argv. @@ -193,8 +195,9 @@ int execle(const char *path, const char *arg, ...) char *argv[argc + 1]; va_start(ap, arg); argv[0] = (char *)arg; - for (int i = 1; i < argc; ++i) + for (int i = 1; i < argc; ++i) { argv[i] = va_arg(ap, char *); + } // Close argv. argv[argc] = NULL; @@ -232,8 +235,9 @@ int execlpe(const char *file, const char *arg, ...) char *argv[argc + 1]; va_start(ap, arg); argv[0] = (char *)arg; - for (int i = 1; i < argc; ++i) + for (int i = 1; i < argc; ++i) { argv[i] = va_arg(ap, char *); + } // Close argv. argv[argc] = NULL; diff --git a/libc/src/unistd/fork.c b/libc/src/unistd/fork.c index c7cbe9d..08e4ccd 100644 --- a/libc/src/unistd/fork.c +++ b/libc/src/unistd/fork.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall0(pid_t, fork) diff --git a/libc/src/unistd/getcwd.c b/libc/src/unistd/getcwd.c index 1879005..4301eba 100644 --- a/libc/src/unistd/getcwd.c +++ b/libc/src/unistd/getcwd.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall2(char *, getcwd, char *, buf, size_t, size) diff --git a/libc/src/unistd/getdents.c b/libc/src/unistd/getdents.c index e490c53..e91c934 100644 --- a/libc/src/unistd/getdents.c +++ b/libc/src/unistd/getdents.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall3(ssize_t, getdents, int, fd, dirent_t *, dirp, unsigned int, count) diff --git a/libc/src/unistd/getgid.c b/libc/src/unistd/getgid.c index c5060d0..10a1587 100644 --- a/libc/src/unistd/getgid.c +++ b/libc/src/unistd/getgid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall0(pid_t, getgid) diff --git a/libc/src/unistd/getpgid.c b/libc/src/unistd/getpgid.c index b5cd9d3..8184902 100644 --- a/libc/src/unistd/getpgid.c +++ b/libc/src/unistd/getpgid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(pid_t, getpgid, pid_t, pid) diff --git a/libc/src/unistd/getpid.c b/libc/src/unistd/getpid.c index 8d2b1af..f55cc5d 100644 --- a/libc/src/unistd/getpid.c +++ b/libc/src/unistd/getpid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall0(pid_t, getpid) diff --git a/libc/src/unistd/getppid.c b/libc/src/unistd/getppid.c index 208280f..1229bb1 100644 --- a/libc/src/unistd/getppid.c +++ b/libc/src/unistd/getppid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall0(pid_t, getppid) diff --git a/libc/src/unistd/getsid.c b/libc/src/unistd/getsid.c index 75dfe36..78a7226 100644 --- a/libc/src/unistd/getsid.c +++ b/libc/src/unistd/getsid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(pid_t, getsid, pid_t, pid) diff --git a/libc/src/unistd/getuid.c b/libc/src/unistd/getuid.c index 3b18f7e..b4926e8 100644 --- a/libc/src/unistd/getuid.c +++ b/libc/src/unistd/getuid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall0(uid_t, getuid) diff --git a/libc/src/unistd/interval.c b/libc/src/unistd/interval.c index 0dccc73..542c999 100644 --- a/libc/src/unistd/interval.c +++ b/libc/src/unistd/interval.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" -_syscall1(int, alarm, int, seconds) +_syscall1(unsigned, alarm, int, seconds) diff --git a/libc/src/unistd/kill.c b/libc/src/unistd/kill.c index 6a5bf6f..e2c2bfb 100644 --- a/libc/src/unistd/kill.c +++ b/libc/src/unistd/kill.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall2(int, kill, pid_t, pid, int, sig) diff --git a/libc/src/unistd/lseek.c b/libc/src/unistd/lseek.c index 3eab910..979febd 100644 --- a/libc/src/unistd/lseek.c +++ b/libc/src/unistd/lseek.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall3(off_t, lseek, int, fd, off_t, offset, int, whence) diff --git a/libc/src/unistd/mkdir.c b/libc/src/unistd/mkdir.c index 85d38f1..a9cc03e 100644 --- a/libc/src/unistd/mkdir.c +++ b/libc/src/unistd/mkdir.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall2(int, mkdir, const char *, path, mode_t, mode) diff --git a/libc/src/unistd/nice.c b/libc/src/unistd/nice.c index d1b3dfb..ddb474f 100644 --- a/libc/src/unistd/nice.c +++ b/libc/src/unistd/nice.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, nice, int, inc) diff --git a/libc/src/unistd/open.c b/libc/src/unistd/open.c index 2d79963..23c7e14 100644 --- a/libc/src/unistd/open.c +++ b/libc/src/unistd/open.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall3(int, open, const char *, pathname, int, flags, mode_t, mode) diff --git a/libc/src/unistd/read.c b/libc/src/unistd/read.c index 6228d94..d9381be 100644 --- a/libc/src/unistd/read.c +++ b/libc/src/unistd/read.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall3(ssize_t, read, int, fd, void *, buf, size_t, nbytes) diff --git a/libc/src/unistd/reboot.c b/libc/src/unistd/reboot.c index 72071db..8e5fcb1 100644 --- a/libc/src/unistd/reboot.c +++ b/libc/src/unistd/reboot.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall4(int, reboot, int, magic1, int, magic2, unsigned int, cmd, void *, arg) diff --git a/libc/src/unistd/rmdir.c b/libc/src/unistd/rmdir.c index 2f341a2..e9912b4 100644 --- a/libc/src/unistd/rmdir.c +++ b/libc/src/unistd/rmdir.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, rmdir, const char *, path) diff --git a/libc/src/unistd/setgid.c b/libc/src/unistd/setgid.c index 7e2a897..e7b9175 100644 --- a/libc/src/unistd/setgid.c +++ b/libc/src/unistd/setgid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, setgid, pid_t, pid) diff --git a/libc/src/unistd/setpgid.c b/libc/src/unistd/setpgid.c index cdcd36b..c38ccf7 100644 --- a/libc/src/unistd/setpgid.c +++ b/libc/src/unistd/setpgid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall2(int, setpgid, pid_t, pid, pid_t, pgid) diff --git a/libc/src/unistd/setsid.c b/libc/src/unistd/setsid.c index 6d7ee54..4ccc4fd 100644 --- a/libc/src/unistd/setsid.c +++ b/libc/src/unistd/setsid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall0(pid_t, setsid) diff --git a/libc/src/unistd/setuid.c b/libc/src/unistd/setuid.c index e5068ac..4739210 100644 --- a/libc/src/unistd/setuid.c +++ b/libc/src/unistd/setuid.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, setuid, uid_t, pid) diff --git a/libc/src/unistd/signal.c b/libc/src/unistd/signal.c index 10a5328..bc370fb 100644 --- a/libc/src/unistd/signal.c +++ b/libc/src/unistd/signal.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" #include "signal.h" #include "sys/bitops.h" @@ -68,8 +68,9 @@ int sigaction(int signum, const sigaction_t *act, sigaction_t *oldact) const char *strsignal(int sig) { - if ((sig >= SIGHUP) && (sig < NSIG)) + if ((sig >= SIGHUP) && (sig < NSIG)) { return sys_siglist[sig - 1]; +} return NULL; } @@ -111,7 +112,8 @@ int sigdelset(sigset_t *set, int signum) int sigismember(sigset_t *set, int signum) { - if (set) + if (set) { return bit_check(set->sig[(signum - 1) / 32], (signum - 1) % 32); +} return -1; } diff --git a/libc/src/unistd/stat.c b/libc/src/unistd/stat.c index 5873649..d426929 100644 --- a/libc/src/unistd/stat.c +++ b/libc/src/unistd/stat.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" #include "sys/stat.h" diff --git a/libc/src/unistd/unlink.c b/libc/src/unistd/unlink.c index b9c3b1e..5f9ae91 100644 --- a/libc/src/unistd/unlink.c +++ b/libc/src/unistd/unlink.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall1(int, unlink, const char *, path) diff --git a/libc/src/unistd/waitpid.c b/libc/src/unistd/waitpid.c index a06b2c1..a02c2d9 100644 --- a/libc/src/unistd/waitpid.c +++ b/libc/src/unistd/waitpid.c @@ -4,13 +4,13 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "sys/wait.h" #include "sys/errno.h" +#include "sys/wait.h" #include "system/syscall_types.h" +#include "sys/errno.h" #include "sys/unistd.h" #include "system/syscall_types.h" -#include "sys/errno.h" pid_t waitpid(pid_t pid, int *status, int options) { @@ -18,15 +18,19 @@ pid_t waitpid(pid_t pid, int *status, int options) int __status = 0; do { __inline_syscall3(__res, waitpid, pid, &__status, options); - if (__res < 0) + if (__res < 0) { break; - if (__status == EXIT_ZOMBIE) +} + if (__status == EXIT_ZOMBIE) { break; - if (options && WNOHANG) +} + if (options && WNOHANG) { break; +} } while (1); - if (status) + if (status) { *status = __status; +} __syscall_return(pid_t, __res); } diff --git a/libc/src/unistd/write.c b/libc/src/unistd/write.c index e7bf2cf..a8e1cf0 100644 --- a/libc/src/unistd/write.c +++ b/libc/src/unistd/write.c @@ -4,7 +4,7 @@ /// See LICENSE.md for details. #include "sys/unistd.h" -#include "system/syscall_types.h" #include "sys/errno.h" +#include "system/syscall_types.h" _syscall3(ssize_t, write, int, fd, const void *, buf, size_t, nbytes) diff --git a/libc/src/vscanf.c b/libc/src/vscanf.c index 5a06ad1..c42e4ca 100644 --- a/libc/src/vscanf.c +++ b/libc/src/vscanf.c @@ -3,9 +3,9 @@ /// @copyright (c) 2014-2023 This file is distributed under the MIT License. /// See LICENSE.md for details. -#include #include #include +#include #include /// @brief Read formatted data from string. @@ -21,18 +21,19 @@ static int __vsscanf(const char *buf, const char *s, va_list ap) char tmp[BUFSIZ]; while (*s && *buf) { - while (isspace(*s)) + while (isspace(*s)) { ++s; + } if (*s == '%') { ++s; for (; *s; ++s) { - if (strchr("dibouxcsefg%", *s)) + if (strchr("dibouxcsefg%", *s)) { break; - if (*s == '*') + } + if (*s == '*') { noassign = 1; - else if (isdigit(*s)) { - for (tc = s; isdigit(*s); ++s) - {} + } else if (isdigit(*s)) { + for (tc = s; isdigit(*s); ++s) {} strncpy(tmp, tc, s - tc); tmp[s - tc] = '\0'; width = strtol(tmp, NULL, 10); @@ -40,10 +41,12 @@ static int __vsscanf(const char *buf, const char *s, va_list ap) } } if (*s == 's') { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (!width) + } + if (!width) { width = strcspn(buf, " \t\n\r\f\v"); + } if (!noassign) { char *string = va_arg(ap, char *); strncpy(string, buf, width); @@ -51,48 +54,56 @@ static int __vsscanf(const char *buf, const char *s, va_list ap) } buf += width; } else if (*s == 'c') { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (!width) + } + if (!width) { width = 1; + } if (!noassign) { strncpy(va_arg(ap, char *), buf, width); } buf += width; } else if (strchr("duxob", *s)) { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (*s == 'd' || *s == 'u') + } + if (*s == 'd' || *s == 'u') { base = 10; - else if (*s == 'x') + } else if (*s == 'x') { base = 16; - else if (*s == 'o') + } else if (*s == 'o') { base = 8; - else if (*s == 'b') + } else if (*s == 'b') { base = 2; + } if (!width) { - if (isspace(*(s + 1)) || *(s + 1) == 0) + if (isspace(*(s + 1)) || *(s + 1) == 0) { width = strcspn(buf, " \t\n\r\f\v"); - else + } else { width = strchr(buf, *(s + 1)) - buf; + } } strncpy(tmp, buf, width); tmp[width] = '\0'; buf += width; - if (!noassign) + if (!noassign) { *va_arg(ap, unsigned int *) = strtol(tmp, NULL, base); + } } - if (!noassign) + if (!noassign) { ++count; + } width = noassign = 0; ++s; } else { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (*s != *buf) + } + if (*s != *buf) { break; - else - ++s, ++buf; + } + ++s, ++buf; } } return (count); @@ -109,8 +120,9 @@ static int __vfscanf(int fd, const char *fmt, va_list ap) int count; char buf[BUFSIZ + 1]; - if (fgets(buf, BUFSIZ, fd) == 0) + if (fgets(buf, BUFSIZ, fd) == 0) { return (-1); + } count = __vsscanf(buf, fmt, ap); return (count); } diff --git a/libc/src/vsprintf.c b/libc/src/vsprintf.c index b864dfa..f0dd779 100644 --- a/libc/src/vsprintf.c +++ b/libc/src/vsprintf.c @@ -4,12 +4,12 @@ /// See LICENSE.md for details. #include "sys/bitops.h" -#include "fcvt.h" #include "ctype.h" -#include "string.h" +#include "fcvt.h" #include "stdarg.h" #include "stdint.h" #include "stdio.h" +#include "string.h" #include "sys/unistd.h" /// Size of the buffer used to call cvt functions. @@ -35,8 +35,9 @@ static char *_upper_digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static inline int skip_atoi(const char **s) { int i = 0; - while (isdigit(**s)) + while (isdigit(**s)) { i = i * 10 + *((*s)++) - '0'; + } return i; } @@ -106,16 +107,17 @@ static char *number(char *str, long num, int base, int size, int32_t precision, } size -= precision; if (!bitmask_check(flags, FLAGS_ZEROPAD | FLAGS_LEFT)) { - while (size-- > 0) + while (size-- > 0) { *str++ = ' '; + } } if (sign) { *str++ = sign; } if (bitmask_check(flags, FLAGS_HASH)) { - if (base == 8) + if (base == 8) { *str++ = '0'; - else if (base == 16) { + } else if (base == 16) { *str++ = '0'; *str++ = _digits[33]; } @@ -377,8 +379,9 @@ static char *flt(char *str, double num, int size, int precision, char fmt, unsig int n, i; // Left align means no zero padding. - if (bitmask_check(flags, FLAGS_LEFT)) + if (bitmask_check(flags, FLAGS_LEFT)) { bitmask_clear_assign(flags, FLAGS_ZEROPAD); + } // Determine padding and sign char. c = bitmask_check(flags, FLAGS_ZEROPAD) ? '0' : ' '; @@ -589,10 +592,11 @@ int vsprintf(char *str, const char *fmt, va_list args) bitmask_set_assign(flags, FLAGS_UPPERCASE); break; case 'a': - if (qualifier == 'l') + if (qualifier == 'l') { tmp = eaddr(tmp, va_arg(args, unsigned char *), field_width, precision, flags); - else + } else { tmp = iaddr(tmp, va_arg(args, unsigned char *), field_width, precision, flags); + } continue; // Integer number formats - set up the flags and "break". case 'o': @@ -621,12 +625,14 @@ int vsprintf(char *str, const char *fmt, va_list args) tmp = flt(tmp, va_arg(args, double), field_width, precision, *fmt, bitmask_set(flags, FLAGS_SIGN)); continue; default: - if (*fmt != '%') + if (*fmt != '%') { *tmp++ = '%'; - if (*fmt) + } + if (*fmt) { *tmp++ = *fmt; - else + } else { --fmt; + } continue; } @@ -694,8 +700,9 @@ int fprintf(int fd, const char *fmt, ...) va_end(ap); if (len > 0) { - if (write(fd, buffer, len) <= 0) + if (write(fd, buffer, len) <= 0) { return EOF; + } return len; } return -1; diff --git a/mentos/inc/drivers/keyboard/keymap.h b/mentos/inc/drivers/keyboard/keymap.h index 594e16b..0abcd3e 100644 --- a/mentos/inc/drivers/keyboard/keymap.h +++ b/mentos/inc/drivers/keyboard/keymap.h @@ -44,7 +44,7 @@ void set_keymap_type(keymap_type_t type); /// @brief Returns the current keymap for the given scancode. /// @param scancode the scancode we want. /// @return Pointer to the keymap. -const keymap_t *get_keymap(int scancode); +const keymap_t *get_keymap(unsigned int scancode); /// @brief Initializes the supported keymaps. void init_keymaps(); diff --git a/mentos/inc/hardware/timer.h b/mentos/inc/hardware/timer.h index 44189f3..25aa029 100644 --- a/mentos/inc/hardware/timer.h +++ b/mentos/inc/hardware/timer.h @@ -176,7 +176,7 @@ int sys_nanosleep(const timespec *req, timespec *rem); /// @return the number of seconds remaining until any previously scheduled /// alarm was due to be delivered, or zero if there was no previously /// scheduled alarm. -int sys_alarm(int seconds); +unsigned sys_alarm(int seconds); /// @brief Rappresents a time value. struct timeval { diff --git a/mentos/src/boot.c b/mentos/src/boot.c index 16817f8..182b157 100644 --- a/mentos/src/boot.c +++ b/mentos/src/boot.c @@ -5,10 +5,10 @@ #include "boot.h" -#include "link_access.h" -#include "sys/module.h" -#include "mem/paging.h" #include "elf/elf.h" +#include "link_access.h" +#include "mem/paging.h" +#include "sys/module.h" /// @defgroup bootloader Bootloader /// @brief Set of functions and variables for booting the kernel. @@ -60,8 +60,9 @@ static inline void __debug_putchar(char c) /// @param s the string to send to the debug port. static inline void __debug_puts(char *s) { - while ((*s) != 0) + while ((*s) != 0) { __outportb(SERIAL_COM1, *s++); + } } /// @brief Align memory address to the specified value (round up). @@ -93,12 +94,12 @@ static void __setup_pages(uint32_t pfn_virt_start, uint32_t pfn_phys_start, uint uint32_t base_pgentry = pfn_virt_start % 1024; uint32_t pg_offset = 0; - for (int i = base_pgtable; i < 1024 && pfn_count; i++) { + for (uint32_t i = base_pgtable; i < 1024 && pfn_count; i++) { page_table_t *table = boot_pgtables + i; uint32_t pgentry_start = (i == base_pgtable) ? base_pgentry : 0; - for (int j = pgentry_start; j < 1024 && pfn_count; j++, pfn_count--) { + for (uint32_t j = pgentry_start; j < 1024 && pfn_count; j++, pfn_count--) { table->pages[j].frame = pfn_phys_start + pg_offset++; table->pages[j].rw = 1; table->pages[j].present = 1; @@ -138,7 +139,7 @@ static void __get_kernel_low_high(elf_header_t *elf_hdr, uint32_t *virt_low, uin // Prepare a pointer to a program header. elf_program_header_t *program_header; // Compute the offset for accessing the program headers. - uint32_t offset = (uint32_t)elf_hdr + (uint32_t)elf_hdr->phoff; + uint32_t offset = (uint32_t)elf_hdr + elf_hdr->phoff; // In this two variables we will store the start and end addresses of the segment. uint32_t segment_start, segment_end; // Iterate for each program header. @@ -183,7 +184,7 @@ static inline void __relocate_kernel_image(elf_header_t *elf_hdr) // Get the elf file starting address. kernel_start = (char *)elf_hdr; // Compute the offset for accessing the program headers. - offset = (uint32_t)kernel_start + (uint32_t)elf_hdr->phoff; + offset = (uint32_t)kernel_start + elf_hdr->phoff; // Iterate over the program headers. for (int i = 0; i < elf_hdr->phnum; i++) { // Get the program header. @@ -191,18 +192,20 @@ static inline void __relocate_kernel_image(elf_header_t *elf_hdr) // Get the virtual address of the program header. virtual_address = (char *)program_header->vaddr; // Get the physical address of the program header. - physical_address = (char *)(kernel_start + program_header->offset); + physical_address = (kernel_start + program_header->offset); // Move only the loadable segments. if (program_header->type == PT_LOAD) { // Get the valid size of the segment by taking the minimum between // the size in bytes of the segment in the file image, in memory. valid_size = min(program_header->filesz, program_header->memsz); // Copy the physical data of the image to the corresponding virtual address. - for (int j = 0; j < valid_size; j++) + for (uint32_t j = 0; j < valid_size; j++) { virtual_address[j] = physical_address[j]; + } // Set to 0 parts not present in memory! - for (int j = valid_size; j < program_header->memsz; j++) + for (uint32_t j = valid_size; j < program_header->memsz; j++) { virtual_address[j] = 0; + } } } } diff --git a/mentos/src/drivers/keyboard/keyboard.c b/mentos/src/drivers/keyboard/keyboard.c index 4a0704d..c5e5ee8 100644 --- a/mentos/src/drivers/keyboard/keyboard.c +++ b/mentos/src/drivers/keyboard/keyboard.c @@ -11,18 +11,18 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "drivers/keyboard/keyboard.h" -#include "io/port_io.h" -#include "hardware/pic8259.h" -#include "drivers/keyboard/keymap.h" -#include "sys/bitops.h" -#include "io/video.h" -#include "drivers/ps2.h" #include "ctype.h" #include "descriptor_tables/isr.h" +#include "drivers/keyboard/keyboard.h" +#include "drivers/keyboard/keymap.h" +#include "drivers/ps2.h" +#include "hardware/pic8259.h" +#include "io/port_io.h" +#include "io/video.h" #include "process/scheduler.h" #include "ring_buffer.h" #include "string.h" +#include "sys/bitops.h" /// Tracks the state of the leds. static uint8_t ledstate = 0; @@ -43,48 +43,37 @@ spinlock_t scancodes_lock; #define KBD_LEFT_ALT (1 << 7) ///< Flag which identifies the left alt. #define KBD_RIGHT_ALT (1 << 8) ///< Flag which identifies the right alt. -static inline bool_t get_keypad_number(int scancode) +static inline int get_keypad_number(unsigned int scancode) { - if (scancode == KEY_KP0) - return 0; - if (scancode == KEY_KP1) - return 1; - if (scancode == KEY_KP2) - return 2; - if (scancode == KEY_KP3) - return 3; - if (scancode == KEY_KP4) - return 4; - if (scancode == KEY_KP5) - return 5; - if (scancode == KEY_KP6) - return 6; - if (scancode == KEY_KP7) - return 7; - if (scancode == KEY_KP8) - return 8; - if (scancode == KEY_KP9) - return 9; + if (scancode == KEY_KP0) { return 0; } + if (scancode == KEY_KP1) { return 1; } + if (scancode == KEY_KP2) { return 2; } + if (scancode == KEY_KP3) { return 3; } + if (scancode == KEY_KP4) { return 4; } + if (scancode == KEY_KP5) { return 5; } + if (scancode == KEY_KP6) { return 6; } + if (scancode == KEY_KP7) { return 7; } + if (scancode == KEY_KP8) { return 8; } + if (scancode == KEY_KP9) { return 9; } return -1; } -static inline void keyboard_push_front(int c) +static inline void keyboard_push_front(unsigned int c) { - if (c >= 0) { - spinlock_lock(&scancodes_lock); - fs_rb_scancode_push_front(&scancodes, c); - spinlock_unlock(&scancodes_lock); - } + spinlock_lock(&scancodes_lock); + fs_rb_scancode_push_front(&scancodes, (int)c); + spinlock_unlock(&scancodes_lock); } int keyboard_pop_back() { int c; spinlock_lock(&scancodes_lock); - if (!fs_rb_scancode_empty(&scancodes)) + if (!fs_rb_scancode_empty(&scancodes)) { c = fs_rb_scancode_pop_back(&scancodes); - else + } else { c = -1; + } spinlock_unlock(&scancodes_lock); return c; } @@ -93,10 +82,11 @@ int keyboard_back() { int c; spinlock_lock(&scancodes_lock); - if (!fs_rb_scancode_empty(&scancodes)) + if (!fs_rb_scancode_empty(&scancodes)) { c = fs_rb_scancode_back(&scancodes); - else + } else { c = -1; + } spinlock_unlock(&scancodes_lock); return c; } @@ -105,10 +95,11 @@ int keyboard_front() { int c = -1; spinlock_lock(&scancodes_lock); - if (!fs_rb_scancode_empty(&scancodes)) + if (!fs_rb_scancode_empty(&scancodes)) { c = fs_rb_scancode_front(&scancodes); - else + } else { c = -1; + } spinlock_unlock(&scancodes_lock); return c; } diff --git a/mentos/src/drivers/keyboard/keymap.c b/mentos/src/drivers/keyboard/keymap.c index 407c370..6d52b45 100644 --- a/mentos/src/drivers/keyboard/keymap.c +++ b/mentos/src/drivers/keyboard/keymap.c @@ -20,19 +20,21 @@ keymap_type_t get_keymap_type() void set_keymap_type(keymap_type_t type) { - if (type != keymap_type) + if (type != keymap_type) { keymap_type = type; + } } -const keymap_t *get_keymap(int scancode) +const keymap_t *get_keymap(unsigned int scancode) { return &keymaps[keymap_type][scancode]; } void init_keymaps() { - for (int i = 0; i < KEYMAP_TYPE_MAX; ++i) + for (int i = 0; i < KEYMAP_TYPE_MAX; ++i) { memset(&keymaps[i], -1, sizeof(keymap_t)); + } // == ITALIAN KEY MAPPING ================================================= // Keys Normal Shifted Ctrl Alt diff --git a/mentos/src/drivers/mouse.c b/mentos/src/drivers/mouse.c index b819459..34f6fce 100644 --- a/mentos/src/drivers/mouse.c +++ b/mentos/src/drivers/mouse.c @@ -11,8 +11,8 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "drivers/mouse.h" #include "descriptor_tables/isr.h" +#include "drivers/mouse.h" #include "hardware/pic8259.h" #include "io/port_io.h" @@ -38,21 +38,15 @@ static void __mouse_waitcmd(unsigned char type) { register unsigned int _time_out = 100000; if (type == 0) { - // DATA. + // DATA while (_time_out--) { - if ((inportb(0x64) & 1) == 1) { - return; - } + if ((inportb(0x64) & 1) == 1) { break; } } - return; } else { - while (_time_out--) // SIGNALS - { - if ((inportb(0x64) & 2) == 0) { - return; - } + // SIGNALS + while (_time_out--) { + if ((inportb(0x64) & 2) == 0) { break; } } - return; } } @@ -207,7 +201,7 @@ int mouse_finalize() { // Uninstall the IRQ. irq_uninstall_handler(IRQ_MOUSE, __mouse_isr); - + // Disable the mouse. __mouse_disable(); return 0; diff --git a/mentos/src/drivers/ps2.c b/mentos/src/drivers/ps2.c index 6b41868..774998c 100644 --- a/mentos/src/drivers/ps2.c +++ b/mentos/src/drivers/ps2.c @@ -10,10 +10,10 @@ #include "io/debug.h" // Include debugging functions. #include "drivers/ps2.h" -#include "proc_access.h" -#include "sys/bitops.h" #include "io/port_io.h" +#include "proc_access.h" #include "stdbool.h" +#include "sys/bitops.h" #define PS2_DATA 0x60 ///< Data signal line. #define PS2_STATUS 0x64 ///< Status signal line. @@ -48,15 +48,17 @@ /// @brief Polling until we can receive bytes from the device. static inline void __ps2_wait_read() { - while (!bit_check(inportb(PS2_STATUS), 0)) + while (!bit_check(inportb(PS2_STATUS), 0)) { pause(); + } } /// @brief Polling until we can send bytes to the device. static inline void __ps2_wait_write() { - while (bit_check(inportb(PS2_STATUS), 1)) + while (bit_check(inportb(PS2_STATUS), 1)) { pause(); + } } void ps2_write(unsigned char data) @@ -127,14 +129,18 @@ static inline void __ps2_write_second_port(unsigned char byte) static const char *__ps2_get_response_error_message(unsigned response) { - if (response == 0x01) + if (response == 0x01) { return "clock line stuck low"; - if (response == 0x02) + } + if (response == 0x02) { return "clock line stuck high"; - if (response == 0x03) + } + if (response == 0x03) { return "data line stuck low"; - if (response == 0x04) + } + if (response == 0x04) { return "data line stuck high"; + } return "unknown error"; } @@ -206,7 +212,8 @@ int ps2_initialize() // Send 0xAA to the controller. __ps2_write_command(PS2_CTRL_TEST_CONTROLLER); // Read the response. - if ((response = ps2_read()) == PS2_TEST_FAIL1) { + response = ps2_read(); + if (response == PS2_TEST_FAIL1) { pr_err("Self-test failed : 0x%02x\n", response); return 1; } @@ -226,7 +233,8 @@ int ps2_initialize() // Read the status. status = __ps2_get_controller_status(); // Check if it is a dual channel PS/2 device. - if ((dual = !bit_check(status, 5))) { + dual = !bit_check(status, 5); + if (dual) { pr_debug("Recognized a `dual channel` PS/2 controller...\n"); __ps2_disable_second_port(); } else { @@ -245,7 +253,8 @@ int ps2_initialize() // can still keep using/supporting the other PS/2 port. __ps2_write_command(PS2_CTRL_P1_TEST); - if ((response = ps2_read()) && (response >= 0x01) && (response <= 0x04)) { + response = ps2_read(); + if (response && (response >= 0x01) && (response <= 0x04)) { pr_err("Interface test failed on first port : %02x\n", response); pr_err("Reason: %s.\n", __ps2_get_response_error_message(response)); return 1; @@ -253,7 +262,8 @@ int ps2_initialize() // If it is a dual channel, check the second port. if (dual) { __ps2_write_command(PS2_CTRL_P2_TEST); - if ((response = ps2_read()) && (response >= 0x01) && (response <= 0x04)) { + response = ps2_read(); + if (response && (response >= 0x01) && (response <= 0x04)) { pr_err("Interface test failed on second port : %02x\n", response); pr_err("Reason: %s.\n", __ps2_get_response_error_message(response)); return 1; @@ -271,8 +281,9 @@ int ps2_initialize() // Enable the first port. __ps2_enable_first_port(); // Enable the second port. - if (dual) + if (dual) { __ps2_enable_second_port(); + } // Get the status. status = __ps2_get_controller_status(); pr_debug("Status : %s (%3d | %02x)\n", dec_to_binary(status, 8), status, status); @@ -298,12 +309,14 @@ int ps2_initialize() // Reset first port. __ps2_write_first_port(0xFF); // Wait for `command acknowledged`. - if ((response = ps2_read()) != PS2_ACK) { + response = ps2_read(); + if ((response) != PS2_ACK) { pr_err("Failed to reset first PS/2 port: %d\n", response); return 1; } // Wait for `self test successful`. - if ((response = ps2_read()) != PS2_TEST_SUCCESS) { + response = ps2_read(); + if ((response) != PS2_TEST_SUCCESS) { pr_err("Failed to reset first PS/2 port: %d\n", response); return 1; } @@ -311,12 +324,14 @@ int ps2_initialize() // Reset second port. __ps2_write_second_port(0xFF); // Wait for `command acknowledged`. - if ((response = ps2_read()) != PS2_ACK) { + response = ps2_read(); + if ((response) != PS2_ACK) { pr_err("Failed to reset first PS/2 port: %d\n", response); return 1; } // Wait for `self test successful`. - if ((response = ps2_read()) != PS2_TEST_SUCCESS) { + response = ps2_read(); + if ((response) != PS2_TEST_SUCCESS) { pr_err("Failed to reset first PS/2 port: %d\n", response); return 1; } diff --git a/mentos/src/drivers/rtc.c b/mentos/src/drivers/rtc.c index 047deb5..c94e9ba 100644 --- a/mentos/src/drivers/rtc.c +++ b/mentos/src/drivers/rtc.c @@ -11,12 +11,12 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. +#include "descriptor_tables/isr.h" #include "drivers/rtc.h" #include "hardware/pic8259.h" -#include "string.h" #include "io/port_io.h" #include "kernel.h" -#include "descriptor_tables/isr.h" +#include "string.h" #define CMOS_ADDR 0x70 ///< Addess where we need to write the Address. #define CMOS_DATA 0x71 ///< Addess where we need to write the Data. @@ -30,20 +30,13 @@ int is_bcd; static inline unsigned int rtc_are_different(tm_t *t0, tm_t *t1) { - if (t0->tm_sec != t1->tm_sec) - return 1; - if (t0->tm_min != t1->tm_min) - return 1; - if (t0->tm_hour != t1->tm_hour) - return 1; - if (t0->tm_mon != t1->tm_mon) - return 1; - if (t0->tm_year != t1->tm_year) - return 1; - if (t0->tm_wday != t1->tm_wday) - return 1; - if (t0->tm_mday != t1->tm_mday) - return 1; + if (t0->tm_sec != t1->tm_sec) { return 1; } + if (t0->tm_min != t1->tm_min) { return 1; } + if (t0->tm_hour != t1->tm_hour) { return 1; } + if (t0->tm_mon != t1->tm_mon) { return 1; } + if (t0->tm_year != t1->tm_year) { return 1; } + if (t0->tm_wday != t1->tm_wday) { return 1; } + if (t0->tm_mday != t1->tm_mday) { return 1; } return 0; } diff --git a/mentos/src/fs/ext2.c b/mentos/src/fs/ext2.c index 384d868..1cc9690 100644 --- a/mentos/src/fs/ext2.c +++ b/mentos/src/fs/ext2.c @@ -9,18 +9,18 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "fs/ext2.h" -#include "process/scheduler.h" -#include "process/process.h" -#include "klib/spinlock.h" -#include "fs/vfs_types.h" -#include "sys/errno.h" -#include "fs/vfs.h" #include "assert.h" -#include "libgen.h" -#include "string.h" -#include "stdio.h" #include "fcntl.h" +#include "fs/ext2.h" +#include "fs/vfs.h" +#include "fs/vfs_types.h" +#include "klib/spinlock.h" +#include "libgen.h" +#include "process/process.h" +#include "process/scheduler.h" +#include "stdio.h" +#include "string.h" +#include "sys/errno.h" #define EXT2_SUPERBLOCK_MAGIC 0xEF53 ///< Magic value used to identify an ext2 filesystem. #define EXT2_INDIRECT_BLOCKS 12 ///< Amount of indirect blocks in an inode. @@ -431,39 +431,25 @@ static const char *uuid_to_string(uint8_t uuid[16]) /// @return the string representing the ext2_file_type. static const char *ext2_file_type_to_string(ext2_file_type_t ext2_type) { - if (ext2_type == ext2_file_type_regular_file) - return "REG"; - if (ext2_type == ext2_file_type_directory) - return "DIR"; - if (ext2_type == ext2_file_type_character_device) - return "CHR"; - if (ext2_type == ext2_file_type_block_device) - return "BLK"; - if (ext2_type == ext2_file_type_named_pipe) - return "FIFO"; - if (ext2_type == ext2_file_type_socket) - return "SOCK"; - if (ext2_type == ext2_file_type_symbolic_link) - return "LNK"; + if (ext2_type == ext2_file_type_regular_file) { return "REG"; } + if (ext2_type == ext2_file_type_directory) { return "DIR"; } + if (ext2_type == ext2_file_type_character_device) { return "CHR"; } + if (ext2_type == ext2_file_type_block_device) { return "BLK"; } + if (ext2_type == ext2_file_type_named_pipe) { return "FIFO"; } + if (ext2_type == ext2_file_type_socket) { return "SOCK"; } + if (ext2_type == ext2_file_type_symbolic_link) { return "LNK"; } return "UNK"; } static int ext2_file_type_to_vfs_file_type(int ext2_type) { - if (ext2_type == ext2_file_type_regular_file) - return DT_REG; - if (ext2_type == ext2_file_type_directory) - return DT_DIR; - if (ext2_type == ext2_file_type_character_device) - return DT_CHR; - if (ext2_type == ext2_file_type_block_device) - return DT_BLK; - if (ext2_type == ext2_file_type_named_pipe) - return DT_FIFO; - if (ext2_type == ext2_file_type_socket) - return DT_SOCK; - if (ext2_type == ext2_file_type_symbolic_link) - return DT_LNK; + if (ext2_type == ext2_file_type_regular_file) { return DT_REG; } + if (ext2_type == ext2_file_type_directory) { return DT_DIR; } + if (ext2_type == ext2_file_type_character_device) { return DT_CHR; } + if (ext2_type == ext2_file_type_block_device) { return DT_BLK; } + if (ext2_type == ext2_file_type_named_pipe) { return DT_FIFO; } + if (ext2_type == ext2_file_type_socket) { return DT_SOCK; } + if (ext2_type == ext2_file_type_symbolic_link) { return DT_LNK; } return DT_UNKNOWN; } @@ -488,14 +474,17 @@ static inline int __ext2_valid_permissions( const int oth) { // The task is the owner. - if ((mask & usr) && (task->uid == uid)) + if ((mask & usr) && (task->uid == uid)) { return 1; + } // The task belongs to the correct group. - if ((mask & grp) && (task->gid == gid)) + if ((mask & grp) && (task->gid == gid)) { return 1; + } // The task is not the owner and does not belong to the correct group. - if ((mask & oth) && (task->uid != uid) && (task->gid != gid)) + if ((mask & oth) && (task->uid != uid) && (task->gid != gid)) { return 1; + } return 0; } @@ -620,8 +609,9 @@ static void ext2_dump_inode(ext2_inode_t *inode) pr_debug(" Links : %2u Flags : %d\n", inode->links_count, inode->flags); pr_debug(" Blocks : [ "); for (int i = 0; i < EXT2_INDIRECT_BLOCKS; ++i) { - if (inode->data.blocks.dir_blocks[i]) + if (inode->data.blocks.dir_blocks[i]) { pr_debug("%u ", inode->data.blocks.dir_blocks[i]); + } } pr_debug("]\n"); pr_debug("IBlocks : %u\n", inode->data.blocks.indir_block); @@ -662,8 +652,9 @@ static void ext2_dump_bgdt(ext2_filesystem_t *fs) ext2_read_block(fs, gd->block_bitmap, cache); pr_debug(" Block Bitmap at %u\n", gd->block_bitmap); for (uint32_t j = 0; j < fs->block_size; ++j) { - if ((j % 8) == 0) + if ((j % 8) == 0) { pr_debug(" Block index: %4u, Bitmap: %s\n", j / 8, dec_to_binary(cache[j / 8], 8)); + } if (!ext2_check_bitmap_bit(cache, j)) { pr_debug(" First free block in group is in block %u, the linear index is %u\n", j / 8, j); break; @@ -673,8 +664,9 @@ static void ext2_dump_bgdt(ext2_filesystem_t *fs) ext2_read_block(fs, gd->inode_bitmap, cache); pr_debug(" Inode Bitmap at %d\n", gd->inode_bitmap); for (uint32_t j = 0; j < fs->block_size; ++j) { - if ((j % 8) == 0) + if ((j % 8) == 0) { pr_debug(" Block index: %4d, Bitmap: %s\n", j / 8, dec_to_binary(cache[j / 8], 8)); + } if (!ext2_check_bitmap_bit(cache, j)) { pr_debug(" First free block in group is in block %d, the linear index is %d\n", j / 8, j); break; @@ -755,10 +747,11 @@ static ext2_block_status_t ext2_check_bitmap_bit(uint8_t *buffer, uint32_t linea /// @param status the new status of the block (free|occupied). static void ext2_set_bitmap_bit(uint8_t *buffer, uint32_t linear_index, ext2_block_status_t status) { - if (status == ext2_block_status_occupied) + if (status == ext2_block_status_occupied) { bit_set_assign(buffer[linear_index / 8], linear_index % 8); - else + } else { bit_clear_assign(buffer[linear_index / 8], linear_index % 8); + } } /// @brief Searches for a free inode inside the group data loaded inside the cache. @@ -775,11 +768,13 @@ static inline int ext2_find_free_inode_in_group( for ((*linear_index) = 0; (*linear_index) < fs->superblock.inodes_per_group; ++(*linear_index)) { // If we need to skip the reserved inodes, we skip the round if the // index is that of a reserved inode (superblock.first_ino). - if (skip_reserved && ((*linear_index) < fs->superblock.first_ino)) + if (skip_reserved && ((*linear_index) < fs->superblock.first_ino)) { continue; + } // Check if the entry is free. - if (!ext2_check_bitmap_bit(cache, *linear_index)) + if (!ext2_check_bitmap_bit(cache, *linear_index)) { return 1; + } } return 0; } @@ -803,8 +798,9 @@ static inline int ext2_find_free_inode( (*group_index) = preferred_group; // Find the first free inode. We need to ask to skip reserved inodes, // only if we are in group 0. - if (ext2_find_free_inode_in_group(fs, cache, linear_index, (*group_index) == 0)) + if (ext2_find_free_inode_in_group(fs, cache, linear_index, (*group_index) == 0)) { return 1; + } } // Get the group and bit index of the first free block. for ((*group_index) = 0; (*group_index) < fs->block_groups_count; ++(*group_index)) { @@ -817,8 +813,9 @@ static inline int ext2_find_free_inode( } // Find the first free inode. We need to ask to skip reserved // inodes, only if we are in group 0. - if (ext2_find_free_inode_in_group(fs, cache, linear_index, (*group_index) == 0)) + if (ext2_find_free_inode_in_group(fs, cache, linear_index, (*group_index) == 0)) { return 1; + } } } return 0; @@ -834,8 +831,9 @@ static inline int ext2_find_free_block_in_group(ext2_filesystem_t *fs, uint8_t * { for ((*linear_index) = 0; (*linear_index) < fs->superblock.blocks_per_group; ++(*linear_index)) { // Check if the entry is free. - if (!ext2_check_bitmap_bit(cache, *linear_index)) + if (!ext2_check_bitmap_bit(cache, *linear_index)) { return 1; + } } return 0; } @@ -861,8 +859,9 @@ static inline int ext2_find_free_block( return 0; } // Find the first free block. - if (ext2_find_free_block_in_group(fs, cache, linear_index)) + if (ext2_find_free_block_in_group(fs, cache, linear_index)) { return 1; + } } } return 0; @@ -929,8 +928,9 @@ static int ext2_read_bgdt(ext2_filesystem_t *fs) { pr_debug("Read BGDT for EXT2 filesystem (0x%x)\n", fs); if (fs->block_groups) { - for (uint32_t i = 0; i < fs->bgdt_length; ++i) + for (uint32_t i = 0; i < fs->bgdt_length; ++i) { ext2_read_block(fs, fs->bgdt_start_block + i, (uint8_t *)((uintptr_t)fs->block_groups + (fs->block_size * i))); + } return 0; } pr_err("The `block_groups` list is not initialized.\n"); @@ -944,8 +944,9 @@ static int ext2_write_bgdt(ext2_filesystem_t *fs) { pr_debug("Write BGDT for EXT2 filesystem (0x%x)\n", fs); if (fs->block_groups) { - for (uint32_t i = 0; i < fs->bgdt_length; ++i) + for (uint32_t i = 0; i < fs->bgdt_length; ++i) { ext2_write_block(fs, fs->bgdt_start_block + i, (uint8_t *)((uintptr_t)fs->block_groups + (fs->block_size * i))); + } return 0; } pr_err("The `block_groups` list is not initialized.\n"); @@ -1149,13 +1150,15 @@ static int ext2_set_real_block_index(ext2_filesystem_t *fs, ext2_inode_t *inode, if (!inode->data.blocks.indir_block) { // Allocate a new block. uint32_t new_block_index = ext2_allocate_block(fs); - if (new_block_index == 0) + if (new_block_index == 0) { return -1; + } // Update the index. inode->data.blocks.indir_block = new_block_index; // Update the inode. - if (ext2_write_inode(fs, inode, inode_index) == -1) + if (ext2_write_inode(fs, inode, inode_index) == -1) { return -1; + } } // Allocate the cache. @@ -1188,13 +1191,15 @@ static int ext2_set_real_block_index(ext2_filesystem_t *fs, ext2_inode_t *inode, if (!inode->data.blocks.doubly_indir_block) { // Allocate a new block. uint32_t new_block_index = ext2_allocate_block(fs); - if (new_block_index == 0) + if (new_block_index == 0) { return -1; + } // Update the index. inode->data.blocks.doubly_indir_block = new_block_index; // Update the inode. - if (ext2_write_inode(fs, inode, inode_index) == -1) + if (ext2_write_inode(fs, inode, inode_index) == -1) { return -1; + } } // Allocate the cache. @@ -1246,13 +1251,15 @@ static int ext2_set_real_block_index(ext2_filesystem_t *fs, ext2_inode_t *inode, if (!inode->data.blocks.trebly_indir_block) { // Allocate a new block. uint32_t new_block_index = ext2_allocate_block(fs); - if (new_block_index == 0) + if (new_block_index == 0) { return -1; + } // Update the index. inode->data.blocks.trebly_indir_block = new_block_index; // Update the inode. - if (ext2_write_inode(fs, inode, inode_index) == -1) + if (ext2_write_inode(fs, inode, inode_index) == -1) { return -1; + } } // Allocate the cache. @@ -1391,11 +1398,13 @@ static int ext2_allocate_inode_block(ext2_filesystem_t *fs, ext2_inode_t *inode, pr_debug("Allocating block with index `%d` for inode with index `%d`.\n", block_index, inode_index); // Allocate the block. int real_index = ext2_allocate_block(fs); - if (real_index == -1) + if (real_index == -1) { return -1; + } // Associate the real index and the index inside the inode. - if (ext2_set_real_block_index(fs, inode, inode_index, block_index, real_index) == -1) + if (ext2_set_real_block_index(fs, inode, inode_index, block_index, real_index) == -1) { return -1; + } // Compute the new blocks count. uint32_t blocks_count = (block_index + 1) * fs->blocks_per_block_count; if (inode->blocks_count < blocks_count) { @@ -1406,8 +1415,9 @@ static int ext2_allocate_inode_block(ext2_filesystem_t *fs, ext2_inode_t *inode, pr_debug("Setting the block count for inode `%d` to `%d` blocks.\n", inode_index, blocks_count / fs->blocks_per_block_count); } // Update the inode. - if (ext2_write_inode(fs, inode, inode_index) == -1) + if (ext2_write_inode(fs, inode, inode_index) == -1) { return -1; + } return 0; } @@ -1419,12 +1429,14 @@ static int ext2_allocate_inode_block(ext2_filesystem_t *fs, ext2_inode_t *inode, /// @return the amount of data we read, or negative value for an error. static ssize_t ext2_read_inode_block(ext2_filesystem_t *fs, ext2_inode_t *inode, uint32_t block_index, uint8_t *buffer) { - if (block_index >= (inode->blocks_count / fs->blocks_per_block_count)) + if (block_index >= (inode->blocks_count / fs->blocks_per_block_count)) { return -1; + } // Get the real index. uint32_t real_index = ext2_get_real_block_index(fs, inode, block_index); - if (real_index == 0) + if (real_index == 0) { return -1; + } // Log the address to the inode block. pr_debug("Read inode block (block:%4u real:%4u)\n", block_index, real_index); // Read the block. @@ -1446,8 +1458,9 @@ static ssize_t ext2_write_inode_block(ext2_filesystem_t *fs, ext2_inode_t *inode } // Get the real index. uint32_t real_index = ext2_get_real_block_index(fs, inode, block_index); - if (real_index == 0) + if (real_index == 0) { return -1; + } // Log the address to the inode block. pr_debug("Write inode block (block:%4u real:%4u inode:%4u)\n", block_index, real_index, inode_index); // Write the block. @@ -1465,8 +1478,9 @@ static ssize_t ext2_write_inode_block(ext2_filesystem_t *fs, ext2_inode_t *inode static ssize_t ext2_read_inode_data(ext2_filesystem_t *fs, ext2_inode_t *inode, uint32_t inode_index, off_t offset, size_t nbyte, char *buffer) { // Check if the file is empty. - if (inode->size == 0) + if (inode->size == 0) { return 0; + } uint32_t end; if ((offset + nbyte) > inode->size) { @@ -1692,8 +1706,9 @@ static inline int ext2_directory_is_empty(ext2_filesystem_t *fs, uint8_t *cache, { ext2_direntry_iterator_t it = ext2_direntry_iterator_begin(fs, cache, inode); for (; ext2_direntry_iterator_valid(&it); ext2_direntry_iterator_next(&it)) { - if (it.direntry->inode != 0) + if (it.direntry->inode != 0) { return 0; + } } return 1; } @@ -1771,8 +1786,9 @@ static int ext2_allocate_direntry( // If we hit a direntry with an empty inode, that is a free direntry. if (it.direntry->inode == 0) { pr_debug("Found free direntry: %p (%d <= %d)\n", it.direntry, it.direntry->rec_len, rec_len); - if (rec_len <= it.direntry->rec_len) + if (rec_len <= it.direntry->rec_len) { break; + } } // Compute the real rec_len of the entry. uint32_t real_rec_len = ext2_get_rec_len_from_direntry(it.direntry); @@ -1896,16 +1912,19 @@ static int ext2_find_direntry(ext2_filesystem_t *fs, ino_t ino, const char *name ext2_direntry_iterator_t it = ext2_direntry_iterator_begin(fs, cache, &inode); for (; ext2_direntry_iterator_valid(&it); ext2_direntry_iterator_next(&it)) { // Skip unused inode. - if (it.direntry->inode == 0) + if (it.direntry->inode == 0) { continue; + } // Chehck the name. if (!strcmp(it.direntry->name, ".") && !strcmp(name, "/")) { break; } // Check if the entry has the same name. - if (strlen(name) == it.direntry->name_len) - if (!strncmp(it.direntry->name, name, it.direntry->name_len)) + if (strlen(name) == it.direntry->name_len) { + if (!strncmp(it.direntry->name, name, it.direntry->name_len)) { break; + } + } } // Copy the inode of the parent, even if we did not find the entry. search->parent_inode = ino; @@ -1975,8 +1994,9 @@ static int ext2_resolve_path(vfs_file_t *directory, char *path, ext2_direntry_se return -1; } // If the path is `/`. - if (strcmp(path, "/") == 0) + if (strcmp(path, "/") == 0) { return ext2_find_direntry(fs, directory->ino, path, search); + } ino_t ino = directory->ino; char *tmp_path = strdup(path); char *token = strtok(tmp_path, "/"); @@ -2134,8 +2154,9 @@ static vfs_file_t *ext2_find_vfs_file_with_inode(ext2_filesystem_t *fs, ino_t in { // Get the file structure. file = list_entry(it, vfs_file_t, siblings); - if (file && (file->ino == inode)) + if (file && (file->ino == inode)) { return file; + } } } return NULL; @@ -2690,12 +2711,14 @@ static ssize_t ext2_getdents(vfs_file_t *file, dirent_t *dirp, off_t doff, size_ ext2_direntry_iterator_t it = ext2_direntry_iterator_begin(fs, cache, &inode); for (; ext2_direntry_iterator_valid(&it) && (written < count); ext2_direntry_iterator_next(&it)) { // Skip unused inode. - if (it.direntry->inode == 0) + if (it.direntry->inode == 0) { continue; + } // Skip if already provided. current += sizeof(dirent_t); - if (current <= doff) + if (current <= doff) { continue; + } // Write on current directory entry data. dirp->d_ino = it.direntry->inode; dirp->d_type = ext2_file_type_to_vfs_file_type(it.direntry->file_type); diff --git a/mentos/src/fs/ioctl.c b/mentos/src/fs/ioctl.c index 5c93dea..b6341f8 100644 --- a/mentos/src/fs/ioctl.c +++ b/mentos/src/fs/ioctl.c @@ -4,11 +4,11 @@ /// See LICENSE.md for details. #include "fs/ioctl.h" +#include "fs/vfs.h" #include "process/scheduler.h" -#include "system/printk.h" #include "stdio.h" #include "sys/errno.h" -#include "fs/vfs.h" +#include "system/printk.h" int sys_ioctl(int fd, int request, void *data) { diff --git a/mentos/src/fs/namei.c b/mentos/src/fs/namei.c index f68995b..0ea5078 100644 --- a/mentos/src/fs/namei.c +++ b/mentos/src/fs/namei.c @@ -4,9 +4,9 @@ /// See LICENSE.md for details. #include "process/scheduler.h" -#include "sys/errno.h" -#include "io/debug.h" #include "fs/vfs.h" +#include "io/debug.h" +#include "sys/errno.h" int sys_unlink(const char *path) { diff --git a/mentos/src/fs/open.c b/mentos/src/fs/open.c index c7f689f..40ffe50 100644 --- a/mentos/src/fs/open.c +++ b/mentos/src/fs/open.c @@ -4,16 +4,16 @@ /// See LICENSE.md for details. #include "process/scheduler.h" -#include "process/process.h" -#include "system/printk.h" #include "fcntl.h" -#include "system/syscall.h" -#include "string.h" -#include "limits.h" -#include "io/debug.h" -#include "sys/errno.h" -#include "stdio.h" #include "fs/vfs.h" +#include "io/debug.h" +#include "limits.h" +#include "process/process.h" +#include "stdio.h" +#include "string.h" +#include "sys/errno.h" +#include "system/printk.h" +#include "system/syscall.h" int sys_open(const char *pathname, int flags, mode_t mode) { diff --git a/mentos/src/fs/procfs.c b/mentos/src/fs/procfs.c index ca8b132..c0f722c 100644 --- a/mentos/src/fs/procfs.c +++ b/mentos/src/fs/procfs.c @@ -9,14 +9,14 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. +#include "assert.h" +#include "fcntl.h" #include "fs/procfs.h" #include "fs/vfs.h" +#include "libgen.h" +#include "stdio.h" #include "string.h" #include "sys/errno.h" -#include "fcntl.h" -#include "libgen.h" -#include "assert.h" -#include "stdio.h" #include "time.h" /// Maximum length of name in PROCFS. @@ -134,9 +134,14 @@ static inline bool_t procfs_check_file(procfs_file_t *procfs_file) static inline procfs_file_t *procfs_get_file(list_head *entry) { procfs_file_t *procfs_file; - if (entry) - if (procfs_check_file((procfs_file = list_entry(entry, procfs_file_t, siblings)))) + if (entry) { + // Get the entry. + procfs_file = list_entry(entry, procfs_file_t, siblings); + // Check the file. + if (procfs_file && procfs_check_file(procfs_file)) { return procfs_file; + } + } return NULL; } @@ -152,8 +157,9 @@ static inline procfs_file_t *procfs_find_entry_path(const char *path) // Get the file structure. procfs_file = procfs_get_file(it); // Check its name. - if (procfs_file && !strcmp(procfs_file->name, path)) + if (procfs_file && !strcmp(procfs_file->name, path)) { return procfs_file; + } } } return NULL; @@ -162,7 +168,7 @@ static inline procfs_file_t *procfs_find_entry_path(const char *path) /// @brief Finds the PROCFS file with the given inode. /// @param inode the inode we search. /// @return a pointer to the PROCFS file, NULL otherwise. -static inline procfs_file_t *procfs_find_entry_inode(int inode) +static inline procfs_file_t *procfs_find_entry_inode(uint32_t inode) { procfs_file_t *procfs_file; if (!list_head_empty(&fs.files)) { @@ -185,16 +191,19 @@ static inline procfs_file_t *procfs_find_entry_inode(int inode) static inline int procfs_find_inode(const char *path) { procfs_file_t *procfs_file = procfs_find_entry_path(path); - if (procfs_file) + if (procfs_file) { return procfs_file->inode; + } return -1; } static inline int procfs_get_free_inode() { - for (int inode = 1; inode < PROCFS_MAX_FILES; ++inode) - if (procfs_find_entry_inode(inode) == NULL) + for (int inode = 1; inode < PROCFS_MAX_FILES; ++inode) { + if (procfs_find_entry_inode(inode) == NULL) { return inode; + } + } return -1; } @@ -333,8 +342,9 @@ static void dump_procfs() // Get the file structure. file = procfs_get_file(it); // Check if it a valid procfs file. - if (file) + if (file) { pr_debug("[%3d] `%s`\n", file->inode, file->name); + } } } } @@ -580,9 +590,11 @@ static ssize_t procfs_read(vfs_file_t *file, char *buf, off_t offset, size_t nby { if (file) { procfs_file_t *procfs_file = procfs_find_entry_inode(file->ino); - if (procfs_file && procfs_file->dir_entry.fs_operations) - if (procfs_file->dir_entry.fs_operations->read_f) + if (procfs_file && procfs_file->dir_entry.fs_operations) { + if (procfs_file->dir_entry.fs_operations->read_f) { return procfs_file->dir_entry.fs_operations->read_f(file, buf, offset, nbyte); + } + } } return -ENOSYS; } @@ -597,9 +609,11 @@ static ssize_t procfs_write(vfs_file_t *file, const void *buf, off_t offset, siz { if (file) { procfs_file_t *procfs_file = procfs_find_entry_inode(file->ino); - if (procfs_file && procfs_file->dir_entry.fs_operations) - if (procfs_file->dir_entry.fs_operations->write_f) + if (procfs_file && procfs_file->dir_entry.fs_operations) { + if (procfs_file->dir_entry.fs_operations->write_f) { return procfs_file->dir_entry.fs_operations->write_f(file, buf, offset, nbyte); + } + } } return -ENOSYS; } @@ -623,9 +637,11 @@ off_t procfs_lseek(vfs_file_t *file, off_t offset, int whence) pr_err("There is no PROCFS fiel associated with the VFS file.\n"); return -ENOSYS; } - if (procfs_file->dir_entry.fs_operations) - if (procfs_file->dir_entry.fs_operations->lseek_f) + if (procfs_file->dir_entry.fs_operations) { + if (procfs_file->dir_entry.fs_operations->lseek_f) { return procfs_file->dir_entry.fs_operations->lseek_f(file, offset, whence); + } + } return -EINVAL; } @@ -656,10 +672,10 @@ static int procfs_fstat(vfs_file_t *file, stat_t *stat) if (file && stat) { procfs_file_t *procfs_file = procfs_find_entry_inode(file->ino); if (procfs_file) { - if (procfs_file->dir_entry.fs_operations && procfs_file->dir_entry.fs_operations->stat_f) + if (procfs_file->dir_entry.fs_operations && procfs_file->dir_entry.fs_operations->stat_f) { return procfs_file->dir_entry.fs_operations->stat_f(file, stat); - else - return __procfs_stat(procfs_file, stat); + } + return __procfs_stat(procfs_file, stat); } } return -ENOSYS; @@ -674,10 +690,10 @@ static int procfs_stat(const char *path, stat_t *stat) if (path && stat) { procfs_file_t *procfs_file = procfs_find_entry_path(path); if (procfs_file) { - if (procfs_file->dir_entry.sys_operations && procfs_file->dir_entry.sys_operations->stat_f) + if (procfs_file->dir_entry.sys_operations && procfs_file->dir_entry.sys_operations->stat_f) { return procfs_file->dir_entry.sys_operations->stat_f(path, stat); - else - return __procfs_stat(procfs_file, stat); + } + return __procfs_stat(procfs_file, stat); } } return -1; @@ -687,9 +703,11 @@ static int procfs_ioctl(vfs_file_t *file, int request, void *data) { if (file) { procfs_file_t *procfs_file = procfs_find_entry_inode(file->ino); - if (procfs_file) - if (procfs_file->dir_entry.fs_operations && procfs_file->dir_entry.fs_operations->ioctl_f) + if (procfs_file) { + if (procfs_file->dir_entry.fs_operations && procfs_file->dir_entry.fs_operations->ioctl_f) { return procfs_file->dir_entry.fs_operations->ioctl_f(file, request, data); + } + } } return -1; } @@ -704,27 +722,31 @@ static int procfs_ioctl(vfs_file_t *file, int request, void *data) /// @return The number of written bytes in the buffer. static inline ssize_t procfs_getdents(vfs_file_t *file, dirent_t *dirp, off_t doff, size_t count) { - if (!file || !dirp) + if (!file || !dirp) { return -1; + } // Check if the size of the buffer is big enough to hold the data about the // directory entry. - if (count < sizeof(dirent_t)) + if (count < sizeof(dirent_t)) { return -1; + } // If there are no file, stop right here. - if (list_head_empty(&fs.files)) + if (list_head_empty(&fs.files)) { return 0; + } // Find the directory entry. procfs_file_t *direntry = procfs_find_entry_inode(file->ino); if (direntry == NULL) { return -ENOENT; } // Check if it is a directory. - if ((direntry->flags & DT_DIR) == 0) + if ((direntry->flags & DT_DIR) == 0) { return -ENOTDIR; + } // Clear the buffer. memset(dirp, 0, count); // Initialize, the length of the directory name. - int len = strlen(direntry->name); + size_t len = strlen(direntry->name); ssize_t written_size = 0; off_t iterated_size = 0; char parent_path[PATH_MAX]; @@ -746,7 +768,7 @@ static inline ssize_t procfs_getdents(vfs_file_t *file, dirent_t *dirp, off_t do continue; } // Check if the parent of the entry is the directory we are iterating. - if (strcmp(direntry->name, parent_path)) { + if (strcmp(direntry->name, parent_path) != 0) { continue; } // Advance the size we just iterated. @@ -769,8 +791,9 @@ static inline ssize_t procfs_getdents(vfs_file_t *file, dirent_t *dirp, off_t do written_size += sizeof(dirent_t); // Move to next writing position. ++dirp; - if (written_size >= count) + if (written_size >= count) { break; + } } return written_size; } diff --git a/mentos/src/fs/read_write.c b/mentos/src/fs/read_write.c index ad0a7b4..97f7a89 100644 --- a/mentos/src/fs/read_write.c +++ b/mentos/src/fs/read_write.c @@ -4,12 +4,12 @@ /// See LICENSE.md for details. #include "process/scheduler.h" -#include "fs/vfs_types.h" -#include "system/panic.h" -#include "sys/errno.h" #include "fcntl.h" -#include "stdio.h" #include "fs/vfs.h" +#include "fs/vfs_types.h" +#include "stdio.h" +#include "sys/errno.h" +#include "system/panic.h" ssize_t sys_read(int fd, void *buf, size_t nbytes) { diff --git a/mentos/src/fs/readdir.c b/mentos/src/fs/readdir.c index 430cb1f..f956244 100644 --- a/mentos/src/fs/readdir.c +++ b/mentos/src/fs/readdir.c @@ -4,14 +4,14 @@ /// See LICENSE.md for details. #include "sys/dirent.h" -#include "process/scheduler.h" -#include "system/syscall.h" -#include "system/printk.h" -#include "sys/errno.h" -#include "stdio.h" -#include "fs/vfs.h" -#include "string.h" #include "assert.h" +#include "fs/vfs.h" +#include "process/scheduler.h" +#include "stdio.h" +#include "string.h" +#include "sys/errno.h" +#include "system/printk.h" +#include "system/syscall.h" ssize_t sys_getdents(int fd, dirent_t *dirp, unsigned int count) { @@ -44,7 +44,8 @@ ssize_t sys_getdents(int fd, dirent_t *dirp, unsigned int count) // Perform the read. ssize_t actual_read = vfs_getdents(file, dirp, process_fd->file_struct->f_pos, count); // Update the offset, only if the value the function returns is positive. - if (actual_read > 0) + if (actual_read > 0) { process_fd->file_struct->f_pos += actual_read; + } return actual_read; } diff --git a/mentos/src/fs/stat.c b/mentos/src/fs/stat.c index aba6b6a..ef0182f 100644 --- a/mentos/src/fs/stat.c +++ b/mentos/src/fs/stat.c @@ -4,12 +4,12 @@ /// See LICENSE.md for details. #include "io/debug.h" -#include "sys/errno.h" #include "fs/vfs.h" +#include "limits.h" #include "mem/kheap.h" #include "stdio.h" #include "string.h" -#include "limits.h" +#include "sys/errno.h" int sys_stat(const char *path, stat_t *buf) { diff --git a/mentos/src/fs/vfs.c b/mentos/src/fs/vfs.c index 34b758d..2436068 100644 --- a/mentos/src/fs/vfs.c +++ b/mentos/src/fs/vfs.c @@ -4,23 +4,23 @@ /// See LICENSE.md for details. // Setup the logging for this file (do this before any other include). -#include "sys/kernel_levels.h" // Include kernel log levels. -#define __DEBUG_HEADER__ "[VFS ]" ///< Change header. +#include "sys/kernel_levels.h" // Include kernel log levels. +#define __DEBUG_HEADER__ "[VFS ]" ///< Change header. #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. -#include "io/debug.h" // Include debugging functions. +#include "io/debug.h" // Include debugging functions. -#include "fs/vfs.h" -#include "process/scheduler.h" -#include "klib/spinlock.h" -#include "strerror.h" -#include "system/syscall.h" -#include "klib/hashmap.h" -#include "string.h" -#include "fs/procfs.h" #include "assert.h" +#include "fs/procfs.h" +#include "fs/vfs.h" +#include "klib/hashmap.h" +#include "klib/spinlock.h" #include "libgen.h" -#include "system/panic.h" +#include "process/scheduler.h" #include "stdio.h" +#include "strerror.h" +#include "string.h" +#include "system/panic.h" +#include "system/syscall.h" /// The hashmap that associates a type of Filesystem `name` to its `mount` function; static hashmap_t *vfs_filesystems; @@ -94,7 +94,7 @@ super_block_t *vfs_get_superblock(const char *absolute_path) } } #else - int len = strlen(superblock->path); + size_t len = strlen(superblock->path); if (!strncmp(absolute_path, superblock->path, len)) { if (len > last_sb_len) { last_sb_len = len; @@ -544,8 +544,9 @@ int vfs_destroy_task(task_struct *task) // Decrease the counter. --task->fd_list[fd].file_struct->count; // If counter is zero, close the file. - if (task->fd_list[fd].file_struct->count == 0) + if (task->fd_list[fd].file_struct->count == 0) { task->fd_list[fd].file_struct->fs_operations->close_f(task->fd_list[fd].file_struct); + } // Clear the pointer to the file structure. task->fd_list[fd].file_struct = NULL; } diff --git a/mentos/src/hardware/cpuid.c b/mentos/src/hardware/cpuid.c index 5726be1..06efa4a 100644 --- a/mentos/src/hardware/cpuid.c +++ b/mentos/src/hardware/cpuid.c @@ -146,7 +146,7 @@ char *cpuid_brand_index(pt_regs *f) "Mobile Intel Celeron", NULL }; - int bx = (f->ebx & 0xFF); + uint32_t bx = (f->ebx & 0xFF); if (bx > 0x17) { bx = 0; diff --git a/mentos/src/hardware/timer.c b/mentos/src/hardware/timer.c index e9a3767..2d81394 100644 --- a/mentos/src/hardware/timer.c +++ b/mentos/src/hardware/timer.c @@ -9,21 +9,21 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "hardware/timer.h" -#include "klib/irqflags.h" -#include "process/scheduler.h" -#include "hardware/pic8259.h" -#include "io/port_io.h" -#include "io/video.h" -#include "stdint.h" -#include "mem/kheap.h" -#include "process/wait.h" -#include "drivers/rtc.h" +#include "assert.h" #include "descriptor_tables/isr.h" #include "devices/fpu.h" -#include "system/signal.h" -#include "assert.h" +#include "drivers/rtc.h" +#include "hardware/pic8259.h" +#include "hardware/timer.h" +#include "io/port_io.h" +#include "io/video.h" +#include "klib/irqflags.h" +#include "mem/kheap.h" +#include "process/scheduler.h" +#include "process/wait.h" +#include "stdint.h" #include "sys/errno.h" +#include "system/signal.h" /// @defgroup picregs Programmable Interval Timer Registers /// @brief The list of registers used to set the PIT. @@ -155,8 +155,9 @@ void dynamic_timers_install() tvec_base_t *base = &cpu_base; base->timer_ticks = 0; - for (int i = 0; i < TVR_SIZE; ++i) + for (int i = 0; i < TVR_SIZE; ++i) { list_head_init(base->tv1.vec + i); + } for (int i = 0; i < TVN_SIZE; ++i) { list_head_init(base->tv2.vec + i); @@ -173,8 +174,9 @@ void dynamic_timers_install() /// Prints used slots of timer vector static void __print_tvec_slots(tvec_base_t *base, int tv_index) { - if (tv_index < 0 || tv_index > 5) + if (tv_index < 0 || tv_index > 5) { return; + } // Write buffer char result[TVN_SIZE + 1]; @@ -188,13 +190,15 @@ static void __print_tvec_slots(tvec_base_t *base, int tv_index) for (int i = 0; i < TVR_SIZE; ++i) { // New line in order to not clutter the screen int index = i % TVN_SIZE; - if (i != 0 && index == 0) + if (i != 0 && index == 0) { pr_debug("\n\t%s", result); + } - if (!list_head_empty(base->tv1.vec + i)) + if (!list_head_empty(base->tv1.vec + i)) { result[index] = '1'; - else + } else { result[index] = '0'; + } } // The last line @@ -219,14 +223,15 @@ static void __print_tvec_slots(tvec_base_t *base, int tv_index) } for (int i = 0; i < TVN_SIZE; ++i) { - if (list_head_empty(tv->vec + i)) + if (list_head_empty(tv->vec + i)) { result[i] = '0'; - else + } else { result[i] = '1'; + } } pr_debug("base->tv%d.vec:\n\t%s\n", tv_index, result); - (void) result; + (void)result; } /// Dump all timer vector in base @@ -241,7 +246,7 @@ static inline void __dump_all_tvec_slots(tvec_base_t *base) /// Select correct timer vector and position inside of it for the input timer /// index contains the position inside of the tv_index timer vector -static void __find_tvec(tvec_base_t *base, struct timer_list *timer, int *index, int *tv_index) +static void __find_tvec(tvec_base_t *base, struct timer_list *timer, uint32_t *index, uint32_t *tv_index) { assert(index && "index is NULL"); assert(tv_index && "tv_index is NULL"); @@ -289,7 +294,7 @@ static void __find_tvec(tvec_base_t *base, struct timer_list *timer, int *index, /// Add timers into different lists based on their expire time static void __add_timer_tvec_base(tvec_base_t *base, struct timer_list *timer) { - int index = 0, tv_index = 0; + uint32_t index = 0, tv_index = 0; __find_tvec(base, timer, &index, &tv_index); struct list_head *vec; @@ -322,7 +327,7 @@ static void __add_timer_tvec_base(tvec_base_t *base, struct timer_list *timer) /// Remove timer from tvec_base static void __rem_timer_tvec_base(tvec_base_t *base, struct timer_list *timer) { - int index = 0, tv_index = 0; + uint32_t index = 0, tv_index = 0; __find_tvec(base, timer, &index, &tv_index); // TODO: Check why we do not use vec. @@ -355,7 +360,7 @@ static void __rem_timer_tvec_base(tvec_base_t *base, struct timer_list *timer) } /// Move all timers from tv up one level -static int cascate(tvec_base_t *base, timer_vec *tv, int time_index, int tv_index) +static uint32_t cascate(tvec_base_t *base, timer_vec *tv, uint32_t time_index, int tv_index) { if (!list_head_empty(tv->vec + time_index)) { pr_debug("Relocating timers in tv%d.vec[%d]\n", tv_index, time_index); @@ -383,7 +388,7 @@ void run_timer_softirq() unsigned long current_ticks = timer_get_ticks(); while (base->timer_ticks <= current_ticks) { // Index of the current timer to execute - int current_time_index = base->timer_ticks & TVR_MASK; + uint32_t current_time_index = base->timer_ticks & TVR_MASK; // If the index is zero then all lists in base->tv1 have been checked, so they are empty if (!current_time_index) { @@ -396,16 +401,15 @@ void run_timer_softirq() // lists are now empty. If so, cascade() is invoked once more to replenish // base->tv2 with the timers included in a list of base->tv3, and so on. - int tv2_index = (base->timer_ticks >> TIMER_TICKS_BITS(0)) & TVN_MASK; - int tv3_index = (base->timer_ticks >> TIMER_TICKS_BITS(1)) & TVN_MASK; - int tv4_index = (base->timer_ticks >> TIMER_TICKS_BITS(2)) & TVN_MASK; - int tv5_index = (base->timer_ticks >> TIMER_TICKS_BITS(3)) & TVN_MASK; + uint32_t tv2_index = (base->timer_ticks >> TIMER_TICKS_BITS(0)) & TVN_MASK; + uint32_t tv3_index = (base->timer_ticks >> TIMER_TICKS_BITS(1)) & TVN_MASK; + uint32_t tv4_index = (base->timer_ticks >> TIMER_TICKS_BITS(2)) & TVN_MASK; + uint32_t tv5_index = (base->timer_ticks >> TIMER_TICKS_BITS(3)) & TVN_MASK; if (!cascate(base, &base->tv2, tv2_index, 2) && !cascate(base, &base->tv3, tv3_index, 3) && !cascate(base, &base->tv4, tv4_index, 4) && - !cascate(base, &base->tv5, tv5_index, 5)) - ; + !cascate(base, &base->tv5, tv5_index, 5)) {} } // If there are timers to execute in this instant @@ -518,14 +522,17 @@ typedef struct sleep_data_t { /// @param data Custom data stored in the timer void sleep_timeout(unsigned long data) { - // NOTE: We could modify the sleep_on and make it return the wait_queue_entry_t - // and then store it in the dynamic timer data member instead of the task pid, - // this would remove the need to iterate the sleep queue list. + // TODO: We could modify the sleep_on and make it return the + // wait_queue_entry_t and then store it in the dynamic timer data member + // instead of the task pid, this would remove the need to iterate the sleep + // queue list. + // Cast the data. sleep_data_t *sleep_data = (sleep_data_t *)data; - + // Get the entry. wait_queue_entry_t *entry = sleep_data->entry; - task_struct *task = entry->task; + // Get the task. + task_struct *task = entry->task; // Executed entry's wakeup test function int res = entry->func(entry, 0, 0); @@ -540,9 +547,9 @@ void sleep_timeout(unsigned long data) int sys_nanosleep(const timespec *req, timespec *rem) { - // Probabilmente devi salvare rem da qualche parte, perche' dentro ci va - // messo quanto tempo mancava allo scadere del timer nel caso in cui il - // timer venga interrotto prima da un segnale. + // You probably have to save rem somewhere, because it contains how much + // time left until the timer expires, when the timer is stopped early by a + // signal. pr_debug("sys_nanosleep([s:%d; ns:%d],...)\n", req->tv_sec, req->tv_nsec); // Saves pid and rem timespec @@ -571,13 +578,14 @@ int sys_nanosleep(const timespec *req, timespec *rem) /// @param pid PID of the process whos associated timer has expired void alarm_timeout(unsigned long pid) { - sys_kill(pid, SIGALRM); - - struct task_struct *cur = scheduler_get_current_process(); - cur->real_timer = NULL; + sys_kill((pid_t)pid, SIGALRM); + // Get the current task. + struct task_struct *task = scheduler_get_current_process(); + // Remove the timer. + task->real_timer = NULL; } -int sys_alarm(int seconds) +unsigned sys_alarm(int seconds) { pr_debug("sys_alarm(seconds:%d)\n", seconds); @@ -585,7 +593,7 @@ int sys_alarm(int seconds) struct timer_list *timer; // If there is already a timer running - int result = 0; + unsigned result = 0; if (current->real_timer != NULL) { del_timer(current->real_timer); result = (current->real_timer->expires - timer_get_ticks()) / TICKS_PER_SECOND; @@ -598,8 +606,9 @@ int sys_alarm(int seconds) return result; } } else { - if (seconds == 0) + if (seconds == 0) { return 0; + } // Allocate new timer timer = (struct timer_list *)kmalloc(sizeof(struct timer_list)); @@ -656,8 +665,9 @@ static void update_task_itimerval(int which, const struct itimerval *val) int sys_getitimer(int which, struct itimerval *curr_value) { // Invalid time domain - if (which < 0 || which > 3) + if (which < 0 || which > 3) { return EINVAL; + } struct task_struct *curr = scheduler_get_current_process(); switch (which) { @@ -678,39 +688,44 @@ int sys_getitimer(int which, struct itimerval *curr_value) } // Real timer interval timemout -static void it_real_fn(unsigned long pid) +static void it_real_fn(unsigned long data) { - struct task_struct *cur = scheduler_get_running_process(pid); + pid_t pid = (pid_t)data; + // Get the current task. + struct task_struct *task = scheduler_get_running_process(pid); + // Send the signal. sys_kill(pid, SIGALRM); // If the real incr is not 0 then restart - if (cur->it_real_incr != 0) { + if (task->it_real_incr != 0) { // Create new timer for process struct timer_list *real_timer = (struct timer_list *)kmalloc(sizeof(struct timer_list)); - cur->real_timer = real_timer; + task->real_timer = real_timer; init_timer(real_timer); - real_timer->expires = timer_get_ticks() + cur->it_real_incr; + real_timer->expires = timer_get_ticks() + task->it_real_incr; real_timer->function = &it_real_fn; - real_timer->data = cur->pid; + real_timer->data = task->pid; add_timer(real_timer); return; } // No more timer - cur->real_timer = NULL; + task->real_timer = NULL; } int sys_setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value) { // Invalid time domain - if (which < 0 || which > 3) + if (which < 0 || which > 3) { return EINVAL; + } // Returns old timer interval - if (old_value != NULL) + if (old_value != NULL) { sys_getitimer(which, old_value); + } // Get ticks of interval unsigned long interval_ticks = new_value->it_interval.tv_sec * TICKS_PER_SECOND; @@ -720,8 +735,9 @@ int sys_setitimer(int which, const struct itimerval *new_value, struct itimerval struct task_struct *cur = scheduler_get_current_process(); if (interval_ticks == 0) { // Removes real_timer - if (which == ITIMER_REAL && cur->real_timer != NULL) + if (which == ITIMER_REAL && cur->real_timer != NULL) { cur->real_timer = NULL; + } update_task_itimerval(which, new_value); return -1; diff --git a/mentos/src/io/debug.c b/mentos/src/io/debug.c index dd12467..d4169a1 100644 --- a/mentos/src/io/debug.c +++ b/mentos/src/io/debug.c @@ -4,13 +4,13 @@ /// See LICENSE.md for details. #include "io/debug.h" -#include "io/port_io.h" #include "io/ansi_colors.h" -#include "sys/bitops.h" +#include "io/port_io.h" #include "kernel.h" -#include "string.h" -#include "stdio.h" #include "math.h" +#include "stdio.h" +#include "string.h" +#include "sys/bitops.h" /// Serial port for QEMU. #define SERIAL_COM1 (0x03F8) @@ -24,8 +24,9 @@ void dbg_putchar(char c) void dbg_puts(const char *s) { - while ((*s) != 0) + while ((*s) != 0) { dbg_putchar(*s++); + } } static inline void __debug_print_header(const char *file, const char *fun, int line, short log_level, char *header) @@ -77,8 +78,9 @@ static inline void __debug_print_header(const char *file, const char *fun, int l void set_log_level(int level) { - if ((level >= LOGLEVEL_EMERG) && (level <= LOGLEVEL_DEBUG)) + if ((level >= LOGLEVEL_EMERG) && (level <= LOGLEVEL_DEBUG)) { max_log_level = level; + } } int get_log_level() @@ -93,8 +95,9 @@ void dbg_printf(const char *file, const char *fun, int line, char *header, short static short new_line = 1; // Stage 1: FORMAT - if (strlen(format) >= BUFSIZ) + if (strlen(format) >= BUFSIZ) { return; + } // Start variabile argument's list. va_list ap; @@ -133,8 +136,9 @@ const char *to_human_size(unsigned long bytes) int i = 0; double dblBytes = bytes; if (bytes > 1024) { - for (i = 0; (bytes / 1024) > 0 && i < length - 1; i++, bytes /= 1024) + for (i = 0; (bytes / 1024) > 0 && i < length - 1; i++, bytes /= 1024) { dblBytes = bytes / 1024.0; + } } sprintf(output, "%.02lf %2s", dblBytes, suffix[i]); return output; diff --git a/mentos/src/io/proc_feedback.c b/mentos/src/io/proc_feedback.c index 326ba84..c906320 100644 --- a/mentos/src/io/proc_feedback.c +++ b/mentos/src/io/proc_feedback.c @@ -4,10 +4,10 @@ /// See LICENSE.md for details. #include "fs/procfs.h" -#include "process/process.h" -#include "sys/errno.h" #include "io/debug.h" +#include "process/process.h" #include "string.h" +#include "sys/errno.h" static ssize_t procfb_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyte) { diff --git a/mentos/src/io/proc_ipc.c b/mentos/src/io/proc_ipc.c index 11153de..7e9a586 100644 --- a/mentos/src/io/proc_ipc.c +++ b/mentos/src/io/proc_ipc.c @@ -4,13 +4,13 @@ /// See LICENSE.md for details. #include "process/process.h" -#include "sys/errno.h" #include "fs/procfs.h" #include "io/debug.h" +#include "string.h" +#include "sys/errno.h" #include "sys/msg.h" #include "sys/sem.h" #include "sys/shm.h" -#include "string.h" extern ssize_t procipc_msg_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyte); diff --git a/mentos/src/io/proc_running.c b/mentos/src/io/proc_running.c index 46ff314..aece47a 100644 --- a/mentos/src/io/proc_running.c +++ b/mentos/src/io/proc_running.c @@ -5,13 +5,13 @@ #include "fs/procfs.h" -#include "process/process.h" -#include "string.h" -#include "libgen.h" -#include "stdio.h" -#include "sys/errno.h" #include "io/debug.h" +#include "libgen.h" #include "process/prio.h" +#include "process/process.h" +#include "stdio.h" +#include "string.h" +#include "sys/errno.h" /// @brief Returns the character identifying the process state. /// @details @@ -24,20 +24,13 @@ /// X Dead static inline char __procr_get_task_state_char(int state) { - if (state == 0x00) // TASK_RUNNING - return 'R'; - if (state == (1 << 0)) // TASK_INTERRUPTIBLE - return 'S'; - if (state == (1 << 1)) // TASK_UNINTERRUPTIBLE - return 'D'; - if (state == (1 << 2)) // TASK_STOPPED - return 'T'; - if (state == (1 << 3)) // TASK_TRACED - return 't'; - if (state == (1 << 4)) // EXIT_ZOMBIE - return 'Z'; - if (state == (1 << 5)) // EXIT_DEAD - return 'X'; + if (state == 0x00) { return 'R'; } // TASK_RUNNING + if (state == (1 << 0)) { return 'S'; } // TASK_INTERRUPTIBLE + if (state == (1 << 1)) { return 'D'; } // TASK_UNINTERRUPTIBLE + if (state == (1 << 2)) { return 'T'; } // TASK_STOPPED + if (state == (1 << 3)) { return 't'; } // TASK_TRACED + if (state == (1 << 4)) { return 'Z'; } // EXIT_ZOMBIE + if (state == (1 << 5)) { return 'X'; } // EXIT_DEAD return '?'; } @@ -84,10 +77,11 @@ static inline ssize_t __procr_do_stat(char *buffer, size_t bufsize, task_struct //(4) ppid %d // The PID of the parent of this process. // - if (task->parent) + if (task->parent) { sprintf(buffer, "%s %d", buffer, task->parent->pid); - else + } else { strcat(buffer, " 0"); + } //(5) TODO: pgrp %d // The process group ID of the process. // @@ -305,10 +299,11 @@ static inline ssize_t __procr_do_stat(char *buffer, size_t bufsize, task_struct // or 0, for non-real-time processes (see // sched_setscheduler(2)). // - if (task->se.prio >= 100) + if (task->se.prio >= 100) { strcat(buffer, " 0"); - else + } else { sprintf(buffer, "%s %u", buffer, task->se.prio); + } //(41) TODO: policy %u (since Linux 2.5.19) // Scheduling policy (see sched_setscheduler(2)). Decode // using the SCHED_* constants in linux/sched.h. @@ -379,29 +374,34 @@ static inline ssize_t __procr_do_stat(char *buffer, size_t bufsize, task_struct /// @return The number of bytes we read. static inline ssize_t __procr_read(vfs_file_t *file, char *buffer, off_t offset, size_t nbyte) { - if (file == NULL) + if (file == NULL) { return -EFAULT; + } // Get the entry. proc_dir_entry_t *entry = (proc_dir_entry_t *)file->device; - if (entry == NULL) + if (entry == NULL) { return -EFAULT; + } // Get the task. task_struct *task = (task_struct *)entry->data; - if (task == NULL) + if (task == NULL) { return -EFAULT; + } // Prepare a support buffer. char support[BUFSIZ]; memset(support, 0, BUFSIZ); // Call the specific function. - if (strcmp(entry->name, "cmdline") == 0) + if (strcmp(entry->name, "cmdline") == 0) { __procr_do_cmdline(support, BUFSIZ, task); - else if (strcmp(entry->name, "stat") == 0) + } else if (strcmp(entry->name, "stat") == 0) { __procr_do_stat(support, BUFSIZ, task); + } // Copmute the amounts of bytes we want (and can) read. ssize_t bytes_to_read = max(0, min(strlen(support) - offset, nbyte)); // Perform the read. - if (bytes_to_read > 0) + if (bytes_to_read > 0) { memcpy(buffer, support + offset, bytes_to_read); + } return bytes_to_read; } diff --git a/mentos/src/io/proc_system.c b/mentos/src/io/proc_system.c index 484e6d2..fbfdb87 100644 --- a/mentos/src/io/proc_system.c +++ b/mentos/src/io/proc_system.c @@ -4,13 +4,13 @@ /// See LICENSE.md for details. #include "fs/procfs.h" -#include "version.h" -#include "process/process.h" -#include "string.h" -#include "stdio.h" -#include "sys/errno.h" -#include "io/debug.h" #include "hardware/timer.h" +#include "io/debug.h" +#include "process/process.h" +#include "stdio.h" +#include "string.h" +#include "sys/errno.h" +#include "version.h" static ssize_t procs_do_uptime(char *buffer, size_t bufsize); @@ -26,28 +26,31 @@ static ssize_t procs_do_stat(char *buffer, size_t bufsize); static ssize_t procs_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyte) { - if (file == NULL) + if (file == NULL) { return -EFAULT; + } proc_dir_entry_t *entry = (proc_dir_entry_t *)file->device; - if (entry == NULL) + if (entry == NULL) { return -EFAULT; + } // Prepare a buffer. char buffer[BUFSIZ]; memset(buffer, 0, BUFSIZ); // Call the specific function. int ret = 0; - if (strcmp(entry->name, "uptime") == 0) + if (strcmp(entry->name, "uptime") == 0) { ret = procs_do_uptime(buffer, BUFSIZ); - else if (strcmp(entry->name, "version") == 0) + } else if (strcmp(entry->name, "version") == 0) { ret = procs_do_version(buffer, BUFSIZ); - else if (strcmp(entry->name, "mounts") == 0) + } else if (strcmp(entry->name, "mounts") == 0) { ret = procs_do_mounts(buffer, BUFSIZ); - else if (strcmp(entry->name, "cpuinfo") == 0) + } else if (strcmp(entry->name, "cpuinfo") == 0) { ret = procs_do_cpuinfo(buffer, BUFSIZ); - else if (strcmp(entry->name, "meminfo") == 0) + } else if (strcmp(entry->name, "meminfo") == 0) { ret = procs_do_meminfo(buffer, BUFSIZ); - else if (strcmp(entry->name, "stat") == 0) + } else if (strcmp(entry->name, "stat") == 0) { ret = procs_do_stat(buffer, BUFSIZ); + } // Perform read. ssize_t it = 0; if (ret == 0) { diff --git a/mentos/src/io/proc_video.c b/mentos/src/io/proc_video.c index eb5f2d6..d0f4a5b 100644 --- a/mentos/src/io/proc_video.c +++ b/mentos/src/io/proc_video.c @@ -9,18 +9,18 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. +#include "bits/ioctls.h" #include "bits/termios-struct.h" +#include "ctype.h" #include "drivers/keyboard/keyboard.h" #include "drivers/keyboard/keymap.h" -#include "fs/procfs.h" -#include "bits/ioctls.h" -#include "sys/bitops.h" -#include "io/video.h" -#include "sys/errno.h" #include "fcntl.h" +#include "fs/procfs.h" #include "fs/vfs.h" -#include "ctype.h" +#include "io/video.h" #include "process/scheduler.h" +#include "sys/bitops.h" +#include "sys/errno.h" /// @brief Prints the ring-buffer. /// @param rb the ring-buffer to print. @@ -37,8 +37,9 @@ void print_rb(fs_rb_scancode_t *rb) static ssize_t procv_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyte) { // Stop if the buffer is invalid. - if (buf == NULL) + if (buf == NULL) { return -1; + } // Get the currently running process. task_struct *process = scheduler_get_current_process(); @@ -61,8 +62,9 @@ static ssize_t procv_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyt int c = keyboard_pop_back(); // Check that it's a valid caracter. - if (c < 0) + if (c < 0) { return 0; + } // Keep only the character not the scancode. c &= 0x00FF; @@ -78,8 +80,9 @@ static ssize_t procv_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyt // Pop the previous character in buffer. fs_rb_scancode_pop_front(rb); // Delete the previous character on video. - if (flg_echoe) + if (flg_echoe) { video_putc(c); + } } else { // Add the character to the buffer. fs_rb_scancode_push_front(rb, c); @@ -88,7 +91,8 @@ static ssize_t procv_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyt return 1; } return 0; - } else if (c == 0x7f) { + } + if (c == 0x7f) { if (flg_echo) { video_puts("^[[3~"); } @@ -98,10 +102,9 @@ static ssize_t procv_read(vfs_file_t *file, char *buf, off_t offset, size_t nbyt fs_rb_scancode_push_front(rb, '3'); fs_rb_scancode_push_front(rb, '~'); return 0; - } else { - // Add the character to the buffer. - fs_rb_scancode_push_front(rb, c); } + // Add the character to the buffer. + fs_rb_scancode_push_front(rb, c); // If echo is activated, output the character to video. if (flg_echo) { diff --git a/mentos/src/io/stdio.c b/mentos/src/io/stdio.c index 7dd841e..ed1422f 100644 --- a/mentos/src/io/stdio.c +++ b/mentos/src/io/stdio.c @@ -4,23 +4,25 @@ /// See LICENSE.md for details. #include "system/syscall.h" -#include "sys/errno.h" -#include "stdio.h" -#include "io/video.h" #include "ctype.h" #include "drivers/keyboard/keyboard.h" +#include "io/video.h" +#include "stdio.h" #include "string.h" +#include "sys/errno.h" int atoi(const char *str) { // Check the input string. - if (str == NULL) + if (str == NULL) { return 0; + } // Initialize sign, the result variable, and two indices. int sign = (str[0] == '-') ? -1 : +1, result = 0, i; // Find where the number ends. - for (i = (sign == -1) ? 1 : 0; (str[i] != '\0') && isdigit(str[i]); ++i) + for (i = (sign == -1) ? 1 : 0; (str[i] != '\0') && isdigit(str[i]); ++i) { result = (result * 10) + str[i] - '0'; + } return sign * result; } @@ -44,8 +46,9 @@ long strtol(const char *str, char **endptr, int base) c = *s++; } else { neg = 0; - if (c == '+') + if (c == '+') { c = *s++; + } } if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { @@ -53,8 +56,9 @@ long strtol(const char *str, char **endptr, int base) s += 2; base = 16; } - if (base == 0) + if (base == 0) { base = c == '0' ? 8 : 10; + } /* * Compute the cutoff value between legal numbers and illegal * numbers. That is the largest legal value, divided by the @@ -83,16 +87,19 @@ long strtol(const char *str, char **endptr, int base) cutlim = -cutlim; } for (acc = 0, any = 0;; c = (unsigned char)*s++) { - if (isdigit(c)) + if (isdigit(c)) { c -= '0'; - else if (isalpha(c)) + } else if (isalpha(c)) { c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else + } else { break; - if (c >= base) + } + if (c >= base) { break; - if (any < 0) + } + if (any < 0) { continue; + } if (neg) { if (acc < cutoff || (acc == cutoff && c > cutlim)) { any = -1; @@ -115,7 +122,8 @@ long strtol(const char *str, char **endptr, int base) } } } - if (endptr != 0) + if (endptr != 0) { *endptr = (char *)(any ? s - 1 : str); + } return (acc); } diff --git a/mentos/src/io/vga/vga.c b/mentos/src/io/vga/vga.c index ad91731..950b69a 100644 --- a/mentos/src/io/vga/vga.c +++ b/mentos/src/io/vga/vga.c @@ -9,16 +9,16 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "io/vga/vga.h" -#include "io/vga/vga_palette.h" -#include "io/vga/vga_mode.h" -#include "io/vga/vga_font.h" #include "hardware/timer.h" #include "io/port_io.h" +#include "io/vga/vga.h" +#include "io/vga/vga_font.h" +#include "io/vga/vga_mode.h" +#include "io/vga/vga_palette.h" #include "io/video.h" +#include "math.h" #include "stdbool.h" #include "string.h" -#include "math.h" /// Attribute Controller index port. #define AC_INDEX 0x03C0 @@ -111,12 +111,15 @@ static inline char *__get_seg(void) unsigned int seg; outportb(GC_INDEX, 6); seg = (inportb(GC_DATA) >> 2) & 3; - if ((seg == 0) || (seg == 1)) + if ((seg == 0) || (seg == 1)) { return (char *)0xA0000; - if (seg == 2) + } + if (seg == 2) { return (char *)0xB0000; - if (seg == 3) + } + if (seg == 3) { return (char *)0xB8000; + } return (char *)seg; } @@ -183,8 +186,9 @@ static inline void __set_plane(unsigned int plane) static unsigned __current_plane = -1u; unsigned char pmask; plane &= 3; - if (__current_plane == plane) + if (__current_plane == plane) { return; + } // Store the current plane. __current_plane = plane; // Compute the plane mask. @@ -384,8 +388,9 @@ static inline unsigned int __reverse_bits(char num) unsigned int reverse_num = 0; int i; for (i = 0; i < NO_OF_BITS; i++) { - if ((num & (1 << i))) + if ((num & (1 << i))) { reverse_num |= 1 << ((NO_OF_BITS - 1) - i); + } } return reverse_num; } @@ -461,10 +466,11 @@ static inline void __write_pixel_4(int x, int y, unsigned char color) pmask = 1; for (plane = 0; plane < 4; ++plane) { __set_plane(plane); - if (pmask & color) + if (pmask & color) { __write_byte(off, __read_byte(off) | mask); - else + } else { __write_byte(off, __read_byte(off) & ~mask); + } pmask <<= 1; } } @@ -511,15 +517,17 @@ int vga_is_enabled() int vga_width() { - if (vga_enable) + if (vga_enable) { return driver->width; + } return 0; } int vga_height() { - if (vga_enable) + if (vga_enable) { return driver->height; + } return 0; } @@ -571,19 +579,22 @@ void vga_draw_line(int x0, int y0, int x1, int y1, unsigned char color) int err = (dx > dy ? dx : -dy) / 2; while (true) { vga_draw_pixel(x0, y0, color); - if ((x0 == x1) && (y0 == y1)) + if ((x0 == x1) && (y0 == y1)) { break; + } if (dx > dy) { x0 += sx; err -= dy; - if (err < 0) + if (err < 0) { err += dx; + } y0 += sy; } else { y0 += sy; err -= dx; - if (err < 0) + if (err < 0) { err += dy; + } x0 += sx; } } @@ -602,8 +613,9 @@ void vga_draw_circle(int xc, int yc, int r, unsigned char color) int x = 0; int y = r; int p = 3 - 2 * r; - if (!r) + if (!r) { return; + } while (y >= x) // only formulate 1/8 of circle { vga_draw_pixel(xc - x, yc - y, color); //upper left left @@ -791,30 +803,36 @@ static int _cursor_state = 0; inline static void __vga_clear_cursor() { - for (unsigned cy = 0; cy < driver->font->height; ++cy) - for (unsigned cx = 0; cx < driver->font->width; ++cx) + for (unsigned cy = 0; cy < driver->font->height; ++cy) { + for (unsigned cx = 0; cx < driver->font->width; ++cx) { vga_draw_pixel(_x + cx, _y + cy, 0); + } + } } inline static void __vga_draw_cursor() { unsigned char color = (_cursor_state = (_cursor_state == 0)) * _color; - for (unsigned cy = 0; cy < driver->font->height; ++cy) - for (unsigned cx = 0; cx < driver->font->width; ++cx) + for (unsigned cy = 0; cy < driver->font->height; ++cy) { + for (unsigned cx = 0; cx < driver->font->width; ++cx) { vga_draw_pixel(_x + cx, _y + cy, color); + } + } } void vga_putc(int c) { if (_cursor_state) + __vga_clear_cursor(); // If the character is '\n' go the new line. if (c == '\n') { vga_new_line(); } else if ((c >= 0x20) && (c <= 0x7E)) { vga_draw_char(_x, _y, c, _color); - if ((_x += driver->font->width) >= driver->width) + if ((_x += driver->font->width) >= driver->width) { vga_new_line(); + } } else { return; } @@ -836,18 +854,22 @@ void vga_move_cursor(unsigned int x, unsigned int y) void vga_get_cursor_position(unsigned int *x, unsigned int *y) { - if (x) + if (x) { *x = _x / driver->font->width; - if (y) + } + if (y) { *y = _y / driver->font->height; + } } void vga_get_screen_size(unsigned int *width, unsigned int *height) { - if (width) + if (width) { *width = driver->width / driver->font->width; - if (height) + } + if (height) { *height = driver->height / driver->font->height; + } } void vga_clear_screen() diff --git a/mentos/src/io/video.c b/mentos/src/io/video.c index e73651a..b30a913 100644 --- a/mentos/src/io/video.c +++ b/mentos/src/io/video.c @@ -4,12 +4,12 @@ /// See LICENSE.md for details. #include "io/port_io.h" -#include "io/video.h" -#include "io/vga/vga.h" -#include "stdbool.h" #include "ctype.h" -#include "string.h" +#include "io/vga/vga.h" +#include "io/video.h" +#include "stdbool.h" #include "stdio.h" +#include "string.h" #define HEIGHT 25 ///< The height of the #define WIDTH 80 ///< The width of the @@ -282,10 +282,12 @@ void video_get_cursor_position(unsigned int *x, unsigned int *y) return; } #endif - if (x) + if (x) { *x = __get_x(); - if (y) + } + if (y) { *y = __get_y(); + } } void video_get_screen_size(unsigned int *width, unsigned int *height) @@ -296,10 +298,12 @@ void video_get_screen_size(unsigned int *width, unsigned int *height) return; } #endif - if (width) + if (width) { *width = WIDTH; - if (height) + } + if (height) { *height = HEIGHT; + } } void video_clear() @@ -365,10 +369,11 @@ void video_shift_one_page_up() // Decrese the number of scrolled pages, and compute which page must be loaded. int page_to_load = (STORED_PAGES - (--scrolled_page)); // If we have reached 0, restore the original page. - if (scrolled_page == 0) + if (scrolled_page == 0) { memcpy(ADDR, original_page, TOTAL_SIZE); - else + } else { memcpy(ADDR, upper_buffer + (page_to_load * TOTAL_SIZE), TOTAL_SIZE); + } } } @@ -378,8 +383,9 @@ void video_shift_one_page_down(void) // Increase the number of scrolled pages, and compute which page must be loaded. int page_to_load = (STORED_PAGES - (++scrolled_page)); // If we are loading the first history page, save the original. - if (scrolled_page == 1) + if (scrolled_page == 1) { memcpy(original_page, ADDR, TOTAL_SIZE); + } // Load the specific page. memcpy(ADDR, upper_buffer + (page_to_load * TOTAL_SIZE), TOTAL_SIZE); } diff --git a/mentos/src/ipc/msg.c b/mentos/src/ipc/msg.c index 0951c5e..170c15b 100644 --- a/mentos/src/ipc/msg.c +++ b/mentos/src/ipc/msg.c @@ -5,22 +5,22 @@ // ============================================================================ // Setup the logging for this file (do this before any other include). -#include "sys/kernel_levels.h" // Include kernel log levels. +#include "sys/kernel_levels.h" // Include kernel log levels. #define __DEBUG_HEADER__ "[IPCmsg]" ///< Change header. #define __DEBUG_LEVEL__ LOGLEVEL_DEBUG ///< Set log level. #include "io/debug.h" // Include debugging functions. // ============================================================================ -#include "process/scheduler.h" +#include "assert.h" +#include "fcntl.h" #include "process/process.h" -#include "system/panic.h" -#include "sys/errno.h" -#include "sys/msg.h" +#include "process/scheduler.h" +#include "stdio.h" #include "stdlib.h" #include "string.h" -#include "assert.h" -#include "stdio.h" -#include "fcntl.h" +#include "sys/errno.h" +#include "sys/msg.h" +#include "system/panic.h" #include "ipc/ipc.h" @@ -115,8 +115,9 @@ static inline msq_info_t *__list_find_msq_info_by_id(int msqid) // Get the current entry. msq_info = list_entry(it, msq_info_t, list); // If message queue set is valid, check the id. - if (msq_info && (msq_info->id == msqid)) + if (msq_info && (msq_info->id == msqid)) { return msq_info; + } } return NULL; } @@ -133,8 +134,9 @@ static inline msq_info_t *__list_find_msq_info_by_key(key_t key) // Get the current entry. msq_info = list_entry(it, msq_info_t, list); // If message queue set is valid, check the id. - if (msq_info && (msq_info->msqid.msg_perm.key == key)) + if (msq_info && (msq_info->msqid.msg_perm.key == key)) { return msq_info; + } } return NULL; } @@ -188,8 +190,9 @@ static inline void __msq_info_remove_message(msq_info_t *msq_info, struct msg *m } } // If the message is the last of the queue, set the last to NULL. - if (msq_info->msg_last == message) + if (msq_info->msg_last == message) { msq_info->msg_last = NULL; + } // Clear the pointer in message. message->msg_next = NULL; } diff --git a/mentos/src/kernel/sys.c b/mentos/src/kernel/sys.c index b0222a5..2cfef55 100644 --- a/mentos/src/kernel/sys.c +++ b/mentos/src/kernel/sys.c @@ -4,10 +4,10 @@ /// See LICENSE.md for details. #include "stdio.h" +#include "klib/mutex.h" +#include "klib/stdatomic.h" #include "sys/errno.h" #include "sys/reboot.h" -#include "klib/stdatomic.h" -#include "klib/mutex.h" static void machine_power_off() { diff --git a/mentos/src/klib/fcvt.c b/mentos/src/klib/fcvt.c index 6b5f1b5..add331e 100644 --- a/mentos/src/klib/fcvt.c +++ b/mentos/src/klib/fcvt.c @@ -83,8 +83,9 @@ static void cvt(double arg, int ndigits, int *decpt, int *sign, char *buf, unsig *p1 = '1'; (*decpt)++; if (eflag == 0) { - if (p > buf) + if (p > buf) { *p = '0'; + } p++; } } diff --git a/mentos/src/klib/hashmap.c b/mentos/src/klib/hashmap.c index 094c904..a9c6ecc 100644 --- a/mentos/src/klib/hashmap.c +++ b/mentos/src/klib/hashmap.c @@ -5,8 +5,8 @@ #include "klib/hashmap.h" #include "assert.h" -#include "string.h" #include "mem/slab.h" +#include "string.h" /// @brief Stores information of an entry of the hashmap. struct hashmap_entry_t { @@ -84,8 +84,9 @@ unsigned int hashmap_str_hash(const void *_key) char c; // This is the so-called "sdbm" hash. It comes from a piece of public // domain code from a clone of ndbm. - while ((c = *key++)) + while ((c = *key++)) { hash = c + (hash << 6) + (hash << 16) - hash; + } return hash; } @@ -178,9 +179,13 @@ void *hashmap_set(hashmap_t *map, const void *key, void *value) void *hashmap_get(hashmap_t *map, const void *key) { unsigned int hash = map->hash_func(key) % map->size; - for (hashmap_entry_t *x = map->entries[hash]; x; x = x->next) - if (map->hash_comp(x->key, key)) - return x->value; + for (hashmap_entry_t *x = map->entries[hash]; x; x = x->next) { + if (map->hash_comp(x->key, key)) { + { + return x->value; + } + } + } return NULL; } @@ -219,35 +224,43 @@ void *hashmap_remove(hashmap_t *map, const void *key) int hashmap_is_empty(hashmap_t *map) { - for (unsigned int i = 0; i < map->size; ++i) - if (map->entries[i]) + for (unsigned int i = 0; i < map->size; ++i) { + if (map->entries[i]) { return 0; + } + } return 1; } int hashmap_has(hashmap_t *map, const void *key) { unsigned int hash = map->hash_func(key) % map->size; - for (hashmap_entry_t *x = map->entries[hash]; x; x = x->next) - if (map->hash_comp(x->key, key)) + for (hashmap_entry_t *x = map->entries[hash]; x; x = x->next) { + if (map->hash_comp(x->key, key)) { return 1; + } + } return 0; } list_t *hashmap_keys(hashmap_t *map) { list_t *l = list_create(); - for (unsigned int i = 0; i < map->size; ++i) - for (hashmap_entry_t *x = map->entries[i]; x; x = x->next) + for (unsigned int i = 0; i < map->size; ++i) { + for (hashmap_entry_t *x = map->entries[i]; x; x = x->next) { list_insert_back(l, x->key); + } + } return l; } list_t *hashmap_values(hashmap_t *map) { list_t *l = list_create(); - for (unsigned int i = 0; i < map->size; ++i) - for (hashmap_entry_t *x = map->entries[i]; x; x = x->next) + for (unsigned int i = 0; i < map->size; ++i) { + for (hashmap_entry_t *x = map->entries[i]; x; x = x->next) { list_insert_back(l, x->value); + } + } return l; } diff --git a/mentos/src/klib/libgen.c b/mentos/src/klib/libgen.c index 6baac0a..243cf35 100644 --- a/mentos/src/klib/libgen.c +++ b/mentos/src/klib/libgen.c @@ -4,12 +4,12 @@ /// See LICENSE.md for details. #include "system/syscall.h" -#include "libgen.h" -#include "string.h" -#include "limits.h" #include "assert.h" -#include "mem/paging.h" #include "io/debug.h" +#include "libgen.h" +#include "limits.h" +#include "mem/paging.h" +#include "string.h" int dirname(const char *path, char *buffer, size_t buflen) { diff --git a/mentos/src/klib/list.c b/mentos/src/klib/list.c index 79299de..eab95b0 100644 --- a/mentos/src/klib/list.c +++ b/mentos/src/klib/list.c @@ -5,8 +5,8 @@ #include "klib/list.h" #include "assert.h" -#include "string.h" #include "mem/slab.h" +#include "string.h" static inline listnode_t *__node_alloc() { @@ -105,7 +105,8 @@ void *list_remove_node(list_t *list, listnode_t *node) if (list->head == node) { return list_remove_front(list); - } else if (list->tail == node) { + } + if (list->tail == node) { return list_remove_back(list); } diff --git a/mentos/src/klib/math.c b/mentos/src/klib/math.c index 55daa98..8b98abb 100644 --- a/mentos/src/klib/math.c +++ b/mentos/src/klib/math.c @@ -18,26 +18,30 @@ double round(double x) double floor(double x) { if (x > -1.0 && x < 1.0) { - if (x >= 0) + if (x >= 0) { return 0.0; + } return -1.0; } int i = (int)x; - if (x < 0) + if (x < 0) { return (double)(i - 1); + } return (double)i; } double ceil(double x) { if (x > -1.0 && x < 1.0) { - if (x <= 0) + if (x <= 0) { return 0.0; + } return 1.0; } int i = (int)x; - if (x > 0) + if (x > 0) { return (double)(i + 1); + } return (double)i; } @@ -145,8 +149,9 @@ double ln(double x) double logx(double x, double y) { // Base may not equal 1 or be negative. - if (y == 1.f || y < 0.f || ln(y) == 0.f) + if (y == 1.f || y < 0.f || ln(y) == 0.f) { return 0.f; + } return ln(x) / ln(y); } diff --git a/mentos/src/klib/ndtree.c b/mentos/src/klib/ndtree.c index 26bf5d3..d747646 100644 --- a/mentos/src/klib/ndtree.c +++ b/mentos/src/klib/ndtree.c @@ -4,10 +4,10 @@ /// See LICENSE.md for details. #include "io/debug.h" -#include "klib/ndtree.h" #include "assert.h" -#include "sys/list_head.h" +#include "klib/ndtree.h" #include "mem/slab.h" +#include "sys/list_head.h" // ============================================================================ // Tree types. @@ -86,8 +86,9 @@ void ndtree_node_set_value(ndtree_node_t *node, void *value) void *ndtree_node_get_value(ndtree_node_t *node) { - if (node) + if (node) { return node->value; + } return NULL; } @@ -137,8 +138,9 @@ unsigned int ndtree_node_count_children(ndtree_node_t *node) void ndtree_node_dealloc(ndtree_node_t *node) { - if (node) + if (node) { kfree(node); + } } // ============================================================================ @@ -184,8 +186,9 @@ static void __ndtree_tree_dealloc_rec(ndtree_t *tree, ndtree_node_t *node, ndtre void ndtree_tree_dealloc(ndtree_t *tree, ndtree_tree_node_f node_cb) { - if (tree && tree->root && node_cb) + if (tree && tree->root && node_cb) { __ndtree_tree_dealloc_rec(tree, tree->root, node_cb); + } kfree(tree); } @@ -210,8 +213,9 @@ static ndtree_node_t *__ndtree_tree_find_rec(ndtree_t *tree, ndtree_tree_cmp_f c ndtree_node_t *ndtree_tree_find(ndtree_t *tree, ndtree_tree_cmp_f cmp, void *value) { - if (tree && tree->root && value) + if (tree && tree->root && value) { return __ndtree_tree_find_rec(tree, cmp, value, tree->root); + } return NULL; } @@ -224,14 +228,16 @@ ndtree_node_t *ndtree_node_find(ndtree_t *tree, ndtree_node_t *node, ndtree_tree ndtree_tree_cmp_f cmp_fun = cmp ? cmp : tree->cmp; // If neither the tree nor the function argument are valid, rollback to the // default comparison function. - if (cmp_fun == NULL) + if (cmp_fun == NULL) { cmp_fun = __ndtree_tree_node_cmp_ptr_cb; + } // Iterate throught the children. list_for_each_decl(it, &node->children) { ndtree_node_t *child = list_entry(it, ndtree_node_t, siblings); - if (cmp_fun(tree, child->value, value) == 0) + if (cmp_fun(tree, child->value, value) == 0) { return child; + } } } } @@ -240,8 +246,9 @@ ndtree_node_t *ndtree_node_find(ndtree_t *tree, ndtree_node_t *node, ndtree_tree unsigned int ndtree_tree_size(ndtree_t *tree) { - if (tree) + if (tree) { return tree->size; + } return 0; } @@ -271,10 +278,11 @@ int ndtree_tree_remove_node_with_cb(ndtree_t *tree, ndtree_node_t *node, ndtree_ // Merge the lists. list_head_append(new_list, &node->children); } - if (node_cb) + if (node_cb) { node_cb(tree, node); - else + } else { ndtree_node_dealloc(node); + } --tree->size; return 1; } @@ -302,8 +310,9 @@ ndtree_iter_t *ndtree_iter_alloc() void ndtree_iter_dealloc(ndtree_iter_t *iter) { - if (iter) + if (iter) { kfree(iter); + } } ndtree_node_t *ndtree_iter_first(ndtree_node_t *node, ndtree_iter_t *iter) @@ -361,17 +370,21 @@ static void __ndtree_tree_visitor_iter(ndtree_t *tree, { assert(tree); assert(node); - if (enter_fun) + if (enter_fun) { enter_fun(tree, node); - if (!list_head_empty(&node->children)) + } + if (!list_head_empty(&node->children)) { list_for_each_decl(it, &node->children) __ndtree_tree_visitor_iter(tree, list_entry(it, ndtree_node_t, siblings), enter_fun, exit_fun); - if (exit_fun) + } + if (exit_fun) { exit_fun(tree, node); + } } void ndtree_tree_visitor(ndtree_t *tree, ndtree_tree_node_f enter_fun, ndtree_tree_node_f exit_fun) { - if (tree && tree->root) + if (tree && tree->root) { __ndtree_tree_visitor_iter(tree, tree->root, enter_fun, exit_fun); + } } diff --git a/mentos/src/klib/rbtree.c b/mentos/src/klib/rbtree.c index 4124c37..8645ebe 100644 --- a/mentos/src/klib/rbtree.c +++ b/mentos/src/klib/rbtree.c @@ -63,15 +63,17 @@ rbtree_node_t *rbtree_node_create(void *value) void *rbtree_node_get_value(rbtree_node_t *node) { - if (node) + if (node) { return node->value; + } return NULL; } void rbtree_node_dealloc(rbtree_node_t *node) { - if (node) + if (node) { kfree(node); + } } static int rbtree_node_is_red(const rbtree_node_t *node) @@ -115,9 +117,11 @@ static int rbtree_tree_node_cmp_ptr_cb( static void rbtree_tree_node_dealloc_cb(rbtree_t *tree, rbtree_node_t *node) { - if (tree) - if (node) + if (tree) { + if (node) { rbtree_node_dealloc(node); + } + } } // rbtree_t @@ -504,41 +508,40 @@ int rbtree_tree_test(rbtree_t *tree, rbtree_node_t *root) { int lh, rh; - if (root == NULL) + if (root == NULL) { return 1; - else { - rbtree_node_t *ln = root->link[0]; - rbtree_node_t *rn = root->link[1]; - - /* Consecutive red links */ - if (rbtree_node_is_red(root)) { - if (rbtree_node_is_red(ln) || rbtree_node_is_red(rn)) { - pr_err("Red violation"); - return 0; - } - } - - lh = rbtree_tree_test(tree, ln); - rh = rbtree_tree_test(tree, rn); - - /* Invalid binary search tree */ - if ((ln != NULL && tree->cmp(tree, ln, root) >= 0) || (rn != NULL && tree->cmp(tree, rn, root) <= 0)) { - pr_err("Binary tree violation"); - return 0; - } - - /* Black height mismatch */ - if (lh != 0 && rh != 0 && lh != rh) { - pr_err("Black violation"); - return 0; - } - - /* Only count black links */ - if (lh != 0 && rh != 0) - return rbtree_node_is_red(root) ? lh : lh + 1; - else - return 0; } + rbtree_node_t *ln = root->link[0]; + rbtree_node_t *rn = root->link[1]; + + /* Consecutive red links */ + if (rbtree_node_is_red(root)) { + if (rbtree_node_is_red(ln) || rbtree_node_is_red(rn)) { + pr_err("Red violation"); + return 0; + } + } + + lh = rbtree_tree_test(tree, ln); + rh = rbtree_tree_test(tree, rn); + + /* Invalid binary search tree */ + if ((ln != NULL && tree->cmp(tree, ln, root) >= 0) || (rn != NULL && tree->cmp(tree, rn, root) <= 0)) { + pr_err("Binary tree violation"); + return 0; + } + + /* Black height mismatch */ + if (lh != 0 && rh != 0 && lh != rh) { + pr_err("Black violation"); + return 0; + } + + /* Only count black links */ + if (lh != 0 && rh != 0) { + return rbtree_node_is_red(root) ? lh : lh + 1; + } + return 0; } static void rbtree_tree_print_iter(rbtree_t *tree, @@ -549,10 +552,12 @@ static void rbtree_tree_print_iter(rbtree_t *tree, assert(node); assert(fun); fun(tree, node); - if (node->link[0]) + if (node->link[0]) { rbtree_tree_print_iter(tree, node->link[0], fun); - if (node->link[1]) + } + if (node->link[1]) { rbtree_tree_print_iter(tree, node->link[1], fun); + } } void rbtree_tree_print(rbtree_t *tree, rbtree_tree_node_f fun) diff --git a/mentos/src/klib/spinlock.c b/mentos/src/klib/spinlock.c index f0ed1aa..5031ad2 100644 --- a/mentos/src/klib/spinlock.c +++ b/mentos/src/klib/spinlock.c @@ -16,8 +16,9 @@ void spinlock_lock(spinlock_t *spinlock) if (atomic_set_and_test(spinlock, SPINLOCK_BUSY) == 0) { break; } - while (*spinlock) + while (*spinlock) { cpu_relax(); + } } } diff --git a/mentos/src/klib/string.c b/mentos/src/klib/string.c index 17cf0bb..a36cb68 100644 --- a/mentos/src/klib/string.c +++ b/mentos/src/klib/string.c @@ -5,9 +5,9 @@ #include "string.h" #include "ctype.h" +#include "fcntl.h" #include "stdio.h" #include "stdlib.h" -#include "fcntl.h" #ifdef __KERNEL__ #include "mem/kheap.h" @@ -25,8 +25,9 @@ char *strncpy(char *destination, const char *source, size_t num) // is found before num characters have been copied, destination is padded // with zeros until a total of num characters have been written to it. if (num) { - while (--num) + while (--num) { *destination++ = '\0'; + } } } // Pointer to destination is returned. @@ -35,8 +36,9 @@ char *strncpy(char *destination, const char *source, size_t num) int strncmp(const char *s1, const char *s2, size_t n) { - if (!n) + if (!n) { return 0; + } while ((--n > 0) && (*s1) && (*s2) && (*s1 == *s2)) { s1++; s2++; @@ -75,8 +77,9 @@ char *strchr(const char *s, int ch) while (*s && *s != (char)ch) { s++; } - if (*s == (char)ch) + if (*s == (char)ch) { return (char *)s; + } { return NULL; } @@ -164,8 +167,9 @@ size_t strcspn(const char *string, const char *control) size_t n; // Clear out bit map. - for (n = 0; n < 32; n++) + for (n = 0; n < 32; n++) { map[n] = 0; + } // Set bits in control map. while (*ctrl) { @@ -193,8 +197,9 @@ char *strpbrk(const char *string, const char *control) int n; // Clear out bit map. - for (n = 0; n < 32; n++) + for (n = 0; n < 32; n++) { map[n] = 0; + } // Set bits in control map. while (*ctrl) { @@ -318,8 +323,9 @@ char *strncat(char *s1, const char *s2, size_t n) s1--; while (n--) { - if (!(*s1++ = *s2++)) + if (!(*s1++ = *s2++)) { return start; + } } *s1 = '\0'; @@ -400,9 +406,8 @@ char *strtok_r(char *str, const char *delim, char **saveptr) // Determine if a token has been found. if (str == (char *)s) { return NULL; - } else { - return str; } + return str; } // Intrinsic functions. @@ -626,8 +631,9 @@ char *strdup(const char *s) #else char *new = malloc(len); #endif - if (new == NULL) + if (new == NULL) { return NULL; + } new[len] = '\0'; return (char *)memcpy(new, s, len); } @@ -640,8 +646,9 @@ char *strndup(const char *s, size_t n) #else char *new = malloc(len); #endif - if (new == NULL) + if (new == NULL) { return NULL; + } new[len] = '\0'; return (char *)memcpy(new, s, len); } diff --git a/mentos/src/klib/time.c b/mentos/src/klib/time.c index 5eac650..80f01c0 100644 --- a/mentos/src/klib/time.c +++ b/mentos/src/klib/time.c @@ -4,12 +4,12 @@ /// See LICENSE.md for details. #include "io/debug.h" -#include "time.h" -#include "stdio.h" -#include "stddef.h" -#include "io/port_io.h" -#include "hardware/timer.h" #include "drivers/rtc.h" +#include "hardware/timer.h" +#include "io/port_io.h" +#include "stddef.h" +#include "stdio.h" +#include "time.h" static const char *str_weekdays[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; @@ -91,7 +91,7 @@ tm_t *localtime(const time_t *time) t /= 24; // Convert Unix time to date a = (unsigned int)((4 * t + 102032) / 146097 + 15); - b = (unsigned int)(t + 2442113 + a - (a / 4)); + b = (t + 2442113 + a - (a / 4)); c = (20 * b - 2442) / 7305; d = b - 365 * c - (c / 4); e = d * 1000 / 30601; diff --git a/mentos/src/klib/vscanf.c b/mentos/src/klib/vscanf.c index 33fb22b..2194b16 100644 --- a/mentos/src/klib/vscanf.c +++ b/mentos/src/klib/vscanf.c @@ -5,9 +5,9 @@ #include "fs/vfs.h" #include "ctype.h" -#include "string.h" #include "io/debug.h" #include "stdio.h" +#include "string.h" static int vsscanf(const char *buf, const char *s, va_list ap) { @@ -16,18 +16,25 @@ static int vsscanf(const char *buf, const char *s, va_list ap) char tmp[BUFSIZ]; while (*s && *buf) { - while (isspace(*s)) + while (isspace(*s)) { ++s; + } if (*s == '%') { ++s; for (; *s; ++s) { - if (strchr("dibouxcsefg%", *s)) + if (strchr("dibouxcsefg%", *s)) { break; - if (*s == '*') - noassign = 1; - else if (isdigit(*s)) { - for (tc = s; isdigit(*s); ++s) - ; + } + if (*s == '*') { + { + noassign = 1; + } + } else if (isdigit(*s)) { + for (tc = s; isdigit(*s); ++s) { + { + ; + } + } strncpy(tmp, tc, s - tc); tmp[s - tc] = '\0'; width = strtol(tmp, NULL, 10); @@ -35,10 +42,12 @@ static int vsscanf(const char *buf, const char *s, va_list ap) } } if (*s == 's') { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (!width) + } + if (!width) { width = strcspn(buf, " \t\n\r\f\v"); + } if (!noassign) { char *string = va_arg(ap, char *); strncpy(string, buf, width); @@ -46,48 +55,56 @@ static int vsscanf(const char *buf, const char *s, va_list ap) } buf += width; } else if (*s == 'c') { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (!width) + } + if (!width) { width = 1; + } if (!noassign) { strncpy(va_arg(ap, char *), buf, width); } buf += width; } else if (strchr("duxob", *s)) { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (*s == 'd' || *s == 'u') + } + if (*s == 'd' || *s == 'u') { base = 10; - else if (*s == 'x') + } else if (*s == 'x') { base = 16; - else if (*s == 'o') + } else if (*s == 'o') { base = 8; - else if (*s == 'b') + } else if (*s == 'b') { base = 2; + } if (!width) { - if (isspace(*(s + 1)) || *(s + 1) == 0) + if (isspace(*(s + 1)) || *(s + 1) == 0) { width = strcspn(buf, " \t\n\r\f\v"); - else + } else { width = strchr(buf, *(s + 1)) - buf; + } } strncpy(tmp, buf, width); tmp[width] = '\0'; buf += width; - if (!noassign) + if (!noassign) { *va_arg(ap, unsigned int *) = strtol(tmp, NULL, base); + } } - if (!noassign) + if (!noassign) { ++count; + } width = noassign = 0; ++s; } else { - while (isspace(*buf)) + while (isspace(*buf)) { ++buf; - if (*s != *buf) + } + if (*s != *buf) { break; - else - ++s, ++buf; + } + ++s, ++buf; } } return (count); diff --git a/mentos/src/klib/vsprintf.c b/mentos/src/klib/vsprintf.c index ce4f295..9fd32dd 100644 --- a/mentos/src/klib/vsprintf.c +++ b/mentos/src/klib/vsprintf.c @@ -5,13 +5,13 @@ #include "math.h" #include "ctype.h" -#include "string.h" +#include "fcvt.h" +#include "io/video.h" #include "stdarg.h" #include "stdbool.h" #include "stdint.h" #include "stdio.h" -#include "io/video.h" -#include "fcvt.h" +#include "string.h" /// Size of the buffer used to call cvt functions. #define CVTBUFSIZE 500 @@ -34,8 +34,9 @@ static char *_upper_digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static inline int skip_atoi(const char **s) { int i = 0; - while (isdigit(**s)) + while (isdigit(**s)) { i = i * 10 + *((*s)++) - '0'; + } return i; } @@ -97,16 +98,17 @@ static char *number(char *str, long num, int base, int size, int32_t precision, } size -= precision; if (!(flags & (FLAGS_ZEROPAD | FLAGS_LEFT))) { - while (size-- > 0) + while (size-- > 0) { *str++ = ' '; + } } if (sign) { *str++ = sign; } if (flags & FLAGS_HASH) { - if (base == 8) + if (base == 8) { *str++ = '0'; - else if (base == 16) { + } else if (base == 16) { *str++ = '0'; *str++ = _digits[33]; } @@ -368,8 +370,9 @@ static char *flt(char *str, double num, int size, int precision, char fmt, unsig int n, i; // Left align means no zero padding. - if (flags & FLAGS_LEFT) + if (flags & FLAGS_LEFT) { flags &= ~FLAGS_ZEROPAD; + } // Determine padding and sign char. c = (flags & FLAGS_ZEROPAD) ? '0' : ' '; @@ -580,10 +583,11 @@ int vsprintf(char *str, const char *fmt, va_list args) flags |= FLAGS_UPPERCASE; break; case 'a': - if (qualifier == 'l') + if (qualifier == 'l') { tmp = eaddr(tmp, va_arg(args, unsigned char *), field_width, precision, flags); - else + } else { tmp = iaddr(tmp, va_arg(args, unsigned char *), field_width, precision, flags); + } continue; // Integer number formats - set up the flags and "break". case 'o': @@ -612,12 +616,14 @@ int vsprintf(char *str, const char *fmt, va_list args) tmp = flt(tmp, va_arg(args, double), field_width, precision, *fmt, flags | FLAGS_SIGN); continue; default: - if (*fmt != '%') + if (*fmt != '%') { *tmp++ = '%'; - if (*fmt) + } + if (*fmt) { *tmp++ = *fmt; - else + } else { --fmt; + } continue; } diff --git a/mentos/src/mem/kheap.c b/mentos/src/mem/kheap.c index 9e8d91b..ab1609a 100644 --- a/mentos/src/mem/kheap.c +++ b/mentos/src/mem/kheap.c @@ -148,12 +148,15 @@ static inline block_t *__blkmngr_find_best_fitting(heap_header_t *header, uint32 list_for_each_decl(it, &header->free) { block = list_entry(it, block_t, free); - if (!block->is_free) + if (!block->is_free) { continue; - if (!__blkmngr_does_it_fit(block, size)) + } + if (!__blkmngr_does_it_fit(block, size)) { continue; - if (!best_fitting || (block->size < best_fitting->size)) + } + if (!best_fitting || (block->size < best_fitting->size)) { best_fitting = block; + } } return best_fitting; } @@ -164,8 +167,9 @@ static inline block_t *__blkmngr_get_previous_block(heap_header_t *header, block assert(header && "Received a NULL heap header."); assert(block && "Received null block."); // If the block is actually the head of the list, return NULL. - if (block->list.prev == &header->list) + if (block->list.prev == &header->list) { return NULL; + } return list_entry(block->list.prev, block_t, list); } @@ -175,8 +179,9 @@ static inline block_t *__blkmngr_get_next_block(heap_header_t *header, block_t * assert(header && "Received a NULL heap header."); assert(block && "Received null block."); // If the block is actually the tail of the list, return NULL. - if (block->list.next == &header->list) + if (block->list.next == &header->list) { return NULL; + } return list_entry(block->list.next, block_t, list); } @@ -284,8 +289,9 @@ static void *__do_brk(vm_area_struct_t *heap, uint32_t increment) /// @return Pointer to the allocated memory area. static void *__do_malloc(vm_area_struct_t *heap, size_t size) { - if (size == 0) + if (size == 0) { return NULL; + } // Get the heap header. heap_header_t *header = (heap_header_t *)heap->vm_start; // Calculate size that's used, round it to multiple of 16. diff --git a/mentos/src/mem/paging.c b/mentos/src/mem/paging.c index 5779c57..3244035 100644 --- a/mentos/src/mem/paging.c +++ b/mentos/src/mem/paging.c @@ -9,19 +9,19 @@ #define __DEBUG_LEVEL__ LOGLEVEL_DEBUG ///< Set log level. #include "io/debug.h" // Include debugging functions. +#include "assert.h" +#include "descriptor_tables/isr.h" +#include "mem/kheap.h" #include "mem/paging.h" #include "mem/vmem_map.h" #include "mem/zone_allocator.h" -#include "mem/kheap.h" -#include "descriptor_tables/isr.h" -#include "system/panic.h" -#include "sys/list_head_algorithm.h" #include "stddef.h" #include "stdint.h" -#include "sys/list_head.h" -#include "sys/mman.h" -#include "assert.h" #include "string.h" +#include "sys/list_head.h" +#include "sys/list_head_algorithm.h" +#include "sys/mman.h" +#include "system/panic.h" /// Cache for storing mm_struct. kmem_cache_t *mm_cache; @@ -218,8 +218,9 @@ inline vm_area_struct_t *find_vm_area(mm_struct_t *mm, uint32_t vm_start) { segment = list_entry(it, vm_area_struct_t, vm_list); assert(segment && "There is a NULL area in the list."); - if (segment->vm_start == vm_start) + if (segment->vm_start == vm_start) { return segment; + } } return NULL; } @@ -343,16 +344,21 @@ static void __page_fault_panic(pt_regs *f, uint32_t addr) pr_err("Page fault: 0x%x\n", addr); pr_err("Possible causes: [ "); - if (!(f->err_code & ERR_PRESENT)) + if (!(f->err_code & ERR_PRESENT)) { pr_err("Page not present "); - if (f->err_code & ERR_RW) + } + if (f->err_code & ERR_RW) { pr_err("Page is read only "); - if (f->err_code & ERR_USER) + } + if (f->err_code & ERR_USER) { pr_err("Page is privileged "); - if (f->err_code & ERR_RESERVED) + } + if (f->err_code & ERR_RESERVED) { pr_err("Overwrote reserved bits "); - if (f->err_code & ERR_INST) + } + if (f->err_code & ERR_INST) { pr_err("Instruction fetch "); + } pr_err("]\n"); dbg_print_regs(f); @@ -404,19 +410,18 @@ static page_table_t *__mem_pg_entry_alloc(page_dir_entry_t *entry, uint32_t flag entry->accessed = 0; entry->available = 1; return kmem_cache_alloc(pgtbl_cache, GFP_KERNEL); - } else { - entry->present |= (flags & MM_PRESENT) != 0; - entry->rw |= (flags & MM_RW) != 0; - - // We should not remove a global flag from a page directory, - // if this happens there is probably a bug in the kernel - assert(!entry->global || (flags & MM_GLOBAL)); - - entry->global &= (flags & MM_GLOBAL) != 0; - entry->user |= (flags & MM_USER) != 0; - return (page_table_t *)get_lowmem_address_from_page( - get_page_from_physical_address(((uint32_t)entry->frame) << 12U)); } + entry->present |= (flags & MM_PRESENT) != 0; + entry->rw |= (flags & MM_RW) != 0; + + // We should not remove a global flag from a page directory, + // if this happens there is probably a bug in the kernel + assert(!entry->global || (flags & MM_GLOBAL)); + + entry->global &= (flags & MM_GLOBAL) != 0; + entry->user |= (flags & MM_USER) != 0; + return (page_table_t *)get_lowmem_address_from_page( + get_page_from_physical_address(((uint32_t)entry->frame) << 12U)); } static inline void __set_pg_entry_frame(page_dir_entry_t *entry, page_table_t *table) @@ -630,7 +635,7 @@ void mem_upd_vm_area(page_directory_t *pgd, if (flags & MM_UPDADDR) { it.entry->frame = phy_pfn++; // Flush the tlb to allow address update - // TODO: Check if it's always needed (ex. when the pgdir is not the current one) + // TODO(enrico): Check if it's always needed (ex. when the pgdir is not the current one) paging_flush_tlb_single(it.pfn * PAGE_SIZE); } __set_pg_table_flags(it.entry, flags); @@ -666,7 +671,7 @@ void mem_clone_vm_area(page_directory_t *src_pgd, } // Flush the tlb to allow address update - // TODO: Check if it's always needed (ex. when the pgdir is not the current one) + // TODO(enrico): Check if it's always needed (ex. when the pgdir is not the current one) paging_flush_tlb_single(dst_it.pfn * PAGE_SIZE); } } @@ -677,7 +682,7 @@ mm_struct_t *create_blank_process_image(size_t stack_size) mm_struct_t *mm = kmem_cache_alloc(mm_cache, GFP_KERNEL); memset(mm, 0, sizeof(mm_struct_t)); - // TODO: Use this field + // TODO(enrico): Use this field list_head_init(&mm->mm_list); page_directory_t *pdir_cpy = kmem_cache_alloc(pgdir_cache, GFP_KERNEL); diff --git a/mentos/src/mem/slab.c b/mentos/src/mem/slab.c index a8138b3..54573e7 100644 --- a/mentos/src/mem/slab.c +++ b/mentos/src/mem/slab.c @@ -9,10 +9,10 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "mem/zone_allocator.h" +#include "assert.h" #include "mem/paging.h" #include "mem/slab.h" -#include "assert.h" +#include "mem/zone_allocator.h" /// @brief Use it to manage cached pages. typedef struct kmem_obj { @@ -144,8 +144,9 @@ static inline void *__kmem_cache_alloc_slab(kmem_cache_t *cachep, page_t *slab_p // Get the element from the kmem_obj object void *elem = ADDR_FROM_KMEM_OBJ(cachep, obj); - if (cachep->ctor) + if (cachep->ctor) { cachep->ctor(elem); + } return elem; } @@ -199,8 +200,9 @@ kmem_cache_t *kmem_cache_create( kmem_fun_t dtor) { kmem_cache_t *cachep = (kmem_cache_t *)kmem_cache_alloc(&kmem_cache, GFP_KERNEL); - if (!cachep) + if (!cachep) { return cachep; + } __kmem_cache_create(cachep, name, size, align, flags, ctor, dtor, KMEM_START_OBJ_COUNT); @@ -236,8 +238,9 @@ void *kmem_cache_alloc(kmem_cache_t *cachep, gfp_t flags) { if (list_head_empty(&cachep->slabs_partial)) { if (list_head_empty(&cachep->slabs_free)) { - if (flags == 0) + if (flags == 0) { flags = cachep->flags; + } // Refill the cache in an exponential fashion, capping at KMEM_MAX_REFILL_OBJ_COUNT to avoid // too big allocations @@ -286,8 +289,9 @@ void kmem_cache_free(void *ptr) #ifdef ENABLE_CACHE_TRACE pr_notice("CHACE-FREE 0x%p in %-20s at %s:%d\n", ptr, cachep->name, file, line); #endif - if (cachep->dtor) + if (cachep->dtor) { cachep->dtor(ptr); + } kmem_obj *obj = KMEM_OBJ(cachep, ptr); diff --git a/mentos/src/mem/vmem_map.c b/mentos/src/mem/vmem_map.c index ddd8f24..4d5a9a6 100644 --- a/mentos/src/mem/vmem_map.c +++ b/mentos/src/mem/vmem_map.c @@ -10,8 +10,8 @@ #include "io/debug.h" // Include debugging functions. #include "mem/vmem_map.h" -#include "system/panic.h" #include "string.h" +#include "system/panic.h" /// Virtual addresses manager. static virt_map_page_manager_t virt_default_mapping; @@ -88,8 +88,9 @@ static virt_map_page_t *_alloc_virt_pages(uint32_t pfn_count) uint32_t virt_map_physical_pages(page_t *page, int pfn_count) { virt_map_page_t *vpage = _alloc_virt_pages(pfn_count); - if (!vpage) + if (!vpage) { return 0; + } uint32_t virt_address = VIRT_PAGE_TO_ADDRESS(vpage); uint32_t phy_address = get_physical_address_from_page(page); diff --git a/mentos/src/mem/zone_allocator.c b/mentos/src/mem/zone_allocator.c index 5a08500..5d3ceb4 100644 --- a/mentos/src/mem/zone_allocator.c +++ b/mentos/src/mem/zone_allocator.c @@ -9,13 +9,13 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "mem/zone_allocator.h" -#include "mem/buddysystem.h" -#include "sys/list_head.h" -#include "kernel.h" #include "assert.h" +#include "kernel.h" +#include "mem/buddysystem.h" #include "mem/paging.h" +#include "mem/zone_allocator.h" #include "string.h" +#include "sys/list_head.h" /// TODO: Comment. #define MIN_PAGE_ALIGN(addr) ((addr) & (~(PAGE_SIZE - 1))) @@ -75,8 +75,9 @@ static zone_t *get_zone_from_page(page_t *page) last_page = zone->zone_mem_map + zone->size; assert(last_page && "Failed to retrieve the last page of the zone."); // Check if the page is before the last page of the zone. - if (page < last_page) + if (page < last_page) { return zone; + } } // Error: page is over memory size. return (zone_t *)NULL; @@ -193,7 +194,7 @@ static int pmm_check() for (; j < 20; ++j) { free_pages_lowmem((uint32_t)ptr[j]); } - free_page_lowmem((uint32_t)ptr1); + free_page_lowmem(ptr1); if (!is_memory_clean(GFP_KERNEL)) { pr_emerg("Test failed, memory is not clean.\n"); diff --git a/mentos/src/multiboot.c b/mentos/src/multiboot.c index 466a395..ceace19 100644 --- a/mentos/src/multiboot.c +++ b/mentos/src/multiboot.c @@ -9,18 +9,18 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "multiboot.h" #include "kernel.h" +#include "multiboot.h" +#include "stddef.h" +#include "stddef.h" #include "sys/bitops.h" -#include "stddef.h" #include "system/panic.h" -#include "stddef.h" - multiboot_memory_map_t *mmap_first_entry(multiboot_info_t *info) { - if (!bitmask_check(info->flags, MULTIBOOT_FLAG_MMAP)) + if (!bitmask_check(info->flags, MULTIBOOT_FLAG_MMAP)) { return NULL; + } return (multiboot_memory_map_t *)((uintptr_t)info->mmap_addr); } @@ -28,8 +28,9 @@ multiboot_memory_map_t *mmap_first_entry_of_type(multiboot_info_t *info, uint32_t type) { multiboot_memory_map_t *entry = mmap_first_entry(info); - if (entry && (entry->type == type)) + if (entry && (entry->type == type)) { return entry; + } return mmap_next_entry_of_type(info, entry, type); } @@ -37,8 +38,9 @@ multiboot_memory_map_t *mmap_next_entry(multiboot_info_t *info, multiboot_memory_map_t *entry) { uintptr_t next = ((uintptr_t)entry) + entry->size + sizeof(entry->size); - if (next >= (info->mmap_addr + info->mmap_length)) + if (next >= (info->mmap_addr + info->mmap_length)) { return NULL; + } return (multiboot_memory_map_t *)next; } @@ -54,19 +56,23 @@ multiboot_memory_map_t *mmap_next_entry_of_type(multiboot_info_t *info, char *mmap_type_name(multiboot_memory_map_t *entry) { - if (entry->type == MULTIBOOT_MEMORY_AVAILABLE) + if (entry->type == MULTIBOOT_MEMORY_AVAILABLE) { return "AVAILABLE"; - if (entry->type == MULTIBOOT_MEMORY_RESERVED) + } + if (entry->type == MULTIBOOT_MEMORY_RESERVED) { return "RESERVED"; + } return "NONE"; } multiboot_module_t *first_module(multiboot_info_t *info) { - if (!bitmask_check(info->flags, MULTIBOOT_FLAG_MODS)) + if (!bitmask_check(info->flags, MULTIBOOT_FLAG_MODS)) { return NULL; - if (!info->mods_count) + } + if (!info->mods_count) { return NULL; + } return (multiboot_module_t *)(uintptr_t)info->mods_addr; } @@ -75,8 +81,9 @@ multiboot_module_t *next_module(multiboot_info_t *info, { multiboot_module_t *first = (multiboot_module_t *)((uintptr_t)info->mods_addr); ++mod; - if ((mod - first) >= info->mods_count) + if ((mod - first) >= info->mods_count) { return NULL; + } return mod; } @@ -124,7 +131,7 @@ void dump_multiboot(multiboot_info_t *mbi) pr_debug("%-16s = %d\n", "mods_count", mbi->mods_count); pr_debug("%-16s = 0x%x\n", "mods_addr", mbi->mods_addr); multiboot_module_t *mod = first_module(mbi); - for (int i = 0; mod; ++i, mod = next_module(mbi, mod)) { + for (uint32_t i = 0; mod; ++i, mod = next_module(mbi, mod)) { pr_debug(" [%2d] " "mod_start = 0x%x, " "mod_end = 0x%x, " @@ -165,7 +172,7 @@ void dump_multiboot(multiboot_info_t *mbi) mbi->mmap_length, mbi->mmap_length / sizeof(multiboot_memory_map_t)); multiboot_memory_map_t *mmap = mmap_first_entry(mbi); - for (int i = 0; mmap; ++i, mmap = mmap_next_entry(mbi, mmap)) { + for (uint32_t i = 0; mmap; ++i, mmap = mmap_next_entry(mbi, mmap)) { pr_debug(" [%2d] " "base_addr = 0x%09x%09x, " "length = 0x%09x%09x, " diff --git a/mentos/src/process/process.c b/mentos/src/process/process.c index fc0984b..23c8dfc 100644 --- a/mentos/src/process/process.c +++ b/mentos/src/process/process.c @@ -9,20 +9,20 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. +#include "assert.h" +#include "elf/elf.h" +#include "fcntl.h" +#include "fs/vfs.h" +#include "hardware/timer.h" +#include "klib/stack_helper.h" +#include "libgen.h" +#include "process/prio.h" #include "process/process.h" #include "process/scheduler.h" -#include "assert.h" -#include "libgen.h" -#include "string.h" -#include "hardware/timer.h" -#include "sys/errno.h" -#include "fcntl.h" -#include "system/panic.h" #include "process/wait.h" -#include "process/prio.h" -#include "fs/vfs.h" -#include "elf/elf.h" -#include "klib/stack_helper.h" +#include "string.h" +#include "sys/errno.h" +#include "system/panic.h" /// Cache for creating the task structs. static kmem_cache_t *task_struct_cache; @@ -35,8 +35,9 @@ static task_struct *init_proc; static inline int __count_args(char **args) { int argc = 0; - while (args[argc] != NULL) + while (args[argc] != NULL) { ++argc; + } return argc; } @@ -127,8 +128,9 @@ static int __load_executable(const char *path, task_struct *task, uint32_t *entr // they should share the mm, so the destroy_process_image must be called // only when all the threads are terminated. This can be accomplished by using // an internal counter on the mm. - if (task->mm) + if (task->mm) { destroy_process_image(task->mm); + } // Return code variable. int ret = 0; // Recreate the memory of the process. @@ -154,10 +156,11 @@ static inline task_struct *__alloc_task(task_struct *source, task_struct *parent // Set the state of the process as running. proc->state = TASK_RUNNING; // Set the current opened file descriptors and the maximum number of file descriptors. - if (source) + if (source) { vfs_dup_task(proc, source); - else + } else { vfs_init_task(proc); + } // Set the pointer to process's parent. proc->parent = parent; // Initialize the list_head. @@ -171,8 +174,9 @@ static inline task_struct *__alloc_task(task_struct *source, task_struct *parent // Set the new_process as child of current. list_head_insert_before(&proc->sibling, &parent->children); } - if (source) + if (source) { memcpy(&proc->thread, &source->thread, sizeof(thread_struct_t)); + } // Set the statistics of the process. proc->uid = 0; proc->gid = 0; @@ -196,17 +200,19 @@ static inline task_struct *__alloc_task(task_struct *source, task_struct *parent // Initialize the exit code of the process. proc->exit_code = 0; // Copy the name. - if (name) + if (name) { strcpy(proc->name, name); + } // Do not touch the task's segments. proc->mm = NULL; // Initialize the error number. proc->error_no = 0; // Initialize the current working directory. - if (source) + if (source) { strcpy(proc->cwd, source->cwd); - else + } else { strcpy(proc->cwd, "/"); + } // Clear the signal handler. memset(&proc->sighand, 0x00, sizeof(sighand_t)); spinlock_init(&proc->sighand.siglock); @@ -397,8 +403,9 @@ int sys_fchdir(int fd) pid_t sys_fork(pt_regs *f) { task_struct *current = scheduler_get_current_process(); - if (current == NULL) + if (current == NULL) { kernel_panic("There is no current process!"); + } pr_debug("Forking '%s' (pid: %d)...\n", current->name, current->pid); @@ -433,8 +440,9 @@ int sys_execve(pt_regs *f) { // Check the current process. task_struct *current = scheduler_get_current_process(); - if (current == NULL) + if (current == NULL) { kernel_panic("There is no current process!"); + } char **origin_argv, **saved_argv, **final_argv; char **origin_envp, **saved_envp, **final_envp; diff --git a/mentos/src/process/scheduler.c b/mentos/src/process/scheduler.c index 24de4a2..d5e312c 100644 --- a/mentos/src/process/scheduler.c +++ b/mentos/src/process/scheduler.c @@ -9,17 +9,17 @@ #define __DEBUG_LEVEL__ LOGLEVEL_DEBUG ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "process/scheduler_feedback.h" -#include "process/scheduler.h" -#include "process/prio.h" -#include "process/wait.h" -#include "descriptor_tables/tss.h" -#include "hardware/timer.h" -#include "system/panic.h" -#include "sys/errno.h" -#include "strerror.h" #include "assert.h" +#include "descriptor_tables/tss.h" #include "fs/vfs.h" +#include "hardware/timer.h" +#include "process/prio.h" +#include "process/scheduler.h" +#include "process/scheduler_feedback.h" +#include "process/wait.h" +#include "strerror.h" +#include "sys/errno.h" +#include "system/panic.h" /// @brief Assembly function setting the kernel stack to jump into /// location in Ring 3 mode (USER mode). @@ -61,17 +61,20 @@ time_t scheduler_get_maximum_vruntime() list_for_each_decl(it, &runqueue.queue) { // Check if we reached the head of list_head, and skip it. - if (it == &runqueue.queue) + if (it == &runqueue.queue) { continue; + } // Get the current entry. entry = list_entry(it, task_struct, run_list); // Skip the process if it is a periodic one, we are issued to skip // periodic tasks, and the entry is not a periodic task under // analysis. - if (entry->se.is_periodic && !entry->se.is_under_analysis) + if (entry->se.is_periodic && !entry->se.is_under_analysis) { continue; - if (entry->se.vruntime > vruntime) + } + if (entry->se.vruntime > vruntime) { vruntime = entry->se.vruntime; + } } return vruntime; } @@ -87,8 +90,9 @@ task_struct *scheduler_get_running_process(pid_t pid) list_for_each_decl(it, &runqueue.queue) { entry = list_entry(it, task_struct, run_list); - if (entry->pid == pid) + if (entry->pid == pid) { return entry; + } } return NULL; } @@ -117,8 +121,9 @@ void scheduler_dequeue_task(task_struct *process) list_head_remove(&process->run_list); // Decrement the number of active processes. --runqueue.num_active; - if (process->se.is_periodic) + if (process->se.is_periodic) { runqueue.num_periodic--; + } #ifdef ENABLE_SCHEDULER_FEEDBACK scheduler_feedback_task_remove(process->pid); @@ -128,8 +133,9 @@ void scheduler_dequeue_task(task_struct *process) void scheduler_run(pt_regs *f) { // Check if there is a running process. - if (runqueue.curr == NULL) + if (runqueue.curr == NULL) { return; + } task_struct *next = NULL; @@ -190,7 +196,7 @@ void scheduler_restore_context(task_struct *process, pt_regs *f) runqueue.curr = process; // Restore the registers. *f = process->thread.regs; - // TODO: Explain paging switch (ring 0 doesn't need page switching) + // TODO(enrico): Explain paging switch (ring 0 doesn't need page switching) // Switch to process page directory paging_switch_directory_va(process->mm->pgd); } @@ -219,7 +225,7 @@ static inline int try_to_wake_up(task_struct *process, unsigned mode, int sync) { // Only tasks in the state TASK_UNINTERRUPTIBLE can be woke up if (process->state == TASK_UNINTERRUPTIBLE || process->state == TASK_STOPPED) { - //TODO: Recalc task priority + // TODO(enrico): Recalc task priority process->state = TASK_RUNNING; return 1; } @@ -310,8 +316,11 @@ pid_t sys_getsid(pid_t pid) list_for_each (it, &runqueue.queue) { task_struct *task = list_entry(it, task_struct, run_list); if (task->pid == pid) { - if (runqueue.curr->sid != task->sid) - return -EPERM; + if (runqueue.curr->sid != task->sid) { + { + return -EPERM; + } + } return task->sid; } @@ -339,25 +348,29 @@ pid_t sys_setsid() pid_t sys_getpgid(pid_t pid) { task_struct *task = NULL; - if (pid == 0) + if (pid == 0) { task = runqueue.curr; - else + } else { task = scheduler_get_running_process(pid); - if (task) + } + if (task) { return task->pgid; + } return 0; } int sys_setpgid(pid_t pid, pid_t pgid) { task_struct *task = NULL; - if (pid == 0) + if (pid == 0) { task = runqueue.curr; - else + } else { task = scheduler_get_running_process(pid); + } if (task) { - if (task->pgid == task->pid) + if (task->pgid == task->pid) { pr_debug("Process %d is already a session leader.", task->pid); + } task->pgid = pgid; } return 0; @@ -365,8 +378,9 @@ int sys_setpgid(pid_t pid, pid_t pgid) uid_t sys_getuid() { - if (runqueue.curr) + if (runqueue.curr) { return runqueue.curr->uid; + } return -EPERM; } @@ -399,8 +413,9 @@ int sys_setgid(pid_t gid) pid_t sys_getppid() { // Get the current task. - if (runqueue.curr && runqueue.curr->parent) + if (runqueue.curr && runqueue.curr->parent) { return runqueue.curr->parent->pid; + } return -EPERM; } @@ -565,10 +580,11 @@ int sys_sched_setparam(pid_t pid, const sched_param_t *param) list_for_each (it, &runqueue.queue) { task_struct *entry = list_entry(it, task_struct, run_list); if (entry->pid == pid) { - if (!entry->se.is_periodic && param->is_periodic) + if (!entry->se.is_periodic && param->is_periodic) { runqueue.num_periodic++; - else if (entry->se.is_periodic && !param->is_periodic) + } else if (entry->se.is_periodic && !param->is_periodic) { runqueue.num_periodic--; + } // Sets the parameters from param to the "se" struct parameters. entry->se.prio = param->sched_priority; entry->se.period = param->period; @@ -615,8 +631,9 @@ static int __response_time_analysis() // Get the curent entry in the list. entry = list_entry(it, task_struct, run_list); // If the process is not periodic we skip it. - if (!entry->se.is_periodic) + if (!entry->se.is_periodic) { continue; + } // Put r equal to worst case exec because is the first point in time // that the task could possibly complete. r = entry->se.worst_case_exec, previous_r = 0; @@ -647,8 +664,9 @@ static int __response_time_analysis() } // Feasibility of scheduler is guaranteed if and only if response time // analysis is lower than deadline. - if (r > entry->se.deadline) + if (r > entry->se.deadline) { return 1; + } } return 0; } @@ -664,8 +682,9 @@ static inline double __compute_utilization_factor() // Get the entry. entry = list_entry(it, task_struct, run_list); // Sum the utilization factor of all periodic tasks. - if (entry->se.is_periodic) + if (entry->se.is_periodic) { U += entry->se.utilization_factor; + } } return U; } @@ -689,8 +708,9 @@ int sys_waitperiod() // Update the Worst Case Execution Time (WCET). time_t wcet = current_time - current->se.exec_start; - if (current->se.worst_case_exec < wcet) + if (current->se.worst_case_exec < wcet) { current->se.worst_case_exec = wcet; + } // Update the utilization factor. current->se.utilization_factor = ((double)current->se.worst_case_exec / (double)current->se.period); // If the task is under analysis, we need to test if the process can be @@ -727,8 +747,9 @@ int sys_waitperiod() pr_warning("Utilization factor is : %.2f, Least Upper Bound: %.2f\n", u, ulub); #endif // If it is not schedulable, we need to tell it to the process. - if (is_not_schedulable) + if (is_not_schedulable) { return -ENOTSCHEDULABLE; + } // Otherwise, it is schedulable and thus it is not under analysis // anymore. current->se.is_under_analysis = false; diff --git a/mentos/src/process/scheduler_algorithm.c b/mentos/src/process/scheduler_algorithm.c index 3767b94..675d82c 100644 --- a/mentos/src/process/scheduler_algorithm.c +++ b/mentos/src/process/scheduler_algorithm.c @@ -9,13 +9,13 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. +#include "assert.h" #include "hardware/timer.h" #include "process/prio.h" -#include "assert.h" -#include "sys/list_head.h" -#include "process/wait.h" #include "process/scheduler.h" #include "process/scheduler_feedback.h" +#include "process/wait.h" +#include "sys/list_head.h" /// @brief Updates task execution statistics. /// @param task the task to update. @@ -49,16 +49,19 @@ static inline task_struct *__scheduler_rr(runqueue_t *runqueue, bool_t skip_peri list_for_each_decl(it, &runqueue->curr->run_list) { // Check if we reached the head of list_head, and skip it. - if (it == &runqueue->queue) + if (it == &runqueue->queue) { continue; + } // Get the current entry. entry = list_entry(it, task_struct, run_list); // We consider only runnable processes - if (entry->state != TASK_RUNNING) + if (entry->state != TASK_RUNNING) { continue; + } // If entry is a periodic task, and we were asked to skip periodic tasks, skip it. - if (__is_periodic_task(entry) && skip_periodic) + if (__is_periodic_task(entry) && skip_periodic) { continue; + } // We have our next entry. return entry; } diff --git a/mentos/src/process/scheduler_feedback.c b/mentos/src/process/scheduler_feedback.c index cfacc97..c58b5ee 100644 --- a/mentos/src/process/scheduler_feedback.c +++ b/mentos/src/process/scheduler_feedback.c @@ -4,13 +4,13 @@ /// See LICENSE.md for details. #include "process/scheduler_feedback.h" -#include "hardware/timer.h" -#include "strerror.h" -#include "fs/vfs.h" #include "assert.h" -#include "string.h" #include "fcntl.h" +#include "fs/vfs.h" +#include "hardware/timer.h" #include "stdio.h" +#include "strerror.h" +#include "string.h" // Include the kernel log levels. #include "sys/kernel_levels.h" @@ -187,8 +187,9 @@ void scheduler_feedback_update() __scheduler_feedback_log(); // Reset the occurences. for (size_t i = 0; i < PID_MAX_LIMIT; ++i) { - if (arr_stats[i].task) + if (arr_stats[i].task) { arr_stats[i].occur = 0; + } } // Update when in the future, the logging should happen. __scheduler_feedback_deadline_advance(); diff --git a/mentos/src/sys/module.c b/mentos/src/sys/module.c index f842a26..e8ac6ef 100644 --- a/mentos/src/sys/module.c +++ b/mentos/src/sys/module.c @@ -10,9 +10,9 @@ #include "io/debug.h" // Include debugging functions. #include "mem/slab.h" -#include "sys/module.h" #include "string.h" #include "sys/bitops.h" +#include "sys/module.h" /// Defined in kernel.ld, points at the end of kernel's data segment. extern void *_kernel_end; @@ -27,8 +27,9 @@ int init_modules(multiboot_info_t *header) modules[i].cmdline = 0; modules[i].pad = 0; } - if (!bitmask_check(header->flags, MULTIBOOT_FLAG_MODS)) + if (!bitmask_check(header->flags, MULTIBOOT_FLAG_MODS)) { return 1; + } multiboot_module_t *mod = first_module(header); for (int i = 0; (mod != 0) && (i < MAX_MODULES); ++i, mod = next_module(header, mod)) { @@ -41,8 +42,9 @@ int relocate_modules() { for (int i = 0; i < MAX_MODULES; ++i) { // Exit if modules are finished - if (!modules[i].mod_start) + if (!modules[i].mod_start) { break; + } // Get module and cmdline sizes uint32_t mod_size = modules[i].mod_end - modules[i].mod_start; @@ -51,8 +53,9 @@ int relocate_modules() // Allocate needed memory, to copy both module and command line uint32_t memory = (uint32_t)kmalloc(mod_size + cmdline_size); - if (!memory) + if (!memory) { return 0; + } // Copy module and its command line memcpy((char *)memory, (char *)modules[i].mod_start, mod_size); @@ -70,8 +73,9 @@ uintptr_t get_address_after_modules() // By default the first valid address is end. uintptr_t address_after_modules = (uintptr_t)&_kernel_end; for (int i = 0; i < MAX_MODULES; ++i) { - if (modules[i].mod_start != 0) + if (modules[i].mod_start != 0) { address_after_modules = modules[i].mod_end; + } } return address_after_modules; } diff --git a/mentos/src/sys/utsname.c b/mentos/src/sys/utsname.c index b7c63ed..5ab5cb2 100644 --- a/mentos/src/sys/utsname.c +++ b/mentos/src/sys/utsname.c @@ -9,21 +9,23 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "string.h" -#include "sys/utsname.h" -#include "version.h" -#include "sys/errno.h" #include "fcntl.h" #include "fs/vfs.h" +#include "string.h" +#include "sys/errno.h" +#include "sys/utsname.h" +#include "version.h" static inline int __gethostname(char *name, size_t len) { // Check if name is an invalid address. - if (!name) + if (!name) { return -EFAULT; + } // Check if len is negative. - if (len < 0) + if (len < 0) { return -EINVAL; + } // Open the file. vfs_file_t *file = vfs_open("/etc/hostname", O_RDONLY, 0); if (file == NULL) { diff --git a/mentos/src/system/printk.c b/mentos/src/system/printk.c index 065bd1b..7b1e5a0 100644 --- a/mentos/src/system/printk.c +++ b/mentos/src/system/printk.c @@ -4,8 +4,8 @@ /// See LICENSE.md for details. #include "system/printk.h" -#include "stdarg.h" #include "io/video.h" +#include "stdarg.h" #include "stdio.h" int sys_syslog(const char *format, ...) diff --git a/mentos/src/system/signal.c b/mentos/src/system/signal.c index 2c62e86..318416f 100644 --- a/mentos/src/system/signal.c +++ b/mentos/src/system/signal.c @@ -112,7 +112,7 @@ static int __sig_is_ignored(struct task_struct *t, int sig) sighandler_t handler = __get_handler(t, sig); // Check the type of the handler. return (handler == SIG_IGN) && (sig != SIGCHLD); - // TODO: do_signal() specifically checks if the handler is IGN and the signal + // TODO(enrico): do_signal() specifically checks if the handler is IGN and the signal // is SIGCHLD, in that case it forces a wait for the parent, that's why // here I'm also accepting as not-ignored a SIG_IGN which is a SIGCHLD. } @@ -563,7 +563,7 @@ void handle_stop_signal(int sig, siginfo_t *info, struct task_struct *p) // pending signal queue p->signal->shared_pending and from the private // queues of all members of the thread group. if (sig == SIGSTOP || sig == SIGTSTP || sig == SIGTTIN || sig == SIGTTOU) { - // TODO: shared and thread group. + // TODO(enrico): shared and thread group. sigset_t mask; sigemptyset(&mask); @@ -622,7 +622,7 @@ int __send_sig_info(int sig, siginfo_t *info, struct task_struct *p) // If the signal is being sent by a User Mode process, // it checks whether the operation is allowed. if (info->si_code == SI_USER) { - // TODO + // TODO(enrico): } // If the sig parameter has the value 0, diff --git a/mentos/src/system/syscall.c b/mentos/src/system/syscall.c index a51dd3f..46fa791 100644 --- a/mentos/src/system/syscall.c +++ b/mentos/src/system/syscall.c @@ -10,22 +10,21 @@ #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. -#include "devices/fpu.h" -#include "mem/kheap.h" -#include "system/syscall.h" #include "descriptor_tables/isr.h" -#include "kernel.h" -#include "process/process.h" -#include "process/scheduler.h" +#include "devices/fpu.h" #include "fs/ioctl.h" #include "hardware/timer.h" - +#include "kernel.h" +#include "mem/kheap.h" +#include "process/process.h" +#include "process/scheduler.h" #include "sys/errno.h" -#include "sys/utsname.h" #include "sys/mman.h" #include "sys/msg.h" #include "sys/sem.h" #include "sys/shm.h" +#include "sys/utsname.h" +#include "system/syscall.h" /// The signature of a function call. typedef int (*SystemCall)();