}
int __pakfire_arch_machine(char* buffer, size_t length, const char* arch, const char* vendor) {
- int r = __pakfire_arch_buildtarget(buffer, length, arch, vendor);
- if (r < 0)
- return r;
-
- size_t bytes_written = strlen(buffer);
+ char buildtarget[1024];
- // Fail if there is no space left
- if (bytes_written >= length)
- return -1;
-
- // Append -gnu
- r = snprintf(buffer + bytes_written, length - bytes_written, "-gnu");
- if (r < 0)
+ // Fetch buildtarget
+ int r = __pakfire_arch_buildtarget(buildtarget, sizeof(buildtarget), arch, vendor);
+ if (r)
return r;
- return 0;
+ // Append -gnu
+ return __pakfire_string_format(buffer, length, "%s-gnu", buildtarget);
}
int __pakfire_arch_buildtarget(char* buffer, size_t length, const char* arch, const char* vendor) {
if (!vendor)
vendor = "unknown";
- // Create a working copy on the stack and sanitize it
- char* suffix = strdupa(vendor);
- if (!suffix) {
- errno = ENOMEM;
- return 1;
- }
+ // Determine the length of the vendor string
+ int vendor_length = strlen(vendor);
// Cut off suffix if it contains spaces
- char* space = strchr(suffix, ' ');
+ char* space = strchr(vendor, ' ');
if (space)
- *space = '\0';
+ vendor_length = space - vendor;
// Format string
- int r = snprintf(buffer, length, "%s-%s-linux", arch, suffix);
- if (r < 0)
+ int r = __pakfire_string_format(buffer, length, "%s-%.*s-linux",
+ arch, vendor_length, vendor);
+ if (r)
return r;
// Make everything lowercase
unsigned long pakfire_arch_personality(const char* name);
#define pakfire_arch_machine(buffer, arch, vendor) \
- __pakfire_arch_machine(buffer, sizeof(buffer) - 1, arch, vendor)
+ __pakfire_arch_machine(buffer, sizeof(buffer), arch, vendor)
int __pakfire_arch_machine(char* buffer, size_t length, const char* arch, const char* vendor);
#define pakfire_arch_buildtarget(buffer, arch, vendor) \
- __pakfire_arch_buildtarget(buffer, sizeof(buffer) - 1, arch, vendor)
+ __pakfire_arch_buildtarget(buffer, sizeof(buffer), arch, vendor)
int __pakfire_arch_buildtarget(char* buffer, size_t length, const char* arch, const char* vendor);
const char* pakfire_arch_platform(const char* name);