Commit: 550fc79ab344fe3e953d229906a08c148bb2d5f7
Parent: dfc435bc1331b31eb57d7e15d3317c5ec07ff732
Author: Randy Palamar
Date: Mon, 19 May 2025 09:52:02 -0600
pass file name in on command line
Diffstat:
2 files changed, 49 insertions(+), 5 deletions(-)
diff --git a/elfinspect.c b/elfinspect.c
@@ -30,6 +30,16 @@ typedef struct {
b32 errors;
} str8_reader;
+typedef struct {
+ u8 *argv0;
+
+ struct {
+ u8 **data;
+ s16 capacity;
+ s16 count;
+ } file_names;
+} Options;
+
/* NOTE: platform api; defined here so that other platform symbols are not visible to this TU */
function str8 os_map_file(u8 *);
@@ -1000,11 +1010,29 @@ dwarf_lookup_abbreviation(Arena *a, str8 table, u64 key)
return result;
}
+function Options
+parse_command_line(Arena *arena, s32 argc, char *argv[])
+{
+ Options result = {0};
+
+ #define shift(c, v) ((c)--, *(v)++)
+
+ char *c_arg = shift(argc, argv);
+ result.argv0 = (u8 *)c_arg;
+ while (argc) {
+ c_arg = shift(argc, argv);
+ *da_push(arena, &result.file_names) = (u8 *)c_arg;
+ }
+
+ #undef shift
+
+ return result;
+}
+
function b32
-elfinspect(Arena arena, str8 file)
+elf_inspect_file(Arena arena, str8 file)
{
b32 result = is_elf(file);
-
if (result) {
ELFHeader header = {0};
if (!elf_header_from_file(&header, file)) {
@@ -1078,3 +1106,20 @@ elfinspect(Arena arena, str8 file)
return result;
}
+
+
+function b32
+elfinspect(Arena arena, s32 argc, char *argv[])
+{
+ Options options = parse_command_line(&arena, argc, argv);
+
+ b32 result = 1;
+ for (s32 file_index = 0; file_index < options.file_names.count; file_index++) {
+ u8 *file_name = options.file_names.data[file_index];
+ str8 file = os_map_file(file_name);
+ printf("-----<%s>-----\n", file_name);
+ result &= elf_inspect_file(arena, file);
+ }
+
+ return result;
+}
diff --git a/main_posix.c b/main_posix.c
@@ -51,11 +51,10 @@ os_map_file(u8 *name)
return result;
}
-s32
+extern s32
main(s32 argc, char *argv[])
{
Arena arena = os_arena_new(MB(32));
- str8 file = os_map_file((u8 *)argv[0]);
- elfinspect(arena, file);
+ elfinspect(arena, argc, argv);
return 0;
}