asloptions.c revision 281075
188480Sjoerg/****************************************************************************** 24007Sjoerg * 379755Sdd * Module Name: asloptions - compiler command line processing 44007Sjoerg * 54007Sjoerg *****************************************************************************/ 64007Sjoerg 74007Sjoerg/* 84007Sjoerg * Copyright (C) 2000 - 2015, Intel Corp. 94007Sjoerg * All rights reserved. 104007Sjoerg * 114007Sjoerg * Redistribution and use in source and binary forms, with or without 1279755Sdd * modification, are permitted provided that the following conditions 134007Sjoerg * are met: 144007Sjoerg * 1. Redistributions of source code must retain the above copyright 154007Sjoerg * notice, this list of conditions, and the following disclaimer, 164007Sjoerg * without modification. 174007Sjoerg * 2. Redistributions in binary form must reproduce at minimum a disclaimer 184007Sjoerg * substantially similar to the "NO WARRANTY" disclaimer below 194007Sjoerg * ("Disclaimer") and any redistribution must be conditioned upon 204007Sjoerg * including a substantially similar Disclaimer requirement for further 214007Sjoerg * binary redistribution. 224007Sjoerg * 3. Neither the names of the above-listed copyright holders nor the names 234007Sjoerg * of any contributors may be used to endorse or promote products derived 244007Sjoerg * from this software without specific prior written permission. 2548791Snik * 2650479Speter * Alternatively, this software may be distributed under the terms of the 2748791Snik * GNU General Public License ("GPL") version 2 as published by the Free 28338545Seugen * Software Foundation. 29208593Suqs * 304007Sjoerg * NO WARRANTY 314007Sjoerg * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 324007Sjoerg * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3388480Sjoerg * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 344007Sjoerg * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3568965Sru * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3688480Sjoerg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3788480Sjoerg * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3888480Sjoerg * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3988480Sjoerg * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4088480Sjoerg * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 414007Sjoerg * POSSIBILITY OF SUCH DAMAGES. 4288480Sjoerg */ 4388480Sjoerg 4468965Sru#include <contrib/dev/acpica/compiler/aslcompiler.h> 4588480Sjoerg#include <contrib/dev/acpica/include/acapps.h> 4688480Sjoerg#include <contrib/dev/acpica/include/acdisasm.h> 4788480Sjoerg 484007Sjoerg#define _COMPONENT ACPI_COMPILER 4920245Smpp ACPI_MODULE_NAME ("asloption") 5088480Sjoerg 5188480Sjoerg 5288480Sjoerg/* Local prototypes */ 5389228Sru 5489228Srustatic int 5588480SjoergAslDoOptions ( 5688480Sjoerg int argc, 5788480Sjoerg char **argv, 5820245Smpp BOOLEAN IsResponseFile); 5988480Sjoerg 6088480Sjoergstatic void 6189228SruAslMergeOptionTokens ( 6288480Sjoerg char *InBuffer, 6389228Sru char *OutBuffer); 6488480Sjoerg 6588480Sjoergstatic int 6688480SjoergAslDoResponseFile ( 67117287Smarkm char *Filename); 6888480Sjoerg 6989228Sru 7089228Sru#define ASL_TOKEN_SEPARATORS " \t\n" 7189228Sru#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^r:s|t|T+G^v^w|x:z" 7289228Sru 7389228Sru 7489228Sru/******************************************************************************* 7589228Sru * 7688480Sjoerg * FUNCTION: AslCommandLine 7789228Sru * 78108317Sschweikh * PARAMETERS: argc/argv 7988480Sjoerg * 8088480Sjoerg * RETURN: Last argv index 8188480Sjoerg * 8288480Sjoerg * DESCRIPTION: Command line processing 8388480Sjoerg * 8488480Sjoerg ******************************************************************************/ 8588480Sjoerg 8688480Sjoergint 8788480SjoergAslCommandLine ( 8888480Sjoerg int argc, 8988480Sjoerg char **argv) 9088480Sjoerg{ 9189228Sru int BadCommandLine = 0; 9289228Sru ACPI_STATUS Status; 9388480Sjoerg 9488480Sjoerg 9588480Sjoerg /* Minimum command line contains at least the command and an input file */ 9689228Sru 974007Sjoerg if (argc < 2) 9888480Sjoerg { 9988480Sjoerg printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 10089228Sru Usage (); 10189228Sru exit (1); 10288480Sjoerg } 10389228Sru 10489228Sru /* Process all command line options */ 10588480Sjoerg 10688480Sjoerg BadCommandLine = AslDoOptions (argc, argv, FALSE); 107117287Smarkm 10889228Sru if (Gbl_DoTemplates) 10988480Sjoerg { 11089228Sru Status = DtCreateTemplates (Gbl_TemplateSignature); 11189228Sru if (ACPI_FAILURE (Status)) 11289228Sru { 11389228Sru exit (-1); 11488480Sjoerg } 11588480Sjoerg exit (1); 11688480Sjoerg } 11788480Sjoerg 11888480Sjoerg /* Next parameter must be the input filename */ 11988480Sjoerg 12088480Sjoerg if (!argv[AcpiGbl_Optind] && 12188480Sjoerg !Gbl_DisasmFlag) 12288480Sjoerg { 12388480Sjoerg printf ("Missing input filename\n"); 12488480Sjoerg BadCommandLine = TRUE; 12588480Sjoerg } 12689228Sru 12789228Sru if (Gbl_DoSignon) 12889228Sru { 12989228Sru printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 13088480Sjoerg if (Gbl_IgnoreErrors) 13188480Sjoerg { 13288480Sjoerg printf ("Ignoring all errors, forcing AML file generation\n\n"); 13388480Sjoerg } 13488480Sjoerg } 13588480Sjoerg 13688480Sjoerg if (BadCommandLine) 13788480Sjoerg { 13888480Sjoerg printf ("Use -h option for help information\n"); 13988480Sjoerg exit (1); 14088480Sjoerg } 14188480Sjoerg 14288480Sjoerg return (AcpiGbl_Optind); 14388480Sjoerg} 14488480Sjoerg 14589228Sru 14689228Sru/******************************************************************************* 14789228Sru * 14889228Sru * FUNCTION: AslDoOptions 14988480Sjoerg * 15088480Sjoerg * PARAMETERS: argc/argv - Standard argc/argv 15188480Sjoerg * IsResponseFile - TRUE if executing a response file. 15288480Sjoerg * 15388480Sjoerg * RETURN: Status 15488480Sjoerg * 15589228Sru * DESCRIPTION: Command line option processing 15689228Sru * 15789228Sru ******************************************************************************/ 15889228Sru 15988480Sjoergstatic int 16088480SjoergAslDoOptions ( 16188480Sjoerg int argc, 16288480Sjoerg char **argv, 16388480Sjoerg BOOLEAN IsResponseFile) 16488480Sjoerg{ 16589228Sru ACPI_STATUS Status; 16688480Sjoerg UINT32 j; 16788480Sjoerg 16888480Sjoerg 16988480Sjoerg /* Get the command line options */ 17089228Sru 17189228Sru while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j) 17288480Sjoerg { 17388480Sjoerg case '@': /* Begin a response file */ 17488480Sjoerg 17589228Sru if (IsResponseFile) 17689228Sru { 17789228Sru printf ("Nested command files are not supported\n"); 17889228Sru return (-1); 17988480Sjoerg } 18088480Sjoerg 18189228Sru if (AslDoResponseFile (AcpiGbl_Optarg)) 18288480Sjoerg { 18388480Sjoerg return (-1); 18488480Sjoerg } 18588480Sjoerg break; 18688480Sjoerg 18788480Sjoerg case 'b': /* Debug options */ 18888480Sjoerg 18988480Sjoerg switch (AcpiGbl_Optarg[0]) 19088480Sjoerg { 19188480Sjoerg case 'f': 19288480Sjoerg 19388480Sjoerg AslCompilerdebug = 1; /* same as yydebug */ 19488480Sjoerg DtParserdebug = 1; 19589228Sru PrParserdebug = 1; 19689228Sru Gbl_DebugFlag = TRUE; 19788480Sjoerg break; 19888480Sjoerg 19988480Sjoerg case 'p': /* Prune ASL parse tree */ 20088480Sjoerg 20188480Sjoerg /* Get the required argument */ 20288480Sjoerg 20389228Sru if (AcpiGetoptArgument (argc, argv)) 20489228Sru { 20588480Sjoerg return (-1); 20688480Sjoerg } 207131500Sru 20888480Sjoerg Gbl_PruneParseTree = TRUE; 20988480Sjoerg Gbl_PruneDepth = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 21088480Sjoerg break; 21189228Sru 21289228Sru case 's': 21389228Sru 21488480Sjoerg Gbl_DebugFlag = TRUE; 21589228Sru break; 21688480Sjoerg 21789228Sru case 't': 21888480Sjoerg 21988480Sjoerg /* Get the required argument */ 22089228Sru 221131500Sru if (AcpiGetoptArgument (argc, argv)) 22288480Sjoerg { 22389228Sru return (-1); 22488480Sjoerg } 22588480Sjoerg 22689228Sru Gbl_PruneType = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 22788480Sjoerg break; 22888480Sjoerg 22988480Sjoerg default: 23088480Sjoerg 23188480Sjoerg printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 23289228Sru return (-1); 23389228Sru } 23488480Sjoerg 23589228Sru break; 23688480Sjoerg 23788480Sjoerg case 'c': 23888480Sjoerg 23988480Sjoerg switch (AcpiGbl_Optarg[0]) 240130091Sru { 24188480Sjoerg case 'r': 24288480Sjoerg 24388480Sjoerg Gbl_NoResourceChecking = TRUE; 24488480Sjoerg break; 24589228Sru 24689228Sru default: 24788480Sjoerg 24889228Sru printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 24988480Sjoerg return (-1); 25089228Sru } 25188480Sjoerg break; 25288480Sjoerg 253130091Sru case 'd': /* Disassembler */ 254126234Sphk 255126234Sphk switch (AcpiGbl_Optarg[0]) 256130091Sru { 25788480Sjoerg case '^': 258130091Sru 259130091Sru Gbl_DoCompile = FALSE; 260126234Sphk break; 26188480Sjoerg 26288480Sjoerg case 'a': 26388480Sjoerg 264130091Sru Gbl_DoCompile = FALSE; 265130091Sru Gbl_DisassembleAll = TRUE; 266126234Sphk break; 267126234Sphk 268126234Sphk case 'b': /* Do not convert buffers to resource descriptors */ 269126234Sphk 270126234Sphk AcpiGbl_NoResourceDisassembly = TRUE; 271126234Sphk break; 272126234Sphk 273126234Sphk case 'c': 274126234Sphk 275126234Sphk break; 276126234Sphk 277126234Sphk case 'l': /* Use legacy ASL code (not ASL+) for disassembly */ 27888480Sjoerg 27920245Smpp Gbl_DoCompile = FALSE; 28088480Sjoerg AcpiGbl_CstyleDisassembly = FALSE; 28188480Sjoerg break; 28289228Sru 28388480Sjoerg default: 28489228Sru 28589228Sru printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 28688480Sjoerg return (-1); 28788480Sjoerg } 28888480Sjoerg 28988480Sjoerg Gbl_DisasmFlag = TRUE; 290126234Sphk break; 291130091Sru 292126234Sphk case 'D': /* Define a symbol */ 293130091Sru 294126234Sphk PrAddDefine (AcpiGbl_Optarg, NULL, TRUE); 295130091Sru break; 296126234Sphk 297126234Sphk case 'e': /* External files for disassembler */ 298130091Sru 29921880Swosch /* Get entire list of external files */ 3004007Sjoerg 30188480Sjoerg AcpiGbl_Optind--; 30288480Sjoerg argv[AcpiGbl_Optind] = AcpiGbl_Optarg; 30388480Sjoerg 30488480Sjoerg while (argv[AcpiGbl_Optind] && 305117287Smarkm (argv[AcpiGbl_Optind][0] != '-')) 30688480Sjoerg { 30734809Scharnier Status = AcpiDmAddToExternalFileList (argv[AcpiGbl_Optind]); 308117287Smarkm if (ACPI_FAILURE (Status)) 30968575Sru { 3104007Sjoerg printf ("Could not add %s to external list\n", argv[AcpiGbl_Optind]); 311 return (-1); 312 } 313 314 AcpiGbl_Optind++; 315 } 316 break; 317 318 case 'f': 319 320 switch (AcpiGbl_Optarg[0]) 321 { 322 case '^': /* Ignore errors and force creation of aml file */ 323 324 Gbl_IgnoreErrors = TRUE; 325 break; 326 327 case 'e': /* Disassembler: Get external declaration file */ 328 329 if (AcpiGetoptArgument (argc, argv)) 330 { 331 return (-1); 332 } 333 334 Gbl_ExternalRefFilename = AcpiGbl_Optarg; 335 break; 336 337 default: 338 339 printf ("Unknown option: -f%s\n", AcpiGbl_Optarg); 340 return (-1); 341 } 342 break; 343 344 case 'G': 345 346 Gbl_CompileGeneric = TRUE; 347 break; 348 349 case 'g': /* Get all ACPI tables */ 350 351 printf ("-g option is deprecated, use acpidump utility instead\n"); 352 exit (1); 353 354 case 'h': 355 356 switch (AcpiGbl_Optarg[0]) 357 { 358 case '^': 359 360 Usage (); 361 exit (0); 362 363 case 'c': 364 365 UtDisplayConstantOpcodes (); 366 exit (0); 367 368 case 'f': 369 370 AslFilenameHelp (); 371 exit (0); 372 373 case 'r': 374 375 /* reserved names */ 376 377 ApDisplayReservedNames (); 378 exit (0); 379 380 case 't': 381 382 UtDisplaySupportedTables (); 383 exit (0); 384 385 default: 386 387 printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 388 return (-1); 389 } 390 391 case 'I': /* Add an include file search directory */ 392 393 FlAddIncludeDirectory (AcpiGbl_Optarg); 394 break; 395 396 case 'i': /* Output AML as an include file */ 397 398 switch (AcpiGbl_Optarg[0]) 399 { 400 case 'a': 401 402 /* Produce assembly code include file */ 403 404 Gbl_AsmIncludeOutputFlag = TRUE; 405 break; 406 407 case 'c': 408 409 /* Produce C include file */ 410 411 Gbl_C_IncludeOutputFlag = TRUE; 412 break; 413 414 case 'n': 415 416 /* Compiler/Disassembler: Ignore the NOOP operator */ 417 418 AcpiGbl_IgnoreNoopOperator = TRUE; 419 break; 420 421 default: 422 423 printf ("Unknown option: -i%s\n", AcpiGbl_Optarg); 424 return (-1); 425 } 426 break; 427 428 case 'l': /* Listing files */ 429 430 switch (AcpiGbl_Optarg[0]) 431 { 432 case '^': 433 434 /* Produce listing file (Mixed source/aml) */ 435 436 Gbl_ListingFlag = TRUE; 437 break; 438 439 case 'i': 440 441 /* Produce preprocessor output file */ 442 443 Gbl_PreprocessorOutputFlag = TRUE; 444 break; 445 446 case 'm': 447 448 /* Produce hardware map summary file */ 449 450 Gbl_MapfileFlag = TRUE; 451 break; 452 453 case 'n': 454 455 /* Produce namespace file */ 456 457 Gbl_NsOutputFlag = TRUE; 458 break; 459 460 case 's': 461 462 /* Produce combined source file */ 463 464 Gbl_SourceOutputFlag = TRUE; 465 break; 466 467 default: 468 469 printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 470 return (-1); 471 } 472 break; 473 474 case 'm': /* Set line buffer size */ 475 476 Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024; 477 if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE) 478 { 479 Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE; 480 } 481 printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize); 482 break; 483 484 case 'n': /* Parse only */ 485 486 Gbl_ParseOnlyFlag = TRUE; 487 break; 488 489 case 'o': /* Control compiler AML optimizations */ 490 491 switch (AcpiGbl_Optarg[0]) 492 { 493 case 'a': 494 495 /* Disable all optimizations */ 496 497 Gbl_FoldConstants = FALSE; 498 Gbl_IntegerOptimizationFlag = FALSE; 499 Gbl_ReferenceOptimizationFlag = FALSE; 500 break; 501 502 case 'f': 503 504 /* Disable folding on "normal" expressions */ 505 506 Gbl_FoldConstants = FALSE; 507 break; 508 509 case 'i': 510 511 /* Disable integer optimization to constants */ 512 513 Gbl_IntegerOptimizationFlag = FALSE; 514 break; 515 516 case 'n': 517 518 /* Disable named reference optimization */ 519 520 Gbl_ReferenceOptimizationFlag = FALSE; 521 break; 522 523 case 't': 524 525 /* Display compile time(s) */ 526 527 Gbl_CompileTimesFlag = TRUE; 528 break; 529 530 default: 531 532 printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 533 return (-1); 534 } 535 break; 536 537 case 'P': /* Preprocessor options */ 538 539 switch (AcpiGbl_Optarg[0]) 540 { 541 case '^': /* Proprocess only, emit (.i) file */ 542 543 Gbl_PreprocessOnly = TRUE; 544 Gbl_PreprocessorOutputFlag = TRUE; 545 break; 546 547 case 'n': /* Disable preprocessor */ 548 549 Gbl_PreprocessFlag = FALSE; 550 break; 551 552 default: 553 554 printf ("Unknown option: -P%s\n", AcpiGbl_Optarg); 555 return (-1); 556 } 557 break; 558 559 case 'p': /* Override default AML output filename */ 560 561 Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 562 UtConvertBackslashes (Gbl_OutputFilenamePrefix); 563 Gbl_UseDefaultAmlFilename = FALSE; 564 break; 565 566 case 'r': /* Override revision found in table header */ 567 568 Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 569 break; 570 571 case 's': /* Create AML in a source code file */ 572 573 switch (AcpiGbl_Optarg[0]) 574 { 575 case 'a': 576 577 /* Produce assembly code output file */ 578 579 Gbl_AsmOutputFlag = TRUE; 580 break; 581 582 case 'c': 583 584 /* Produce C hex output file */ 585 586 Gbl_C_OutputFlag = TRUE; 587 break; 588 589 case 'o': 590 591 /* Produce AML offset table in C */ 592 593 Gbl_C_OffsetTableFlag = TRUE; 594 break; 595 596 default: 597 598 printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 599 return (-1); 600 } 601 break; 602 603 case 't': /* Produce hex table output file */ 604 605 switch (AcpiGbl_Optarg[0]) 606 { 607 case 'a': 608 609 Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 610 break; 611 612 case 'c': 613 614 Gbl_HexOutputFlag = HEX_OUTPUT_C; 615 break; 616 617 case 's': 618 619 Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 620 break; 621 622 default: 623 624 printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 625 return (-1); 626 } 627 break; 628 629 case 'T': /* Create a ACPI table template file */ 630 631 Gbl_DoTemplates = TRUE; 632 Gbl_TemplateSignature = AcpiGbl_Optarg; 633 break; 634 635 case 'v': /* Version and verbosity settings */ 636 637 switch (AcpiGbl_Optarg[0]) 638 { 639 case '^': 640 641 printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME)); 642 exit (0); 643 644 case 'a': 645 646 /* Disable all error/warning/remark messages */ 647 648 Gbl_NoErrors = TRUE; 649 break; 650 651 case 'e': 652 653 /* Disable all warning/remark messages (errors only) */ 654 655 Gbl_DisplayRemarks = FALSE; 656 Gbl_DisplayWarnings = FALSE; 657 break; 658 659 case 'i': 660 /* 661 * Support for integrated development environment(s). 662 * 663 * 1) No compiler signon 664 * 2) Send stderr messages to stdout 665 * 3) Less verbose error messages (single line only for each) 666 * 4) Error/warning messages are formatted appropriately to 667 * be recognized by MS Visual Studio 668 */ 669 Gbl_VerboseErrors = FALSE; 670 Gbl_DoSignon = FALSE; 671 Gbl_Files[ASL_FILE_STDERR].Handle = stdout; 672 break; 673 674 case 'o': 675 676 Gbl_DisplayOptimizations = TRUE; 677 break; 678 679 case 'r': 680 681 Gbl_DisplayRemarks = FALSE; 682 break; 683 684 case 's': 685 686 Gbl_DoSignon = FALSE; 687 break; 688 689 case 't': 690 691 Gbl_VerboseTemplates = TRUE; 692 break; 693 694 case 'w': 695 696 /* Get the required argument */ 697 698 if (AcpiGetoptArgument (argc, argv)) 699 { 700 return (-1); 701 } 702 703 Status = AslDisableException (AcpiGbl_Optarg); 704 if (ACPI_FAILURE (Status)) 705 { 706 return (-1); 707 } 708 break; 709 710 default: 711 712 printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 713 return (-1); 714 } 715 break; 716 717 case 'w': /* Set warning levels */ 718 719 switch (AcpiGbl_Optarg[0]) 720 { 721 case '1': 722 723 Gbl_WarningLevel = ASL_WARNING; 724 break; 725 726 case '2': 727 728 Gbl_WarningLevel = ASL_WARNING2; 729 break; 730 731 case '3': 732 733 Gbl_WarningLevel = ASL_WARNING3; 734 break; 735 736 case 'e': 737 738 Gbl_WarningsAsErrors = TRUE; 739 break; 740 741 default: 742 743 printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 744 return (-1); 745 } 746 break; 747 748 case 'x': /* Set debug print output level */ 749 750 AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 751 break; 752 753 case 'z': 754 755 Gbl_UseOriginalCompilerId = TRUE; 756 break; 757 758 default: 759 760 return (-1); 761 } 762 763 return (0); 764} 765 766 767/******************************************************************************* 768 * 769 * FUNCTION: AslMergeOptionTokens 770 * 771 * PARAMETERS: InBuffer - Input containing an option string 772 * OutBuffer - Merged output buffer 773 * 774 * RETURN: None 775 * 776 * DESCRIPTION: Remove all whitespace from an option string. 777 * 778 ******************************************************************************/ 779 780static void 781AslMergeOptionTokens ( 782 char *InBuffer, 783 char *OutBuffer) 784{ 785 char *Token; 786 787 788 *OutBuffer = 0; 789 790 Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 791 while (Token) 792 { 793 strcat (OutBuffer, Token); 794 Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 795 } 796} 797 798 799/******************************************************************************* 800 * 801 * FUNCTION: AslDoResponseFile 802 * 803 * PARAMETERS: Filename - Name of the response file 804 * 805 * RETURN: Status 806 * 807 * DESCRIPTION: Open a response file and process all options within. 808 * 809 ******************************************************************************/ 810 811static int 812AslDoResponseFile ( 813 char *Filename) 814{ 815 char *argv = StringBuffer2; 816 FILE *ResponseFile; 817 int OptStatus = 0; 818 int Opterr; 819 int Optind; 820 821 822 ResponseFile = fopen (Filename, "r"); 823 if (!ResponseFile) 824 { 825 printf ("Could not open command file %s, %s\n", 826 Filename, strerror (errno)); 827 return (-1); 828 } 829 830 /* Must save the current GetOpt globals */ 831 832 Opterr = AcpiGbl_Opterr; 833 Optind = AcpiGbl_Optind; 834 835 /* 836 * Process all lines in the response file. There must be one complete 837 * option per line 838 */ 839 while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 840 { 841 /* Compress all tokens, allowing us to use a single argv entry */ 842 843 AslMergeOptionTokens (StringBuffer, StringBuffer2); 844 845 /* Process the option */ 846 847 AcpiGbl_Opterr = 0; 848 AcpiGbl_Optind = 0; 849 850 OptStatus = AslDoOptions (1, &argv, TRUE); 851 if (OptStatus) 852 { 853 printf ("Invalid option in command file %s: %s\n", 854 Filename, StringBuffer); 855 break; 856 } 857 } 858 859 /* Restore the GetOpt globals */ 860 861 AcpiGbl_Opterr = Opterr; 862 AcpiGbl_Optind = Optind; 863 864 fclose (ResponseFile); 865 return (OptStatus); 866} 867