feature. See also
. The project being documented here (as the example) is the Zig library itself.
objcopy.parseSectionFlags
fn parseSectionFlags(comma_separated_flags: []const u8) SectionFlags
File
Code
fn parseSectionFlags(comma_separated_flags: []const u8) SectionFlags {
const P = struct {
fn parse(flags: *SectionFlags, string: []const u8) void {
if (string.len == 0) return;
if (std.mem.eql(u8, string, "alloc")) {
flags.alloc = true;
} else if (std.mem.eql(u8, string, "contents")) {
flags.contents = true;
} else if (std.mem.eql(u8, string, "load")) {
flags.load = true;
} else if (std.mem.eql(u8, string, "noload")) {
flags.noload = true;
} else if (std.mem.eql(u8, string, "readonly")) {
flags.readonly = true;
} else if (std.mem.eql(u8, string, "code")) {
flags.code = true;
} else if (std.mem.eql(u8, string, "data")) {
flags.data = true;
} else if (std.mem.eql(u8, string, "rom")) {
flags.rom = true;
} else if (std.mem.eql(u8, string, "exclude")) {
flags.exclude = true;
} else if (std.mem.eql(u8, string, "shared")) {
flags.shared = true;
} else if (std.mem.eql(u8, string, "debug")) {
flags.debug = true;
} else if (std.mem.eql(u8, string, "large")) {
flags.large = true;
} else if (std.mem.eql(u8, string, "merge")) {
flags.merge = true;
} else if (std.mem.eql(u8, string, "strings")) {
flags.strings = true;
} else {
std.log.warn("Skipping unrecognized section flag '{s}'", .{string});
}
}
};
var flags = SectionFlags{};
var offset: usize = 0;
for (comma_separated_flags, 0..) |c, i| {
if (c == ',') {
defer offset = i + 1;
const string = comma_separated_flags[offset..i];
P.parse(&flags, string);
}
}
P.parse(&flags, comma_separated_flags[offset..]);
return flags;
}