This commit is contained in:
gingerBill
2025-10-27 18:51:57 +00:00
4 changed files with 34 additions and 13 deletions
+4 -4
View File
@@ -198,7 +198,7 @@ _seek :: proc(f: ^File_Impl, offset: i64, whence: io.Seek_From) -> (ret: i64, er
case .NONE: case .NONE:
return n, nil return n, nil
case: case:
return -1, _get_platform_error(errno) return 0, _get_platform_error(errno)
} }
} }
@@ -209,7 +209,7 @@ _read :: proc(f: ^File_Impl, p: []byte) -> (i64, Error) {
n, errno := linux.read(f.fd, p[:min(len(p), MAX_RW)]) n, errno := linux.read(f.fd, p[:min(len(p), MAX_RW)])
if errno != .NONE { if errno != .NONE {
return -1, _get_platform_error(errno) return 0, _get_platform_error(errno)
} }
return i64(n), io.Error.EOF if n == 0 else nil return i64(n), io.Error.EOF if n == 0 else nil
} }
@@ -223,7 +223,7 @@ _read_at :: proc(f: ^File_Impl, p: []byte, offset: i64) -> (i64, Error) {
} }
n, errno := linux.pread(f.fd, p[:min(len(p), MAX_RW)], offset) n, errno := linux.pread(f.fd, p[:min(len(p), MAX_RW)], offset)
if errno != .NONE { if errno != .NONE {
return -1, _get_platform_error(errno) return 0, _get_platform_error(errno)
} }
if n == 0 { if n == 0 {
return 0, .EOF return 0, .EOF
@@ -276,7 +276,7 @@ _file_size :: proc(f: ^File_Impl) -> (n: i64, err: Error) {
s: linux.Stat = --- s: linux.Stat = ---
errno := linux.fstat(f.fd, &s) errno := linux.fstat(f.fd, &s)
if errno != .NONE { if errno != .NONE {
return -1, _get_platform_error(errno) return 0, _get_platform_error(errno)
} }
if s.mode & linux.S_IFMT == linux.S_IFREG { if s.mode & linux.S_IFMT == linux.S_IFREG {
+15 -8
View File
@@ -382,12 +382,14 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
} }
to_read := uint(min(len(p), MAX_RW)) to_read := uint(min(len(p), MAX_RW))
n = i64(posix.read(fd, raw_data(p), to_read)) _n := i64(posix.read(fd, raw_data(p), to_read))
switch { switch {
case n == 0: case _n == 0:
err = .EOF err = .EOF
case n < 0: case _n < 0:
err = .Unknown err = .Unknown
case:
n = _n
} }
return return
@@ -402,12 +404,14 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
} }
to_read := uint(min(len(p), MAX_RW)) to_read := uint(min(len(p), MAX_RW))
n = i64(posix.pread(fd, raw_data(p), to_read, posix.off_t(offset))) _n := i64(posix.pread(fd, raw_data(p), to_read, posix.off_t(offset)))
switch { switch {
case n == 0: case _n == 0:
err = .EOF err = .EOF
case n < 0: case _n < 0:
err = .Unknown err = .Unknown
case:
n = _n
} }
return return
@@ -460,15 +464,18 @@ _file_stream_proc :: proc(stream_data: rawptr, mode: io.Stream_Mode, p: []byte,
return return
} }
n = i64(posix.lseek(fd, posix.off_t(offset), posix.Whence(whence))) _n := i64(posix.lseek(fd, posix.off_t(offset), posix.Whence(whence)))
if n < 0 { if _n < 0 {
#partial switch posix.get_errno() { #partial switch posix.get_errno() {
case .EINVAL: case .EINVAL:
err = .Invalid_Offset err = .Invalid_Offset
case: case:
err = .Unknown err = .Unknown
} }
return
} }
n = _n
return return
case .Size: case .Size:
+1
View File
@@ -509,6 +509,7 @@ struct BuildContext {
bool show_more_timings; bool show_more_timings;
bool show_defineables; bool show_defineables;
String export_defineables_file; String export_defineables_file;
bool ignore_unused_defineables;
bool show_system_calls; bool show_system_calls;
bool keep_temp_files; bool keep_temp_files;
bool ignore_unknown_attributes; bool ignore_unknown_attributes;
+14 -1
View File
@@ -334,6 +334,7 @@ enum BuildFlagKind {
BuildFlag_ShowDefineables, BuildFlag_ShowDefineables,
BuildFlag_ExportDefineables, BuildFlag_ExportDefineables,
BuildFlag_IgnoreUnusedDefineables,
BuildFlag_Vet, BuildFlag_Vet,
BuildFlag_VetShadowing, BuildFlag_VetShadowing,
@@ -563,6 +564,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_ShowDefineables, str_lit("show-defineables"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_ShowDefineables, str_lit("show-defineables"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ExportDefineables, str_lit("export-defineables"), BuildFlagParam_String, Command__does_check); add_flag(&build_flags, BuildFlag_ExportDefineables, str_lit("export-defineables"), BuildFlagParam_String, Command__does_check);
add_flag(&build_flags, BuildFlag_IgnoreUnusedDefineables, str_lit("ignore-unused-defineables"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_Vet, str_lit("vet"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_Vet, str_lit("vet"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_VetUnused, str_lit("vet-unused"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_VetUnused, str_lit("vet-unused"), BuildFlagParam_None, Command__does_check);
@@ -945,6 +947,11 @@ gb_internal bool parse_build_flags(Array<String> args) {
break; break;
} }
case BuildFlag_IgnoreUnusedDefineables: {
GB_ASSERT(value.kind == ExactValue_Invalid);
build_context.ignore_unused_defineables = true;
break;
}
case BuildFlag_ShowSystemCalls: { case BuildFlag_ShowSystemCalls: {
GB_ASSERT(value.kind == ExactValue_Invalid); GB_ASSERT(value.kind == ExactValue_Invalid);
build_context.show_system_calls = true; build_context.show_system_calls = true;
@@ -2882,6 +2889,10 @@ gb_internal int print_show_help(String const arg0, String command, String option
print_usage_line(2, "Shows an overview of all the #config/#defined usages in the project."); print_usage_line(2, "Shows an overview of all the #config/#defined usages in the project.");
} }
if (print_flag("-ignore-unused-defineables")) {
print_usage_line(2, "Silence warning/error if a -define doesn't have at least one #config/#defined usage.");
}
if (print_flag("-show-system-calls")) { if (print_flag("-show-system-calls")) {
print_usage_line(2, "Prints the whole command and arguments for calls to external tools like linker and assembler."); print_usage_line(2, "Prints the whole command and arguments for calls to external tools like linker and assembler.");
} }
@@ -3891,7 +3902,9 @@ int main(int arg_count, char const **arg_ptr) {
MAIN_TIME_SECTION("type check"); MAIN_TIME_SECTION("type check");
check_parsed_files(checker); check_parsed_files(checker);
check_defines(&build_context, checker); if (!build_context.ignore_unused_defineables) {
check_defines(&build_context, checker);
}
if (any_errors()) { if (any_errors()) {
print_all_errors(); print_all_errors();
return 1; return 1;