aboutsummaryrefslogtreecommitdiffstats
path: root/libinstaller
diff options
context:
space:
mode:
authorPaulo Alcantara <pcacjr@gmail.com>2011-04-15 14:55:29 -0300
committerPaulo Alcantara <pcacjr@gmail.com>2011-04-15 15:08:56 -0300
commit0ac822d2744359de5e3bd6f19d9e33fb523a01ec (patch)
tree0808565ad7df843c3df391b435b1cf6c463f6585 /libinstaller
parent868c474546ba68e9e448734e1833f873fd50ec0a (diff)
downloadsyslinux-0ac822d2744359de5e3bd6f19d9e33fb523a01ec.tar.gz
syslinux-0ac822d2744359de5e3bd6f19d9e33fb523a01ec.tar.xz
syslinux-0ac822d2744359de5e3bd6f19d9e33fb523a01ec.zip
libinstaller: implement syslinux_already_installed
syslinux_already_installed function will be used in both extlinux and syslinux for checking if the boot sector has either the string "SYSLINUX" or "EXTLINUX" in the OEMID field. Signed-off-by: Paulo Alcantara <pcacjr@gmail.com>
Diffstat (limited to 'libinstaller')
-rw-r--r--libinstaller/syslxcom.c13
-rw-r--r--libinstaller/syslxcom.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/libinstaller/syslxcom.c b/libinstaller/syslxcom.c
index b176f6d7..1de85aa5 100644
--- a/libinstaller/syslxcom.c
+++ b/libinstaller/syslxcom.c
@@ -284,3 +284,16 @@ int sectmap(int fd, sector_t *sectors, int nsectors)
return sectmap_fib(fd, sectors, nsectors);
}
+
+/*
+ * SYSLINUX installs the string 'SYSLINUX' at offset 3 in the boot
+ * sector; this is consistent with FAT filesystems. Earlier versions
+ * would install the string "EXTLINUX" instead, handle both.
+ */
+int syslinux_already_installed(int dev_fd)
+{
+ char buffer[8];
+
+ xpread(dev_fd, buffer, 8, 3);
+ return !memcmp(buffer, "SYSLINUX", 8) || !memcmp(buffer, "EXTLINUX", 8);
+}
diff --git a/libinstaller/syslxcom.h b/libinstaller/syslxcom.h
index 39ca09d3..bf186ca6 100644
--- a/libinstaller/syslxcom.h
+++ b/libinstaller/syslxcom.h
@@ -18,5 +18,6 @@ ssize_t xpwrite(int fd, const void *buf, size_t count, off_t offset);
void clear_attributes(int fd);
void set_attributes(int fd);
int sectmap(int fd, sector_t *sectors, int nsectors);
+int syslinux_already_installed(int dev_fd);
#endif