input domain parsing
This commit is contained in:
parent
54560fc91a
commit
b9f42d2ed2
2 changed files with 34 additions and 4 deletions
|
@ -1,8 +1,8 @@
|
|||
const std = @import("std");
|
||||
const util = @import("util.zig");
|
||||
|
||||
pub fn get_mdns(domain: [:0]const u8) !util.IPs {
|
||||
std.debug.print("{s}\n", .{domain});
|
||||
pub fn get_mdns(domain: util.Domain) !util.IPs {
|
||||
std.debug.print("{}\n", .{domain});
|
||||
return util.IPs{
|
||||
.v4 = "stub v4",
|
||||
.v6 = "stub v6",
|
||||
|
|
34
src/util.zig
34
src/util.zig
|
@ -1,15 +1,45 @@
|
|||
const std = @import("std");
|
||||
|
||||
const ArgError = error{
|
||||
NotEnoughArgs,
|
||||
BadDomain,
|
||||
};
|
||||
|
||||
pub const IPs = struct {
|
||||
v4: [:0]const u8,
|
||||
v6: [:0]const u8,
|
||||
};
|
||||
|
||||
pub const Domain = struct {
|
||||
name: [:0]const u8,
|
||||
labels: u8,
|
||||
};
|
||||
|
||||
pub fn check_perms() !void {
|
||||
var f = try std.fs.openFileAbsolute("/etc/hosts", .{ .mode = .write_only });
|
||||
f.close();
|
||||
}
|
||||
|
||||
pub fn get_input() ![:0]const u8 {
|
||||
return "stub";
|
||||
pub fn get_input() !Domain {
|
||||
var args = std.process.args();
|
||||
_ = args.next();
|
||||
const domain = args.next() orelse return ArgError.NotEnoughArgs;
|
||||
return check_domain(domain);
|
||||
}
|
||||
|
||||
fn check_domain(domain_str: [:0]const u8) !Domain {
|
||||
var domain = Domain{
|
||||
.name = domain_str,
|
||||
.labels = 0,
|
||||
};
|
||||
var labels = std.mem.split(u8, domain_str, ".");
|
||||
var last: []const u8 = "";
|
||||
while (labels.next()) |segment| {
|
||||
last = segment;
|
||||
domain.labels += 1;
|
||||
}
|
||||
if (domain.labels <= 1 or !std.mem.eql(u8, last, "local")) {
|
||||
return ArgError.BadDomain;
|
||||
}
|
||||
return domain;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue