summary refs log tree commit diff
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2013-02-28 16:00:49 +0100
committerVladimír Čunát <vcunat@gmail.com>2013-02-28 16:00:49 +0100
commitfc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604 (patch)
tree63111f3b7293c913787c9e0cf02c7b9e3aad0381
parentbd4c0e7cd193ce99eaf9556a709026ac1f8cfc71 (diff)
downloadnixpkgs-fc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604.tar
nixpkgs-fc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604.tar.gz
nixpkgs-fc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604.tar.bz2
nixpkgs-fc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604.tar.lz
nixpkgs-fc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604.tar.xz
nixpkgs-fc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604.tar.zst
nixpkgs-fc82aa049ba4d1af7e9c8bbfd7e3baa8c0631604.zip
hddtemp: try to fix by Gentoo patches
-rw-r--r--pkgs/tools/misc/hddtemp/byteswap.patch28
-rw-r--r--pkgs/tools/misc/hddtemp/default.nix9
-rw-r--r--pkgs/tools/misc/hddtemp/dontwake.patch20
-rw-r--r--pkgs/tools/misc/hddtemp/execinfo.patch21
-rw-r--r--pkgs/tools/misc/hddtemp/satacmds.patch26
5 files changed, 101 insertions, 3 deletions
diff --git a/pkgs/tools/misc/hddtemp/byteswap.patch b/pkgs/tools/misc/hddtemp/byteswap.patch
new file mode 100644
index 00000000000..7b0dddc2ae4
--- /dev/null
+++ b/pkgs/tools/misc/hddtemp/byteswap.patch
@@ -0,0 +1,28 @@
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/sata.c hddtemp-0.3-beta15/src/sata.c
+--- hddtemp-0.3-beta15.orig/src/sata.c	2006-05-14 02:09:55.579437498 -0700
++++ hddtemp-0.3-beta15/src/sata.c	2006-05-14 02:06:08.495948437 -0700
+@@ -88,7 +88,9 @@
+     return strdup(_("unknown"));
+   else
+   {
++		//fprintf(stderr,"sata_model1=%s\n",identify + 54);
+     sata_fixstring(identify + 54, 24);
++		//fprintf(stderr,"sata_model2=%s\n",identify + 54);
+     return strdup(identify + 54);
+   }
+ }
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15.orig/src/satacmds.c	2006-05-14 02:09:40.983470339 -0700
++++ hddtemp-0.3-beta15/src/satacmds.c	2006-05-14 02:09:02.319557333 -0700
+@@ -98,7 +98,10 @@
+   /* convert from big-endian to host byte order */
+   for (p = end ; p != s;) {
+     unsigned short *pp = (unsigned short *) (p -= 2);
+-    *pp = ntohs(*pp);
++		char tmp = p[0];
++		p[0] = p[1];
++		p[1] = tmp;
++    //*pp = ntohs(*pp);
+   }
+ 
+   /* strip leading blanks */
diff --git a/pkgs/tools/misc/hddtemp/default.nix b/pkgs/tools/misc/hddtemp/default.nix
index 7db9324c281..df75e7b3389 100644
--- a/pkgs/tools/misc/hddtemp/default.nix
+++ b/pkgs/tools/misc/hddtemp/default.nix
@@ -7,20 +7,23 @@ stdenv.mkDerivation {
     url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp.db;
     sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya";
   };
-  
+
   src = fetchurl {
     url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp-0.3-beta15.tar.bz2;
     sha256 = "0nzgg4nl8zm9023wp4dg007z6x3ir60rwbcapr9ks2al81c431b1";
   };
 
+  # from Gentoo
+  patches = [ ./byteswap.patch ./dontwake.patch ./execinfo.patch ./satacmds.patch ];
+
   configurePhase =
     ''
       mkdir -p $out/nix-support
       cp $db $out/nix-support/hddtemp.db
       ./configure --prefix=$out --with-db-path=$out/nix-support/hddtemp.db
-    ''; 
+    '';
 
