diff --git a/0001-hdparm-fallocate-close-fd.patch b/0001-hdparm-fallocate-close-fd.patch deleted file mode 100644 index c8d999c7ee193f67bca3198fb9cd3b0ea755e3f6..0000000000000000000000000000000000000000 --- a/0001-hdparm-fallocate-close-fd.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/fallocate.c b/fallocate.c -index 4e60459..d73c0f9 100644 ---- a/fallocate.c -+++ b/fallocate.c -@@ -39,9 +39,11 @@ int do_fallocate_syscall (const char *path, __u64 bytecount) - err = syscall(SYS_fallocate, fd, mode, offset, len); - if (err >= 0) { - fsync(fd); -+ close(fd); - exit(0); - } - err = errno; -+ close(fd); - unlink(path); - } - perror(path); diff --git a/hdparm-9.43-close_fd.patch b/hdparm-9.43-close_fd.patch new file mode 100644 index 0000000000000000000000000000000000000000..533b18e33cecfd69f5e439b33359385934e0898d --- /dev/null +++ b/hdparm-9.43-close_fd.patch @@ -0,0 +1,12 @@ +Index: hdparm-9.43/fallocate.c +=================================================================== +--- hdparm-9.43.orig/fallocate.c ++++ hdparm-9.43/fallocate.c +@@ -41,6 +41,7 @@ int do_fallocate_syscall (const char *pa + exit(0); + } + err = errno; ++ close(fd); + unlink(path); + } + perror(path); diff --git a/hdparm-9.43-get_geom.patch b/hdparm-9.43-get_geom.patch new file mode 100644 index 0000000000000000000000000000000000000000..88414fb86afa6bc3bc6eec1c62d551f6c460157a --- /dev/null +++ b/hdparm-9.43-get_geom.patch @@ -0,0 +1,13 @@ +Index: hdparm-9.43/geom.c +=================================================================== +--- hdparm-9.43.orig/geom.c ++++ hdparm-9.43/geom.c +@@ -201,7 +201,7 @@ int get_dev_geometry (int fd, __u32 *cyl + __u64 hs = (*heads) * (*sects); + __u64 cyl = (*cyls); + __u64 chs = cyl * hs; +- if (chs < (*nsectors)) ++ if (chs < (*nsectors) && hs) + *cyls = (*nsectors) / hs; + } + } diff --git a/hdparm-9.54-resourceleak-fixes-2.patch b/hdparm-9.54-resourceleak-fixes-2.patch new file mode 100644 index 0000000000000000000000000000000000000000..2fac03a597dc5472e664f0650e4119f583d06d56 --- /dev/null +++ b/hdparm-9.54-resourceleak-fixes-2.patch @@ -0,0 +1,23 @@ +diff -up hdparm-9.54/hdparm.c.bak hdparm-9.54/hdparm.c +--- hdparm-9.54/hdparm.c.bak 2020-06-01 17:56:47.257520643 +0200 ++++ hdparm-9.54/hdparm.c 2020-06-01 17:57:29.285084217 +0200 +@@ -461,12 +461,15 @@ static void dump_identity (__u16 *idw) + { + int i; + char pmodes[64] = {0,}, dmodes[128]={0,}, umodes[128]={0,}; +- char *model = strip(strndup((char *)&idw[27], 40)); +- char *fwrev = strip(strndup((char *)&idw[23], 8)); +- char *serno = strip(strndup((char *)&idw[10], 20)); ++ char *model = strndup((char *)&idw[27], 40); ++ char *model_s = strip(model); ++ char *fwrev = strndup((char *)&idw[23], 8); ++ char *fwrev_s = strip(fwrev); ++ char *serno = strndup((char *)&idw[10], 20); ++ char *serno_s = strip(serno); + __u8 tPIO; + +- printf("\n Model=%.40s, FwRev=%.8s, SerialNo=%.20s", model, fwrev, serno); ++ printf("\n Model=%.40s, FwRev=%.8s, SerialNo=%.20s", model_s, fwrev_s, serno_s); + printf("\n Config={"); + for (i = 0; i <= 15; i++) { + if (idw[0] & (1< + ++#ifndef DEMAND_SENSE_DATA ++ #define DEMAND_SENSE_DATA 0 ++#endif ++ + extern int verbose; + extern int prefer_ata12; + +@@ -193,7 +197,7 @@ int sg16 (int fd, int rw, int dma, struc + unsigned char cdb[SG_ATA_16_LEN]; + unsigned char sb[32], *desc; + struct scsi_sg_io_hdr io_hdr; +- int prefer12 = prefer_ata12, demanded_sense = 0; ++ int prefer12 = prefer_ata12; + + if (tf->command == ATA_OP_PIDENTIFY) + prefer12 = 0; +@@ -306,14 +310,16 @@ int sg16 (int fd, int rw, int dma, struc + + desc = sb + 8; + if (io_hdr.driver_status != SG_DRIVER_SENSE) { +- if (sb[0] | sb[1] | sb[2] | sb[3] | sb[4] | sb[5] | sb[6] | sb[7] | sb[8] | sb[9]) { +- static int second_try = 0; +- if (!second_try++) ++ static int second_try = 0; ++ if (!second_try++) { ++ if (sb[0] | sb[1] | sb[2] | sb[3] | sb[4] | sb[5] | sb[6] | sb[7] | sb[8] | sb[9]) { + fprintf(stderr, "SG_IO: questionable sense data, results may be incorrect\n"); +- } else if (demanded_sense) { +- static int second_try = 0; +- if (!second_try++) ++ } ++#if DEMAND_SENSE_DATA ++ else { + fprintf(stderr, "SG_IO: missing sense data, results may be incorrect\n"); ++ } ++#endif + } + } else if (sb[0] != 0x72 || sb[7] < 14 || desc[0] != 0x09 || desc[1] < 0x0c) { + if (verbose || tf->command != ATA_OP_IDENTIFY) diff --git a/hdparm-9.60-sysfs-fclose.patch b/hdparm-9.60-sysfs-fclose.patch new file mode 100644 index 0000000000000000000000000000000000000000..0828da8bbb1c608bb66aecce1e41107498ee3dd5 --- /dev/null +++ b/hdparm-9.60-sysfs-fclose.patch @@ -0,0 +1,13 @@ +diff -up hdparm-9.60/sysfs.c.bak hdparm-9.60/sysfs.c +--- hdparm-9.60/sysfs.c.bak 2021-04-15 15:48:56.806354847 +0200 ++++ hdparm-9.60/sysfs.c 2021-04-16 14:44:42.520395436 +0200 +@@ -61,7 +61,8 @@ static int sysfs_write_attr (char *path, + if (count < 0) + err = errno; + } +- fclose(fp); ++ if (fp) ++ fclose(fp); + if (err && verbose) perror(path); + *pathtail = '\0'; + return err; diff --git a/hdparm-9.62.tar.gz b/hdparm-9.62.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7dfb3fc196524faf208b36b77d526787e4a2fa06 Binary files /dev/null and b/hdparm-9.62.tar.gz differ diff --git a/hdparm.spec b/hdparm.spec index 7a4d8c53f42e274d7b3799ea5776870dc8220a7a..1429a64e5c00b0f4c35fe1ffd35417fdf5e5e19f 100644 --- a/hdparm.spec +++ b/hdparm.spec @@ -1,47 +1,50 @@ -Name: hdparm -Version: 9.58 -Release: 1 -Summary: A system utility for setting or showing hard drive parameters -License: BSD -URL: https://sourceforge.net/projects/%{name}/ -Source0: https://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz -Patch1: 0001-hdparm-fallocate-close-fd.patch - -BuildRequires: gcc git +Name: hdparm +Version: 9.62 +Release: 1 +Summary: A utility for displaying and/or setting hard disk parameters +License: BSD +URL: https://sourceforge.net/projects/%{name}/ +Source: https://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz +Patch0: %{name}-9.60-ditch_dead_code.patch +Patch1: %{name}-9.43-close_fd.patch +Patch2: %{name}-9.43-get_geom.patch +Patch3: %{name}-9.54-resourceleak-fixes.patch +Patch4: %{name}-9.54-resourceleak-fixes-2.patch +Patch5: %{name}-9.60-sysfs-fclose.patch + +BuildRequires: gcc +BuildRequires: make + +Provides: /sbin/hdparm %description -hdparm - get/set ATA/SATA drive parameters under Linux. - -%package help -Summary: Include man page for hdparm utility -Requires: man -BuildArch: noarch - -%description help -This package contains the man page for hdparm. +Hdparm is a useful system utility for setting (E)IDE hard drive +parameters. For example, hdparm can be used to tweak hard drive +performance and to spin down hard drives for power conservation. %prep -%autosetup -n %{name}-%{version} -S git -p1 +%autosetup -p1 %build CFLAGS="$RPM_OPT_FLAGS" %make_build STRIP=/bin/true LDFLAGS="$RPM_LD_FLAGS" %install -mkdir -p $RPM_BUILD_ROOT/sbin -install -c -m 755 hdparm $RPM_BUILD_ROOT/sbin/hdparm +mkdir -p $RPM_BUILD_ROOT%{_sbindir} +mkdir -p $RPM_BUILD_ROOT%{_mandir}/man8 +install -c -m 755 hdparm $RPM_BUILD_ROOT%{_sbindir}/hdparm +install -c -m 644 hdparm.8 $RPM_BUILD_ROOT%{_mandir}/man8 -mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man8 -install -c -m 644 hdparm.8 $RPM_BUILD_ROOT/%{_mandir}/man8 %files -%doc README.acoustic +%doc hdparm.lsm Changelog README.acoustic TODO %license LICENSE.TXT -/sbin/hdparm - -%files help +%{_sbindir}/hdparm %{_mandir}/man8/hdparm.8* %changelog +* Fri Jun 23 2021 sunligang - 9.62-1 +- upgrade package to 9.62 + * Fri Jul 17 2020 wangjun - 9.58-1 - upgrade package to 9.58