diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-09-28 10:25:32 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-09-28 10:25:32 +0000 |
| commit | 0d3c6afc93c8a6216fee9d60ecaa6a9d52687a65 (patch) | |
| tree | 02f4672aa95cc616ddd3265092a1eb5ad554d438 /miscutils | |
| parent | 86076775298353137c49e8c001528fab02a0fbd2 (diff) | |
| download | busybox-w32-0d3c6afc93c8a6216fee9d60ecaa6a9d52687a65.tar.gz busybox-w32-0d3c6afc93c8a6216fee9d60ecaa6a9d52687a65.tar.bz2 busybox-w32-0d3c6afc93c8a6216fee9d60ecaa6a9d52687a65.zip | |
hdparm: get rid of static variables
process_dev 5309 5311 +2
unregister_hwif 1 - -1
...........
Xreadahead 4 - -4
seek_to_zero 25 17 -8
hdparm_main 1242 1227 -15
do_time 547 480 -67
------------------------------------------------------------------------------
(add/remove: 0/83 grow/shrink: 1/3 up/down: 2/-248) Total: -246 bytes
Diffstat (limited to 'miscutils')
| -rw-r--r-- | miscutils/hdparm.c | 276 |
1 files changed, 179 insertions, 97 deletions
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c index 39e4990f5..a3a5a7336 100644 --- a/miscutils/hdparm.c +++ b/miscutils/hdparm.c | |||
| @@ -379,11 +379,6 @@ static const char *const cmd_feat_str[] = { | |||
| 379 | "SMART self-test ", /* word 84 bit 1 */ | 379 | "SMART self-test ", /* word 84 bit 1 */ |
| 380 | "SMART error logging " /* word 84 bit 0 */ | 380 | "SMART error logging " /* word 84 bit 0 */ |
| 381 | }; | 381 | }; |
| 382 | |||
| 383 | static void identify(uint16_t *id_supplied) ATTRIBUTE_NORETURN; | ||
| 384 | static void identify_from_stdin(void) ATTRIBUTE_NORETURN; | ||
| 385 | #else | ||
| 386 | void identify_from_stdin(void); | ||
| 387 | #endif | 382 | #endif |
| 388 | 383 | ||
| 389 | 384 | ||
| @@ -444,6 +439,162 @@ static const char *const secu_str[] = { | |||
| 444 | 439 | ||
| 445 | enum { fd = 3 }; | 440 | enum { fd = 3 }; |
| 446 | 441 | ||
| 442 | |||
| 443 | struct globals { | ||
| 444 | smallint get_identity, get_geom; | ||
| 445 | smallint do_flush; | ||
| 446 | smallint do_ctimings, do_timings; | ||
| 447 | smallint reread_partn; | ||
| 448 | smallint set_piomode, noisy_piomode; | ||
| 449 | smallint set_readahead, get_readahead; | ||
| 450 | smallint set_readonly, get_readonly; | ||
| 451 | smallint set_unmask, get_unmask; | ||
| 452 | smallint set_mult, get_mult; | ||
| 453 | smallint set_dma_q, get_dma_q; | ||
| 454 | smallint set_nowerr, get_nowerr; | ||
| 455 | smallint set_keep, get_keep; | ||
| 456 | smallint set_io32bit, get_io32bit; | ||
| 457 | int piomode; | ||
| 458 | unsigned long Xreadahead; | ||
| 459 | unsigned long readonly; | ||
| 460 | unsigned long unmask; | ||
| 461 | unsigned long mult; | ||
| 462 | unsigned long dma_q; | ||
| 463 | unsigned long nowerr; | ||
| 464 | unsigned long keep; | ||
| 465 | unsigned long io32bit; | ||
| 466 | #if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA | ||
| 467 | unsigned long dma; | ||
| 468 | smallint set_dma, get_dma; | ||
| 469 | #endif | ||
| 470 | #ifdef HDIO_DRIVE_CMD | ||
| 471 | smallint set_xfermode, get_xfermode; | ||
| 472 | smallint set_dkeep, get_dkeep; | ||
| 473 | smallint set_standby, get_standby; | ||
| 474 | smallint set_lookahead, get_lookahead; | ||
| 475 | smallint set_prefetch, get_prefetch; | ||
| 476 | smallint set_defects, get_defects; | ||
| 477 | smallint set_wcache, get_wcache; | ||
| 478 | smallint set_doorlock, get_doorlock; | ||
| 479 | smallint set_seagate, get_seagate; | ||
| 480 | smallint set_standbynow, get_standbynow; | ||
| 481 | smallint set_sleepnow, get_sleepnow; | ||
| 482 | smallint get_powermode; | ||
| 483 | smallint set_apmmode, get_apmmode; | ||
| 484 | int xfermode_requested; | ||
| 485 | unsigned long dkeep; | ||
| 486 | unsigned long standby_requested; | ||
| 487 | unsigned long lookahead; | ||
| 488 | unsigned long prefetch; | ||
| 489 | unsigned long defects; | ||
| 490 | unsigned long wcache; | ||
| 491 | unsigned long doorlock; | ||
| 492 | unsigned long apmmode; | ||
| 493 | #endif | ||
| 494 | USE_FEATURE_HDPARM_GET_IDENTITY( smallint get_IDentity;) | ||
| 495 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( smallint set_busstate, get_busstate;) | ||
| 496 | USE_FEATURE_HDPARM_HDIO_DRIVE_RESET( smallint perform_reset;) | ||
| 497 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( smallint perform_tristate;) | ||
| 498 | USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(smallint unregister_hwif;) | ||
| 499 | USE_FEATURE_HDPARM_HDIO_SCAN_HWIF( smallint scan_hwif;) | ||
| 500 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( unsigned long busstate;) | ||
| 501 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( unsigned long tristate;) | ||
| 502 | USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(unsigned long hwif;) | ||
| 503 | #if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF | ||
| 504 | unsigned long hwif_data; | ||
| 505 | unsigned long hwif_ctrl; | ||
| 506 | unsigned long hwif_irq; | ||
| 507 | #endif | ||
| 508 | }; | ||
| 509 | #define G (*(struct globals*)&bb_common_bufsiz1) | ||
| 510 | struct BUG_G_too_big { | ||
| 511 | char BUG_G_too_big[sizeof(G) <= COMMON_BUFSIZE ? 1 : -1]; | ||
| 512 | }; | ||
| 513 | #define get_identity (G.get_identity ) | ||
| 514 | #define get_geom (G.get_geom ) | ||
| 515 | #define do_flush (G.do_flush ) | ||
| 516 | #define do_ctimings (G.do_ctimings ) | ||
| 517 | #define do_timings (G.do_timings ) | ||
| 518 | #define reread_partn (G.reread_partn ) | ||
| 519 | #define set_piomode (G.set_piomode ) | ||
| 520 | #define noisy_piomode (G.noisy_piomode ) | ||
| 521 | #define set_readahead (G.set_readahead ) | ||
| 522 | #define get_readahead (G.get_readahead ) | ||
| 523 | #define set_readonly (G.set_readonly ) | ||
| 524 | #define get_readonly (G.get_readonly ) | ||
| 525 | #define set_unmask (G.set_unmask ) | ||
| 526 | #define get_unmask (G.get_unmask ) | ||
| 527 | #define set_mult (G.set_mult ) | ||
| 528 | #define get_mult (G.get_mult ) | ||
| 529 | #define set_dma_q (G.set_dma_q ) | ||
| 530 | #define get_dma_q (G.get_dma_q ) | ||
| 531 | #define set_nowerr (G.set_nowerr ) | ||
| 532 | #define get_nowerr (G.get_nowerr ) | ||
| 533 | #define set_keep (G.set_keep ) | ||
| 534 | #define get_keep (G.get_keep ) | ||
| 535 | #define set_io32bit (G.set_io32bit ) | ||
| 536 | #define get_io32bit (G.get_io32bit ) | ||
| 537 | #define piomode (G.piomode ) | ||
| 538 | #define Xreadahead (G.Xreadahead ) | ||
| 539 | #define readonly (G.readonly ) | ||
| 540 | #define unmask (G.unmask ) | ||
| 541 | #define mult (G.mult ) | ||
| 542 | #define dma_q (G.dma_q ) | ||
| 543 | #define nowerr (G.nowerr ) | ||
| 544 | #define keep (G.keep ) | ||
| 545 | #define io32bit (G.io32bit ) | ||
| 546 | #define dma (G.dma ) | ||
| 547 | #define set_dma (G.set_dma ) | ||
| 548 | #define get_dma (G.get_dma ) | ||
| 549 | #define set_xfermode (G.set_xfermode ) | ||
| 550 | #define get_xfermode (G.get_xfermode ) | ||
| 551 | #define set_dkeep (G.set_dkeep ) | ||
| 552 | #define get_dkeep (G.get_dkeep ) | ||
| 553 | #define set_standby (G.set_standby ) | ||
| 554 | #define get_standby (G.get_standby ) | ||
| 555 | #define set_lookahead (G.set_lookahead ) | ||
| 556 | #define get_lookahead (G.get_lookahead ) | ||
| 557 | #define set_prefetch (G.set_prefetch ) | ||
| 558 | #define get_prefetch (G.get_prefetch ) | ||
| 559 | #define set_defects (G.set_defects ) | ||
| 560 | #define get_defects (G.get_defects ) | ||
| 561 | #define set_wcache (G.set_wcache ) | ||
| 562 | #define get_wcache (G.get_wcache ) | ||
| 563 | #define set_doorlock (G.set_doorlock ) | ||
| 564 | #define get_doorlock (G.get_doorlock ) | ||
| 565 | #define set_seagate (G.set_seagate ) | ||
| 566 | #define get_seagate (G.get_seagate ) | ||
| 567 | #define set_standbynow (G.set_standbynow ) | ||
| 568 | #define get_standbynow (G.get_standbynow ) | ||
| 569 | #define set_sleepnow (G.set_sleepnow ) | ||
| 570 | #define get_sleepnow (G.get_sleepnow ) | ||
| 571 | #define get_powermode (G.get_powermode ) | ||
| 572 | #define set_apmmode (G.set_apmmode ) | ||
| 573 | #define get_apmmode (G.get_apmmode ) | ||
| 574 | #define xfermode_requested (G.xfermode_requested ) | ||
| 575 | #define dkeep (G.dkeep ) | ||
| 576 | #define standby_requested (G.standby_requested ) | ||
| 577 | #define lookahead (G.lookahead ) | ||
| 578 | #define prefetch (G.prefetch ) | ||
| 579 | #define defects (G.defects ) | ||
| 580 | #define wcache (G.wcache ) | ||
| 581 | #define doorlock (G.doorlock ) | ||
| 582 | #define apmmode (G.apmmode ) | ||
| 583 | #define get_IDentity (G.get_IDentity ) | ||
| 584 | #define set_busstate (G.set_busstate ) | ||
| 585 | #define get_busstate (G.get_busstate ) | ||
| 586 | #define perform_reset (G.perform_reset ) | ||
| 587 | #define perform_tristate (G.perform_tristate ) | ||
| 588 | #define unregister_hwif (G.unregister_hwif ) | ||
| 589 | #define scan_hwif (G.scan_hwif ) | ||
| 590 | #define busstate (G.busstate ) | ||
| 591 | #define tristate (G.tristate ) | ||
| 592 | #define hwif (G.hwif ) | ||
| 593 | #define hwif_data (G.hwif_data ) | ||
| 594 | #define hwif_ctrl (G.hwif_ctrl ) | ||
| 595 | #define hwif_irq (G.hwif_irq ) | ||
| 596 | |||
| 597 | |||
| 447 | /* Busybox messages and functions */ | 598 | /* Busybox messages and functions */ |
| 448 | #if ENABLE_IOCTL_HEX2STR_ERROR | 599 | #if ENABLE_IOCTL_HEX2STR_ERROR |
| 449 | static int ioctl_alt_func(/*int fd,*/ int cmd, unsigned char *args, int alt, const char *string) | 600 | static int ioctl_alt_func(/*int fd,*/ int cmd, unsigned char *args, int alt, const char *string) |
| @@ -544,6 +695,7 @@ static uint8_t mode_loop(uint16_t mode_sup, uint16_t mode_sel, int cc, uint8_t * | |||
| 544 | 695 | ||
| 545 | // Parse 512 byte disk identification block and print much crap. | 696 | // Parse 512 byte disk identification block and print much crap. |
| 546 | 697 | ||
| 698 | static void identify(uint16_t *val) ATTRIBUTE_NORETURN; | ||
| 547 | static void identify(uint16_t *val) | 699 | static void identify(uint16_t *val) |
| 548 | { | 700 | { |
| 549 | uint16_t ii, jj, kk; | 701 | uint16_t ii, jj, kk; |
| @@ -1012,72 +1164,6 @@ static void identify(uint16_t *val) | |||
| 1012 | } | 1164 | } |
| 1013 | #endif | 1165 | #endif |
| 1014 | 1166 | ||
| 1015 | static smallint get_identity, get_geom; | ||
| 1016 | static smallint do_flush; | ||
| 1017 | static smallint do_ctimings, do_timings; | ||
| 1018 | static smallint reread_partn; | ||
| 1019 | |||
| 1020 | static smallint set_piomode, noisy_piomode; | ||
| 1021 | static smallint set_readahead, get_readahead; | ||
| 1022 | static smallint set_readonly, get_readonly; | ||
| 1023 | static smallint set_unmask, get_unmask; | ||
| 1024 | static smallint set_mult, get_mult; | ||
| 1025 | static smallint set_dma_q, get_dma_q; | ||
| 1026 | static smallint set_nowerr, get_nowerr; | ||
| 1027 | static smallint set_keep, get_keep; | ||
| 1028 | static smallint set_io32bit, get_io32bit; | ||
| 1029 | static int piomode; | ||
| 1030 | static unsigned long Xreadahead; | ||
| 1031 | static unsigned long readonly; | ||
| 1032 | static unsigned long unmask; | ||
| 1033 | static unsigned long mult; | ||
| 1034 | static unsigned long dma_q; | ||
| 1035 | static unsigned long nowerr; | ||
| 1036 | static unsigned long keep; | ||
| 1037 | static unsigned long io32bit; | ||
| 1038 | #if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA | ||
| 1039 | static unsigned long dma; | ||
| 1040 | static smallint set_dma, get_dma; | ||
| 1041 | #endif | ||
| 1042 | #ifdef HDIO_DRIVE_CMD | ||
| 1043 | static smallint set_xfermode, get_xfermode; | ||
| 1044 | static smallint set_dkeep, get_dkeep; | ||
| 1045 | static smallint set_standby, get_standby; | ||
| 1046 | static smallint set_lookahead, get_lookahead; | ||
| 1047 | static smallint set_prefetch, get_prefetch; | ||
| 1048 | static smallint set_defects, get_defects; | ||
| 1049 | static smallint set_wcache, get_wcache; | ||
| 1050 | static smallint set_doorlock, get_doorlock; | ||
| 1051 | static smallint set_seagate, get_seagate; | ||
| 1052 | static smallint set_standbynow, get_standbynow; | ||
| 1053 | static smallint set_sleepnow, get_sleepnow; | ||
| 1054 | static smallint get_powermode; | ||
| 1055 | static smallint set_apmmode, get_apmmode; | ||
| 1056 | static int xfermode_requested; | ||
| 1057 | static unsigned long dkeep; | ||
| 1058 | static unsigned long standby_requested; | ||
| 1059 | static unsigned long lookahead; | ||
| 1060 | static unsigned long prefetch; | ||
| 1061 | static unsigned long defects; | ||
| 1062 | static unsigned long wcache; | ||
| 1063 | static unsigned long doorlock; | ||
| 1064 | static unsigned long apmmode; | ||
| 1065 | #endif | ||
| 1066 | USE_FEATURE_HDPARM_GET_IDENTITY( static smallint get_IDentity;) | ||
| 1067 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static smallint set_busstate, get_busstate;) | ||
| 1068 | USE_FEATURE_HDPARM_HDIO_DRIVE_RESET( static smallint perform_reset;) | ||
| 1069 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static smallint perform_tristate;) | ||
| 1070 | USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(static smallint unregister_hwif;) | ||
| 1071 | USE_FEATURE_HDPARM_HDIO_SCAN_HWIF( static smallint scan_hwif;) | ||
| 1072 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static unsigned long busstate;) | ||
| 1073 | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( static unsigned long tristate;) | ||
| 1074 | USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(static unsigned long hwif;) | ||
| 1075 | #if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF | ||
| 1076 | static unsigned long hwif_data; | ||
| 1077 | static unsigned long hwif_ctrl; | ||
| 1078 | static unsigned long hwif_irq; | ||
| 1079 | #endif | ||
| 1080 | |||
| 1081 | // Historically, if there was no HDIO_OBSOLETE_IDENTITY, then | 1167 | // Historically, if there was no HDIO_OBSOLETE_IDENTITY, then |
| 1082 | // then the HDIO_GET_IDENTITY only returned 142 bytes. | 1168 | // then the HDIO_GET_IDENTITY only returned 142 bytes. |
| 1083 | // Otherwise, HDIO_OBSOLETE_IDENTITY returns 142 bytes, | 1169 | // Otherwise, HDIO_OBSOLETE_IDENTITY returns 142 bytes, |
| @@ -1251,11 +1337,9 @@ static void flush_buffer_cache(/*int fd*/ void) | |||
| 1251 | #endif | 1337 | #endif |
| 1252 | } | 1338 | } |
| 1253 | 1339 | ||
| 1254 | static int seek_to_zero(/*int fd*/ void) | 1340 | static void seek_to_zero(/*int fd*/ void) |
| 1255 | { | 1341 | { |
| 1256 | if (lseek(fd, (off_t) 0, SEEK_SET)) | 1342 | xlseek(fd, (off_t) 0, SEEK_SET); |
| 1257 | return 1; | ||
| 1258 | return 0; | ||
| 1259 | } | 1343 | } |
| 1260 | 1344 | ||
| 1261 | static int read_big_block(/*int fd,*/ char *buf) | 1345 | static int read_big_block(/*int fd,*/ char *buf) |
| @@ -1273,18 +1357,18 @@ static int read_big_block(/*int fd,*/ char *buf) | |||
| 1273 | return 0; | 1357 | return 0; |
| 1274 | } | 1358 | } |
| 1275 | 1359 | ||
| 1276 | static int do_blkgetsize(/*int fd,*/ unsigned long long *blksize64) | 1360 | static unsigned long long do_blkgetsize(/*int fd*/ void) |
| 1277 | { | 1361 | { |
| 1278 | int rc; | 1362 | union { |
| 1279 | unsigned blksize32 = 0; | 1363 | unsigned long long blksize64; |
| 1364 | unsigned blksize32; | ||
| 1365 | } u; | ||
| 1280 | 1366 | ||
| 1281 | if (0 == ioctl(fd, BLKGETSIZE64, blksize64)) { // returns bytes | 1367 | if (0 == ioctl(fd, BLKGETSIZE64, &u.blksize64)) { // returns bytes |
| 1282 | *blksize64 /= 512; | 1368 | return u.blksize64 / 512; |
| 1283 | return 0; | ||
| 1284 | } | 1369 | } |
| 1285 | rc = ioctl_or_warn(fd, BLKGETSIZE, &blksize32); // returns sectors | 1370 | xioctl(fd, BLKGETSIZE, &u.blksize32); // returns sectors |
| 1286 | *blksize64 = blksize32; | 1371 | return u.blksize32; |
| 1287 | return rc; | ||
| 1288 | } | 1372 | } |
| 1289 | 1373 | ||
| 1290 | static void print_timing(unsigned t, double e) | 1374 | static void print_timing(unsigned t, double e) |
| @@ -1303,25 +1387,20 @@ static void do_time(int flag /*,int fd*/) | |||
| 1303 | struct itimerval itv; | 1387 | struct itimerval itv; |
| 1304 | unsigned elapsed, elapsed2; | 1388 | unsigned elapsed, elapsed2; |
| 1305 | unsigned max_iterations, total_MB, iterations; | 1389 | unsigned max_iterations, total_MB, iterations; |
| 1306 | unsigned long long blksize; | 1390 | char *buf = xmalloc(TIMING_BUF_BYTES); |
| 1307 | RESERVE_CONFIG_BUFFER(buf, TIMING_BUF_BYTES); | ||
| 1308 | 1391 | ||
| 1309 | if (mlock(buf, TIMING_BUF_BYTES)) { | 1392 | if (mlock(buf, TIMING_BUF_BYTES)) { |
| 1310 | bb_perror_msg("mlock"); | 1393 | bb_perror_msg("mlock"); |
| 1311 | goto quit2; | 1394 | goto quit2; |
| 1312 | } | 1395 | } |
| 1313 | 1396 | ||
| 1314 | max_iterations = 1024; | 1397 | max_iterations = do_blkgetsize() / (2 * 1024) / TIMING_BUF_MB; |
| 1315 | if (0 == do_blkgetsize(&blksize)) { | ||
| 1316 | max_iterations = blksize / (2 * 1024) / TIMING_BUF_MB; | ||
| 1317 | } | ||
| 1318 | 1398 | ||
| 1319 | /* Clear out the device request queues & give them time to complete */ | 1399 | /* Clear out the device request queues & give them time to complete */ |
| 1320 | sync(); | 1400 | sync(); |
| 1321 | sleep(2); | 1401 | sleep(2); |
| 1322 | if (flag == 0) { /* Time cache */ | 1402 | if (flag == 0) { /* Time cache */ |
| 1323 | if (seek_to_zero()) | 1403 | seek_to_zero(); |
| 1324 | goto quit; | ||
| 1325 | if (read_big_block(buf)) | 1404 | if (read_big_block(buf)) |
| 1326 | goto quit; | 1405 | goto quit; |
| 1327 | printf(" Timing buffer-cache reads: "); | 1406 | printf(" Timing buffer-cache reads: "); |
| @@ -1334,12 +1413,13 @@ static void do_time(int flag /*,int fd*/) | |||
| 1334 | * getitimer() is used rather than gettimeofday() because | 1413 | * getitimer() is used rather than gettimeofday() because |
| 1335 | * it is much more consistent (on my machine, at least). | 1414 | * it is much more consistent (on my machine, at least). |
| 1336 | */ | 1415 | */ |
| 1416 | //TODO: get rid of | ||
| 1337 | setitimer(ITIMER_REAL, &thousand, NULL); | 1417 | setitimer(ITIMER_REAL, &thousand, NULL); |
| 1338 | /* Now do the timing */ | 1418 | /* Now do the timing */ |
| 1339 | do { | 1419 | do { |
| 1340 | ++iterations; | 1420 | ++iterations; |
| 1341 | if ((flag == 0) && seek_to_zero()) | 1421 | if (flag == 0) |
| 1342 | goto quit; | 1422 | seek_to_zero(); |
| 1343 | if (read_big_block(buf)) | 1423 | if (read_big_block(buf)) |
| 1344 | goto quit; | 1424 | goto quit; |
| 1345 | getitimer(ITIMER_REAL, &itv); | 1425 | getitimer(ITIMER_REAL, &itv); |
| @@ -1351,8 +1431,7 @@ static void do_time(int flag /*,int fd*/) | |||
| 1351 | /* Now remove the lseek() and getitimer() overheads from the elapsed time */ | 1431 | /* Now remove the lseek() and getitimer() overheads from the elapsed time */ |
| 1352 | setitimer(ITIMER_REAL, &thousand, NULL); | 1432 | setitimer(ITIMER_REAL, &thousand, NULL); |
| 1353 | do { | 1433 | do { |
| 1354 | if (seek_to_zero()) | 1434 | seek_to_zero(); |
| 1355 | goto quit; | ||
| 1356 | getitimer(ITIMER_REAL, &itv); | 1435 | getitimer(ITIMER_REAL, &itv); |
| 1357 | elapsed2 = (1000 - itv.it_value.tv_sec) * 1000000 | 1436 | elapsed2 = (1000 - itv.it_value.tv_sec) * 1000000 |
| 1358 | - itv.it_value.tv_usec; | 1437 | - itv.it_value.tv_usec; |
| @@ -1365,7 +1444,7 @@ static void do_time(int flag /*,int fd*/) | |||
| 1365 | quit: | 1444 | quit: |
| 1366 | munlock(buf, TIMING_BUF_BYTES); | 1445 | munlock(buf, TIMING_BUF_BYTES); |
| 1367 | quit2: | 1446 | quit2: |
| 1368 | RELEASE_CONFIG_BUFFER(buf); | 1447 | free(buf); |
| 1369 | } | 1448 | } |
| 1370 | 1449 | ||
| 1371 | #if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | 1450 | #if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
| @@ -1851,6 +1930,7 @@ static int fromhex(unsigned char c) | |||
| 1851 | bb_error_msg_and_die("bad char: '%c' 0x%02x", c, c); | 1930 | bb_error_msg_and_die("bad char: '%c' 0x%02x", c, c); |
| 1852 | } | 1931 | } |
| 1853 | 1932 | ||
| 1933 | static void identify_from_stdin(void) ATTRIBUTE_NORETURN; | ||
| 1854 | static void identify_from_stdin(void) | 1934 | static void identify_from_stdin(void) |
| 1855 | { | 1935 | { |
| 1856 | uint16_t sbuf[256]; | 1936 | uint16_t sbuf[256]; |
| @@ -1872,6 +1952,8 @@ static void identify_from_stdin(void) | |||
| 1872 | 1952 | ||
| 1873 | identify(sbuf); | 1953 | identify(sbuf); |
| 1874 | } | 1954 | } |
| 1955 | #else | ||
| 1956 | void identify_from_stdin(void); | ||
| 1875 | #endif | 1957 | #endif |
| 1876 | 1958 | ||
| 1877 | /* busybox specific stuff */ | 1959 | /* busybox specific stuff */ |