-  meta = { 
+  meta = {
     description = "Tool for displaying hard disk temperature";
     homepage = https://savannah.nongnu.org/projects/hddtemp/;
     license = "GPL2";
diff --git a/pkgs/tools/misc/hddtemp/dontwake.patch b/pkgs/tools/misc/hddtemp/dontwake.patch
new file mode 100644
index 00000000000..969da7a70e4
--- /dev/null
+++ b/pkgs/tools/misc/hddtemp/dontwake.patch
@@ -0,0 +1,20 @@
+--- hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:35:01.681708074 +0200
++++ hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:33:58.172109699 +0200
+@@ -125,6 +125,17 @@
+     dsk->fd = -1;
+     return GETTEMP_NOSENSOR;
+   }
++
++  switch(ata_get_powermode(dsk->fd)) {
++  case PWM_STANDBY:
++  case PWM_SLEEPING:
++    if (!wakeup)
++      return GETTEMP_DRIVE_SLEEP;
++  case PWM_UNKNOWN:
++  case PWM_ACTIVE: /* active or idle */
++  default:
++    break;
++  }
+   
+   /* get SMART values */
+   if(sata_enable_smart(dsk->fd) != 0) {
diff --git a/pkgs/tools/misc/hddtemp/execinfo.patch b/pkgs/tools/misc/hddtemp/execinfo.patch
new file mode 100644
index 00000000000..1e7239535d4
--- /dev/null
+++ b/pkgs/tools/misc/hddtemp/execinfo.patch
@@ -0,0 +1,21 @@
+--- hddtemp-0.3-beta15/configure.in~	2005-10-17 19:14:19 +0000
++++ hddtemp-0.3-beta15/configure.in	2006-12-11 18:23:22 +0000
+@@ -18,6 +18,7 @@
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS(fcntl.h)
+ AC_CHECK_HEADERS(netinet/in.h)
++AC_CHECK_HEADERS(execinfo.h)
+ AC_CHECK_TYPE(in_addr_t, ,[AC_DEFINE_UNQUOTED([in_addr_t], [uint32_t], [Define to 'uint32_t' if <netinet/in.h> does not define.])], [#include <netinet/in.h>])
+ 
+ # Checks for typedefs, structures, and compiler characteristics.
+--- hddtemp-0.3-beta15/src/backtrace.c-orig	2006-12-11 18:20:41 +0000
++++ hddtemp-0.3-beta15/src/backtrace.c	2006-12-11 18:23:28 +0000
+@@ -18,7 +18,7 @@
+ 
+ #include <features.h>
+ 
+-#if defined(__i386__) && defined(__GLIBC__)
++#ifdef HAS_EXECINFO_H
+ 
+ #include <execinfo.h>
+ 
diff --git a/pkgs/tools/misc/hddtemp/satacmds.patch b/pkgs/tools/misc/hddtemp/satacmds.patch
new file mode 100644
index 00000000000..d67e0681f33
--- /dev/null
+++ b/pkgs/tools/misc/hddtemp/satacmds.patch
@@ -0,0 +1,26 @@
+diff -Naurp hddtemp-0.3-beta15-orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15-orig/src/satacmds.c	2007-02-10 14:25:15.000000000 +0100
++++ hddtemp-0.3-beta15/src/satacmds.c	2007-02-10 14:26:53.000000000 +0100
+@@ -54,7 +54,6 @@ int sata_pass_thru(int device, unsigned 
+   unsigned char cdb[16];
+   unsigned char sense[32];
+   int dxfer_direction;
+-  int ret;
+   
+   memset(cdb, 0, sizeof(cdb));
+   cdb[0] = ATA_16;
+@@ -78,13 +77,7 @@ int sata_pass_thru(int device, unsigned 
+     cdb[6] = cmd[1];
+   cdb[14] = cmd[0];
+ 
+-  ret = scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+- 
+-  /* Verify SATA magics */
+-  if (sense[0] != 0x72 || sense[7] != 0x0e || sense[9] != 0x0e || sense[10] != 0x00)
+-    return 1;		  
+-  else 
+-    return ret;
++  return scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+ }
+ 
+ void sata_fixstring(unsigned char *s, int bytecount)