aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/usage.h6
-rw-r--r--miscutils/Config.in7
-rw-r--r--miscutils/hdparm.c29
3 files changed, 14 insertions, 28 deletions
diff --git a/include/usage.h b/include/usage.h
index 1d143e61e..239bbb373 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -994,7 +994,8 @@ USE_FEATURE_DATE_ISOFMT( \
#define hdparm_trivial_usage \
"[options] [device] .."
#define hdparm_full_usage \
- "Options:" \
+ USE_FEATURE_HDPARM_GET_IDENTITY("\tIf no device name is specified read from stdin.\n") \
+ "\nOptions:\n" \
"\t-a get/set fs readahead\n" \
"\t-A set drive read-lookahead flag (0/1)\n" \
"\t-b get/set bus state (0 == off, 1 == on, 2 == tristate)\n" \
@@ -1006,9 +1007,8 @@ USE_FEATURE_DATE_ISOFMT( \
"\t-f flush buffer cache for device on exit\n" \
"\t-g display drive geometry\n" \
"\t-h display terse usage information\n" \
- "\t-i display drive identification\n" \
+ USE_FEATURE_HDPARM_GET_IDENTITY("\t-i display drive identification\n") \
USE_FEATURE_HDPARM_GET_IDENTITY("\t-I detailed/current information directly from drive\n") \
- USE_FEATURE_HDPARM_GET_IDENTITY("\t-Istdin similar to -I, but wants /proc/ide/" "*" "/hd?/identify as input\n") \
"\t-k get/set keep_settings_over_reset flag (0/1)\n" \
"\t-K set drive keep_features_over_reset flag (0/1)\n" \
"\t-L set drive doorlock (0/1) (removable harddisks only)\n" \
diff --git a/miscutils/Config.in b/miscutils/Config.in
index eae977fac..fc90b5447 100644
--- a/miscutils/Config.in
+++ b/miscutils/Config.in
@@ -169,11 +169,12 @@ config CONFIG_HDPARM
config CONFIG_FEATURE_HDPARM_GET_IDENTITY
bool "Support obtaining detailed information directly from drives"
default y
- depends on CONFIG_HDPARM && CONFIG_GETOPT_LONG
+ depends on CONFIG_HDPARM
help
- Enables the -I and -Istdin options to obtain detailed information
+ Enables the -I and -i options to obtain detailed information
directly from drives about their capabilities and supported ATA
- feature set. Enabling this option will add about 16k...
+ feature set. If no device name is specified, hdparm will read
+ identify data from stdin. Enabling this option will add about 16k...
config CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
bool "Register an IDE interface (DANGEROUS)"
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c
index 55ed2f6ff..37b87ea9f 100644
--- a/miscutils/hdparm.c
+++ b/miscutils/hdparm.c
@@ -23,7 +23,6 @@
#include <sys/times.h>
#include <sys/mount.h>
#include <sys/mman.h>
-#include <getopt.h>
#include <linux/types.h>
#include <linux/hdreg.h>
@@ -2095,21 +2094,9 @@ static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int
}
}
-/*-------------------------------------*/
-/* getopt long options */
-#if ENABLE_FEATURE_HDPARM_GET_IDENTITY
-static const struct option HDPARM_LONG_OPT[] =
-{
- {"Istdin", 0, NULL, '\256'},
- {NULL, 0, NULL, 0}
-};
-#else
-#define HDPARM_LONG_OPT NULL
-#endif
-/*-------------------------------------*/
-/* getopt short options */
+/*------- getopt short options --------*/
static const char hdparm_options[]= "gfu::n::p:r::m::c::k::a::B:tTh"\
- USE_FEATURE_HDPARM_GET_IDENTITY("\256iI")
+ USE_FEATURE_HDPARM_GET_IDENTITY("iI")
USE_FEATURE_HDPARM_HDIO_GETSET_DMA("d::")
#ifdef HDIO_DRIVE_CMD
"S::D::P::X::K::A::L::W::CyYzZ"
@@ -2134,13 +2121,9 @@ int hdparm_main(int argc, char **argv)
int c;
int flagcount = 0;
- while ((c = getopt_long (argc, argv, hdparm_options, HDPARM_LONG_OPT , NULL)) >= 0) {
+ while ((c = getopt(argc, argv, hdparm_options)) >= 0) {
flagcount++;
-#if ENABLE_FEATURE_HDPARM_GET_IDENTITY
- if (c == '\256') {
- identify_from_stdin(); /* EXIT */
- }
-#endif
+ if (c == 'h') bb_show_usage(); /* EXIT */
USE_FEATURE_HDPARM_GET_IDENTITY(get_IDentity = (c == 'I'));
USE_FEATURE_HDPARM_GET_IDENTITY(get_identity = (c == 'i'));
get_geom |= (c == 'g');
@@ -2204,9 +2187,11 @@ int hdparm_main(int argc, char **argv)
argc -= optind;
argv += optind;
+#if ENABLE_FEATURE_HDPARM_GET_IDENTITY
if (argc < 1) {
- bb_show_usage();
+ identify_from_stdin(); /* EXIT */
}
+#endif
while (argc--) {
process_dev(*argv);