Auto-detect disks if none specified Refer to: https://bugzilla.redhat.com/show_bug.cgi?id=717479 Index: hddtemp-0.3-beta15/doc/hddtemp.8 =================================================================== --- hddtemp-0.3-beta15.orig/doc/hddtemp.8 +++ hddtemp-0.3-beta15/doc/hddtemp.8 @@ -19,7 +19,7 @@ hddtemp \- Utility to monitor hard drive temperature .SH SYNOPSIS .B hddtemp -.RI [ options ] " [type:]disk" ... +.RI [ options ] " [[type:]disk]" ... .SH "DESCRIPTION" .PP .B hddtemp @@ -35,7 +35,8 @@ You can specify one or more device drive with a .B type like PATA, SATA or SCSI to force hddtemp too use one of these type -(because detection can fail). +(because detection can fail). If no paths are specified, autodetection of +installed drives is attempted. .SH "OPTIONS" Index: hddtemp-0.3-beta15/src/hddtemp.c =================================================================== --- hddtemp-0.3-beta15.orig/src/hddtemp.c +++ hddtemp-0.3-beta15/src/hddtemp.c @@ -54,6 +54,7 @@ #include #include #include +#include // Application specific includes #include "ata.h" @@ -255,6 +256,7 @@ int main(int argc, char* argv[]) { int ret = 0; int show_db; struct disk * ldisks; + glob_t diskglob; backtrace_sigsegv(); backtrace_sigill(); @@ -423,11 +425,6 @@ int main(int argc, char* argv[]) { exit(0); } - if(argc - optind <= 0) { - fprintf(stderr, _("Too few arguments: you must specify one drive, at least.\n")); - exit(1); - } - if(debug) { /* argc = optind + 1;*/ quiet = 1; @@ -438,6 +435,23 @@ int main(int argc, char* argv[]) { exit(1); } + memset(&diskglob, 0, sizeof(glob_t)); + if(argc - optind <= 0) { + if(glob("/dev/[hs]d[a-z]", 0, NULL, &diskglob) == 0) { + argc = diskglob.gl_pathc; + argv = diskglob.gl_pathv; + optind = 0; + } else { + argc = 0; + } + } + + if(argc - optind <= 0) { + globfree(&diskglob); + fprintf(stderr, _("Too few arguments: you must specify one drive, at least.\n")); + exit(1); + } + init_bus_types(); /* collect disks informations */ @@ -531,6 +545,7 @@ int main(int argc, char* argv[]) { else { do_direct_mode(ldisks); } + globfree(&diskglob); return ret; }