Author: ekohl Date: Sat Oct 22 19:52:17 2011 New Revision: 54233
URL: http://svn.reactos.org/svn/reactos?rev=54233&view=rev Log: [DISKPART] Implement argument processing. Patch by Lee Schroeder.
The original patch was modified to fix the following issues: - Indentation and coding style. - Remove obsolete code: 1. The if-statement around the for-loop is not needed. 2. The call to wcsicmp() is already case insensitive (it is the 'i' in wcsicmp). - Check the existence of a script file name and a timeout value before trying to process them. - Call run_script() after the argument list has been processed. This fixes the argument order issue.
See issue #6552 for more details.
Modified: trunk/reactos/base/system/diskpart/diskpart.c
Modified: trunk/reactos/base/system/diskpart/diskpart.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/diskpart/diskpa... ============================================================================== --- trunk/reactos/base/system/diskpart/diskpart.c [iso-8859-1] (original) +++ trunk/reactos/base/system/diskpart/diskpart.c [iso-8859-1] Sat Oct 22 19:52:17 2011 @@ -3,7 +3,7 @@ * LICENSE: GPL - See COPYING in the top level directory * FILE: base/system/diskpart/diskpart.c * PURPOSE: Manages all the partitions of the OS in - * an interactive way + * an interactive way * PROGRAMMERS: Lee Schroeder */
@@ -30,7 +30,8 @@ * opens the file, reads the contents, convert the text into readable * code for the computer, and then execute commands in order. */ -BOOL run_script(LPCWSTR filename) +BOOL +run_script(LPCWSTR filename) { FILE *script_file; WCHAR tmp_string[MAX_STRING_SIZE]; @@ -58,18 +59,20 @@ }
/* - * main(): + * wmain(): * Main entry point of the application. */ int wmain(int argc, const WCHAR *argv[]) { - /* Gets the current name of the computer */ - WCHAR comp_name[MAX_STRING_SIZE]; //used to store the name of the computer */ - DWORD comp_size = MAX_STRING_SIZE; // used for the char size of comp_name */ - BOOL interpreter_running = TRUE; //used for the main program loop */ + WCHAR szComputerName[MAX_STRING_SIZE]; + DWORD comp_size = MAX_STRING_SIZE; + BOOL interpreter_running = TRUE; + LPCWSTR file_name = NULL; + int i; + int timeout = 0;
/* Get the name of the computer for us and change the value of comp_name */ - GetComputerName(comp_name, &comp_size); + GetComputerName(szComputerName, &comp_size);
/* TODO: Remove this section of code when program becomes stable enough for production use. */ wprintf(L"\n*WARNING*: This program is incomplete and may not work properly.\n"); @@ -77,30 +80,60 @@ /* Print the header information */ PrintResourceString(IDS_APP_HEADER, DISKPART_VERSION); PrintResourceString(IDS_APP_LICENSE); - PrintResourceString(IDS_APP_CURR_COMPUTER, comp_name); + PrintResourceString(IDS_APP_CURR_COMPUTER, szComputerName);
- /* Find out if the user is loading a script */ - if (argc >= 2) + /* Process arguments */ + for (i = 1; i < argc; i++) { - /* if there are arguments when starting the program - determine if the script flag is enabled */ - if ((wcsicmp(argv[1], L"/s") == 0) || - (wcsicmp(argv[1], L"-s") == 0)) + if ((argv[i][0] == L'-') || (argv[i][0] == L'/')) { - /* see if the user has put anything after the script flag; if not, - then it doesn't run the run_script() command. */ - /* Alternative comment: Fail if the script name is missing */ - if (argc == 3) - return EXIT_FAILURE; + if (wcsicmp(&argv[i][1], L"s") == 0) + { + /* + * Get the file name only if there is at least one more + * argument and it is not another option + */ + if ((i + 1 < argc) && + (argv[i + 1][0] != L'-') && + (argv[i + 1][0] != L'/')) + { + /* Next argument */ + i++;
- interpreter_running = run_script(argv[2]); + /* Get the file name */ + file_name = argv[i]; + } + } + else if (wcsicmp(&argv[i][1], L"t") == 0) + { + /* + * Get the timeout value only if there is at least one more + * argument and it is not another option + */ + if ((i + 1 < argc) && + (argv[i + 1][0] != L'-') && + (argv[i + 1][0] != L'/')) + { + /* Next argument */ + i++; + + /* Get the timeout value */ + timeout = _wtoi(argv[i]); + } + } } }
- /* the main program loop */ - while (interpreter_running) + /* Run the script if we got a script name or call the interpreter otherwise */ + if (file_name != NULL) { - interpreter_running = interpret_main(); + if (run_script(file_name) == FALSE) + return EXIT_FAILURE; + } + else + { + while (interpreter_running) + interpreter_running = interpret_main(); }
/* Let the user know the program is exiting */