summaryrefslogtreecommitdiff
path: root/recipes/kexec/files/no-getline-no-fscanf.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/kexec/files/no-getline-no-fscanf.patch')
-rw-r--r--recipes/kexec/files/no-getline-no-fscanf.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/recipes/kexec/files/no-getline-no-fscanf.patch b/recipes/kexec/files/no-getline-no-fscanf.patch
new file mode 100644
index 0000000000..d2b803c214
--- /dev/null
+++ b/recipes/kexec/files/no-getline-no-fscanf.patch
@@ -0,0 +1,58 @@
+Index: kexec-tools-2.0.1/kexec/kexec.c
+===================================================================
+--- kexec-tools-2.0.1.orig/kexec/kexec.c 2008-02-24 14:15:46.950825917 +0100
++++ kexec-tools-2.0.1/kexec/kexec.c 2009-10-06 00:37:01.000000000 +0200
+@@ -932,14 +932,22 @@
+ }
+
+ static int kexec_loaded(void)
+ {
+- int ret;
++ int ret = 0;
+ FILE *fp;
++ char *endptr;
++ char *line[3];
+
+ fp = fopen("/sys/kernel/kexec_loaded", "r");
+ if (fp == NULL)
+ return -1;
+- fscanf(fp, "%d", &ret);
++/* fscanf(fp, "%d", &ret); */
++
++ if ( NULL == fgets(line, sizeof(line), fp) ) {
++ return -1;
++ ret = strtol(line, &endptr, 10);
++ }
++
+ fclose(fp);
+ return ret;
+ }
+@@ -989,17 +997,22 @@
+ char *get_command_line(void)
+ {
+ FILE *fp;
+- size_t len;
+- char *line = NULL;
++ const int sizeof_line = 1024;
++ char *line = malloc(sizeof_line); /* according to strdup() later */
+
+ fp = fopen("/proc/cmdline", "r");
+ if (!fp)
+- die("Could not read /proc/cmdline.");
+- getline(&line, &len, fp);
++ die("Could not open /proc/cmdline.");
++
++ if ( NULL == fgets(line, sizeof(line), fp) ) {
++ die("Can't read /proc/cmdline.");
++
++/* getline(&line, &len, fp); */
+ fclose(fp);
++ }
+
+ if (line) {
+ /* strip newline */
+- *(line + strlen(line) - 1) = 0;
++ line[strlen(line) - 1] = '\0';
+
+ remove_parameter(line, "BOOT_IMAGE");
+ if (kexec_flags & KEXEC_ON_CRASH)