~jan0sch/rig
Showing details for patch 71aa7ae278de7659e7a320332fd1430e1aba7cd8.
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());