[syslinux] [PATCH] extlinux: code cleanup and simplification
Celelibi
celelibi at gmail.com
Tue Nov 17 22:31:42 PST 2015
2015-11-13 20:35 UTC+01:00, Nicolas Cornu via Syslinux <syslinux at zytor.com>:
> Merge btrfs_read_adv and xfs_read_adv into a single generic function
> ext_read_adv and split ext_write_adv_offset out of ext_write_adv.
>
> Use those new functions in rewrite_boot_image and btrfs_install_file
> where it is actually hardcoded.
>
> Signed-off-by: Nicolas Cornu <nicolac76 at yahoo.fr>
> ---
> extlinux/main.c | 113
> +++++++++++++++++++++++++++-----------------------------
> 1 file changed, 55 insertions(+), 58 deletions(-)
>
> diff --git a/extlinux/main.c b/extlinux/main.c
> index 6871fb1..a2a396a 100644
> --- a/extlinux/main.c
> +++ b/extlinux/main.c
> @@ -338,6 +338,59 @@ static int patch_file_and_bootblock(int fd, const char
> *dir, int devfd)
> return rv;
> }
>
> +static int ext_read_adv_offset(int devfd, off_t offset)
> +{
> + const size_t adv_size = 2 * ADV_SIZE;
> +
> + if (xpread(devfd, syslinux_adv, adv_size, offset) != adv_size)
> + return -1;
> +
> + return syslinux_validate_adv(syslinux_adv) ? 1 : 0;
> +}
> +
> +static int ext_read_adv(const char *path, int devfd, const char **namep)
> +{
> + int err;
> + const char *name;
> +
> + if (fs_type == BTRFS) {
> + /* btrfs "ldlinux.sys" is in 64k blank area */
> + return ext_read_adv_offset(devfd, BTRFS_ADV_OFFSET);
> + } else if (fs_type == XFS) {
> + /* XFS "ldlinux.sys" is in the first 2048 bytes of the primary AG */
> + return ext_read_adv_offset(devfd, boot_image_len);
> + } else {
> + err = read_adv(path, name = "ldlinux.sys");
> + if (err == 2) /* ldlinux.sys does not exist */
> + err = read_adv(path, name = "extlinux.sys");
> + if (namep)
> + *namep = name;
> + return err;
> + }
> +}
> +
> +static int ext_write_adv_offset(int devfd, off_t offset)
> +{
> + const size_t adv_size = 2 * ADV_SIZE;
> +
> + if (xpwrite(devfd, syslinux_adv, adv_size, offset) != adv_size) {
> + perror("writing adv");
> + return 1;
> + }
> +
> + return 0;
> +}
> +
> +static int ext_write_adv(const char *path, const char *cfg, int devfd)
> +{
> + if (fs_type == BTRFS) {
> + /* btrfs "ldlinux.sys" is in 64k blank area */
> + return ext_write_adv_offset(devfd, BTRFS_ADV_OFFSET);
> + } else {
> + return write_adv(path, cfg);
> + }
> +}
> +
> /*
> * Install the boot block on the specified device.
> * Must be run AFTER install_file()!
> @@ -484,8 +537,7 @@ static int rewrite_boot_image(int devfd, const char
> *path, const char *filename)
> }
>
> /* Write ADV */
> - ret = xpwrite(fd, syslinux_adv, 2 * ADV_SIZE, boot_image_len);
> - if (ret != 2 * ADV_SIZE) {
> + if (ext_write_adv_offset(fd, boot_image_len)) {
> fprintf(stderr, "%s: write failure on %s\n", program, filename);
> goto error;
> }
> @@ -614,9 +666,7 @@ int btrfs_install_file(const char *path, int devfd,
> struct stat *rst)
> return 1;
> }
> dprintf("write boot_image to 0x%x\n", BTRFS_EXTLINUX_OFFSET);
> - if (xpwrite(devfd, syslinux_adv, 2 * ADV_SIZE, BTRFS_ADV_OFFSET)
> - != 2 * ADV_SIZE) {
> - perror("writing adv");
> + if (ext_write_adv_offset(devfd, BTRFS_ADV_OFFSET)) {
> return 1;
> }
> dprintf("write adv to 0x%x\n", BTRFS_ADV_OFFSET);
> @@ -1415,59 +1465,6 @@ static int open_device(const char *path, struct stat
> *st, char **_devname)
> return devfd;
> }
>
> -static int btrfs_read_adv(int devfd)
> -{
> - if (xpread(devfd, syslinux_adv, 2 * ADV_SIZE, BTRFS_ADV_OFFSET)
> - != 2 * ADV_SIZE)
> - return -1;
> -
> - return syslinux_validate_adv(syslinux_adv) ? 1 : 0;
> -}
> -
> -static inline int xfs_read_adv(int devfd)
> -{
> - const size_t adv_size = 2 * ADV_SIZE;
> -
> - if (xpread(devfd, syslinux_adv, adv_size, boot_image_len) != adv_size)
> - return -1;
> -
> - return syslinux_validate_adv(syslinux_adv) ? 1 : 0;
> -}
> -
> -static int ext_read_adv(const char *path, int devfd, const char **namep)
> -{
> - int err;
> - const char *name;
> -
> - if (fs_type == BTRFS) {
> - /* btrfs "ldlinux.sys" is in 64k blank area */
> - return btrfs_read_adv(devfd);
> - } else if (fs_type == XFS) {
> - /* XFS "ldlinux.sys" is in the first 2048 bytes of the primary AG */
> - return xfs_read_adv(devfd);
> - } else {
> - err = read_adv(path, name = "ldlinux.sys");
> - if (err == 2) /* ldlinux.sys does not exist */
> - err = read_adv(path, name = "extlinux.sys");
> - if (namep)
> - *namep = name;
> - return err;
> - }
> -}
> -
> -static int ext_write_adv(const char *path, const char *cfg, int devfd)
> -{
> - if (fs_type == BTRFS) { /* btrfs "ldlinux.sys" is in 64k blank area */
> - if (xpwrite(devfd, syslinux_adv, 2 * ADV_SIZE,
> - BTRFS_ADV_OFFSET) != 2 * ADV_SIZE) {
> - perror("writing adv");
> - return 1;
> - }
> - return 0;
> - }
> - return write_adv(path, cfg);
> -}
> -
> static int install_loader(const char *path, int update_only)
> {
> struct stat st, fst;
> --
> 2.6.2
>
I guess this patch is a replacement of your former submission:
http://www.syslinux.org/archives/2015-November/024554.html
Right?
When this happen, please state so to ease the reviewing process.
Celelibi
More information about the Syslinux
mailing list