In this version: - Changed the use of strdup to g_strdup and the use of sprintf with a local buffer to use g_strdup_printf instead. - Made the majority of fields in the GuestOSInfo optional to allow 0 values - Used the right target version in the schema (2.10 vs 2.8 before) - Refactored the code for deciding which release/version file to use to use a configuration struct and a while loop to iterate over the options.
I was looking into the usage of uname, as suggested by eric, however after looking into this I realized that there's no additional information to be gained from this. Therefore I decided that this is still a feasible approach. In most cases the code will break out of the loop after accessing the second file. For older systems there are some supported fallbacks available, but /etc/os-release and /usr/lib/os-release are already quite established.