~jan0sch/rig

Showing details for patch 71aa7ae278de7659e7a320332fd1430e1aba7cd8.
2025-04-12 (Sat), 9:11 AM - Jens Grassel - 71aa7ae278de7659e7a320332fd1430e1aba7cd8

Load file from local or global path depending which works.

Summary of changes
1 files modified with 22 lines added and 18 lines removed
  • src/main.zig with 22 added and 18 removed lines
diff -rN -u old-rig/src/main.zig new-rig/src/main.zig
--- old-rig/src/main.zig	2025-04-19 15:57:27.050918422 +0000
+++ new-rig/src/main.zig	2025-04-19 15:57:27.050918422 +0000
@@ -1,11 +1,8 @@
 /// Copyright (c) 2025 Contributors as noted in the AUTHORS.md file
 /// Licensed under the EUPL
-
 const std = @import("std");
 const fs = std.fs;
 
-const base_path = "share/rig";
-
 pub fn main() !void {
     var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
     defer arena.deinit();
@@ -29,36 +26,43 @@
         country = std.mem.span(country_arg);
     }
 
+    const global_path = "/usr/local/share/rig";
     const home = std.posix.getenv("HOME");
-    const root_path = if (home != null) home.? else "/usr";
-    const local_path = if (home != null) ".local" else "local";
+    const local_path = try std.fmt.allocPrint(allocator, "{s}/.local/share/rig", .{home.?});
+    defer allocator.free(local_path);
 
-    const forenames_path = try std.fmt.allocPrint(allocator, "{s}/{s}/{s}/forenames/{s}.tsv", .{ root_path, local_path, base_path, country });
-    defer allocator.free(forenames_path);
-    const surnames_path = try std.fmt.allocPrint(allocator, "{s}/{s}/{s}/surnames/{s}.tsv", .{ root_path, local_path, base_path, country });
-    defer allocator.free(surnames_path);
-    const zip_codes_path = try std.fmt.allocPrint(allocator, "{s}/{s}/{s}/zips/{s}.tsv", .{ root_path, local_path, base_path, country });
-    defer allocator.free(zip_codes_path);
+    const forenames_local_path = try std.fmt.allocPrint(allocator, "{s}/forenames/{s}.tsv", .{ local_path, country });
+    defer allocator.free(forenames_local_path);
+    const forenames_global_path = try std.fmt.allocPrint(allocator, "{s}/forenames/{s}.tsv", .{ global_path, country });
+    defer allocator.free(forenames_global_path);
+    const surnames_local_path = try std.fmt.allocPrint(allocator, "{s}/surnames/{s}.tsv", .{ local_path, country });
+    defer allocator.free(surnames_local_path);
+    const surnames_global_path = try std.fmt.allocPrint(allocator, "{s}/surnames/{s}.tsv", .{ global_path, country });
+    defer allocator.free(surnames_global_path);
+    const zip_codes_local_path = try std.fmt.allocPrint(allocator, "{s}/zips/{s}.tsv", .{ local_path, country });
+    defer allocator.free(zip_codes_local_path);
+    const zip_codes_global_path = try std.fmt.allocPrint(allocator, "{s}/zips/{s}.tsv", .{ global_path, country });
+    defer allocator.free(zip_codes_global_path);
 
     const stdout_file = std.io.getStdOut().writer();
     var bw = std.io.bufferedWriter(stdout_file);
     const stdout = bw.writer();
 
-    const forenames = try readData(allocator, forenames_path);
+    const forenames = try readData(allocator, forenames_local_path, forenames_global_path);
     defer forenames.deinit();
     const forenames_count: u32 = @intCast(forenames.items.len - 1);
     const forename_index = calculateRandomEntry(random, forenames_count);
     const random_forename = forenames.items[forename_index];
     defer allocator.free(random_forename);
 
-    const surnames = try readData(allocator, surnames_path);
+    const surnames = try readData(allocator, surnames_local_path, surnames_global_path);
     defer surnames.deinit();
     const surnames_count: u32 = @intCast(surnames.items.len - 1);
     const surname_index = calculateRandomEntry(random, surnames_count);
     const random_surname = surnames.items[surname_index];
     defer allocator.free(random_surname);
 
-    const zip_codes = try readData(allocator, zip_codes_path);
+    const zip_codes = try readData(allocator, zip_codes_local_path, zip_codes_global_path);
     defer zip_codes.deinit();
     const zip_codes_count: u32 = @intCast(zip_codes.items.len - 1);
     const zip_code_index = calculateRandomEntry(random, zip_codes_count);
@@ -67,7 +71,7 @@
 
     const random_address = try allocator.dupe(u8, random_zip_code);
 
-    try stdout.print("{s} {s}, {s}\n", .{random_forename, random_surname, random_address});
+    try stdout.print("{s} {s}, {s}\n", .{ random_forename, random_surname, random_address });
 
     try bw.flush(); // don't forget to flush!
 }
@@ -77,8 +81,8 @@
     return result;
 }
 
-fn readData(allocator: std.mem.Allocator, path: []const u8) !std.ArrayList([]const u8) {
-    const file = try fs.openFileAbsolute(path, .{});
+fn readData(allocator: std.mem.Allocator, path: []const u8, alternate_path: []const u8) !std.ArrayList([]const u8) {
+    const file = fs.openFileAbsolute(path, .{}) catch try fs.openFileAbsolute(alternate_path, .{});
     defer file.close();
 
     var buf_reader = std.io.bufferedReader(file.reader());