summaryrefslogtreecommitdiffstats
path: root/loader/loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'loader/loader.c')
-rw-r--r--loader/loader.c82
1 files changed, 45 insertions, 37 deletions
diff --git a/loader/loader.c b/loader/loader.c
index 0ea57cb31..89edee257 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -251,51 +251,59 @@ void stopNewt(void) {
newtRunning = 0;
}
-static char * productName = NULL;
-static char * productPath = NULL;
-static char * productArch = NULL;
-static char * productStamp = NULL;
+static gchar *productName = NULL;
+static gchar *productPath = NULL;
+static gchar *productArch = NULL;
static void initProductInfo(void) {
- FILE *f;
- int i;
+ gchar *contents = NULL;
+ gchar **lines = NULL, **stamp = NULL;
+ GError *fileErr = NULL;
+
+ if (!g_file_get_contents("/.buildstamp", &contents, NULL, &fileErr)) {
+ logMessage(ERROR, "error reading .buildstamp: %s", fileErr->message);
+ g_error_free(fileErr);
+ productName = g_strdup("anaconda");
+ productArch = g_strdup("unknown architecture");
+ productPath = g_strdup("anaconda");
+ return;
+ }
- f = fopen("/.buildstamp", "r");
- if (!f) {
- productName = strdup("anaconda");
- productPath = strdup("anaconda");
- } else {
- productStamp = malloc(256);
- productName = malloc(256);
- productPath = malloc(256);
- productStamp = fgets(productStamp, 256, f); /* stamp time and architecture */
- productArch = strstr(productStamp, "."); /* architecture is separated by dot */
- if(productArch) productArch++;
-
- productName = fgets(productName, 256, f); /* product name */
- productPath = fgets(productPath, 256, f); /* product version */
- productPath = fgets(productPath, 256, f); /* product path */
-
- i = strlen(productName) - 1;
- while (isspace(*(productName + i))) {
- *(productName + i) = '\0';
- i--;
- }
- i = strlen(productPath) - 1;
- while (isspace(*(productPath + i))) {
- *(productPath + i) = '\0';
- i--;
+ /* .buildstamp uses the first 3 lines in this format:
+ * STAMP.productArch
+ * productName
+ * productPath
+ */
+ lines = g_strsplit(contents, "\n", 0);
+ g_free(contents);
+
+ if ((lines != NULL) && (g_strv_length(lines) >= 3)) {
+ /* STAMP.productArch */
+ stamp = g_strsplit(lines[0], ".", 0);
+
+ if ((stamp != NULL) && (g_strv_length(stamp) == 2)) {
+ productArch = g_strdup(stamp[1]);
+ } else {
+ productArch = g_strdup("unknown architecture");
}
- i = strlen(productArch) - 1;
- while (isspace(*(productArch + i))) {
- *(productArch + i) = '\0';
- i--;
+
+ if (stamp) {
+ g_strfreev(stamp);
}
+
+ productName = g_strdup(lines[1]);
+ productPath = g_strdup(lines[2]);
+ } else {
+ productName = g_strdup("anaconda");
+ productArch = g_strdup("unknown architecture");
+ productPath = g_strdup("anaconda");
}
- if(!productArch) productArch = strdup("unknown architecture");
+ if (lines) {
+ g_strfreev(lines);
+ }
- fclose(f);
+ return;
}
char * getProductName(void) {