Module: wine Branch: master Commit: b668c52802166313984598cc02f68e5d66b54c0a URL: http://source.winehq.org/git/wine.git/?a=commit;h=b668c52802166313984598cc02...
Author: Francois Gouget fgouget@codeweavers.com Date: Wed Jun 13 13:18:50 2007 +0200
regedit: Move PerformRegAction() and get_file_name() around to eliminate forward references. Make them static.
---
programs/regedit/regedit.c | 215 ++++++++++++++++++++++++++++---------------- programs/regedit/regproc.c | 59 ------------ programs/regedit/regproc.h | 1 - 3 files changed, 136 insertions(+), 139 deletions(-)
diff --git a/programs/regedit/regedit.c b/programs/regedit/regedit.c index 68b11df..0c587d6 100644 --- a/programs/regedit/regedit.c +++ b/programs/regedit/regedit.c @@ -58,101 +58,66 @@ typedef enum { ACTION_UNDEF, ACTION_ADD, ACTION_EXPORT, ACTION_DELETE } REGEDIT_ACTION;
-BOOL PerformRegAction(REGEDIT_ACTION action, LPSTR s);
-/** - * Process unknown switch. +/****************************************************************************** + * Copies file name from command line string to the buffer. + * Rewinds the command line string pointer to the next non-space character + * after the file name. + * Buffer contains an empty string if no filename was found; * - * Params: - * chu - the switch character in upper-case. - * s - the command line string where s points to the switch character. + * params: + * command_line - command line current position pointer + * where *s[0] is the first symbol of the file name. + * file_name - buffer to write the file name to. */ -static void error_unknown_switch(char chu, char *s) +static void get_file_name(CHAR **command_line, CHAR *file_name) { - if (isalpha(chu)) { - fprintf(stderr,"%s: Undefined switch /%c!\n", getAppName(), chu); - } else { - fprintf(stderr,"%s: Alphabetic character is expected after '%c' " - "in switch specification\n", getAppName(), *(s - 1)); - } - exit(1); -} + CHAR *s = *command_line; + int pos = 0; /* position of pointer "s" in *command_line */ + file_name[0] = 0;
-BOOL ProcessCmdLine(LPSTR lpCmdLine) -{ - REGEDIT_ACTION action = ACTION_UNDEF; - LPSTR s = lpCmdLine; /* command line pointer */ - CHAR ch = *s; /* current character */ - - setAppName("regedit"); - while (ch && ((ch == '-') || (ch == '/'))) { - char chu; - char ch2; + if (!s[0]) { + return; + }
+ if (s[0] == '"') { s++; - ch = *s; - ch2 = *(s+1); - chu = toupper(ch); - if (!ch2 || isspace(ch2)) { - if (chu == 'S' || chu == 'V') { - /* ignore these switches */ - } else { - switch (chu) { - case 'D': - action = ACTION_DELETE; - break; - case 'E': - action = ACTION_EXPORT; - break; - case '?': - fprintf(stderr,usage); - exit(0); - break; - default: - error_unknown_switch(chu, s); - break; - } + (*command_line)++; + while(s[0] != '"') { + if (!s[0]) { + fprintf(stderr,"%s: Unexpected end of file name!\n", + getAppName()); + exit(1); } s++; - } else { - if (ch2 == ':') { - switch (chu) { - case 'L': - /* fall through */ - case 'R': - s += 2; - while (*s && !isspace(*s)) { - s++; - } - break; - default: - error_unknown_switch(chu, s); - break; - } - } else { - /* this is a file name, starting from '/' */ - s--; - break; - } + pos++; } - /* skip spaces to the next parameter */ - ch = *s; - while (ch && isspace(ch)) { + } else { + while(s[0] && !isspace(s[0])) { s++; - ch = *s; + pos++; } } + memcpy(file_name, *command_line, pos * sizeof((*command_line)[0])); + /* remove the last backslash */ + if (file_name[pos - 1] == '\') { + file_name[pos - 1] = '\0'; + } else { + file_name[pos] = '\0'; + }
- if (*s && action == ACTION_UNDEF) - action = ACTION_ADD; - - if (action == ACTION_UNDEF) - return FALSE; - - return PerformRegAction(action, s); + if (s[0]) { + s++; + pos++; + } + while(s[0] && isspace(s[0])) { + s++; + pos++; + } + (*command_line) += pos; }
-BOOL PerformRegAction(REGEDIT_ACTION action, LPSTR s) +static BOOL PerformRegAction(REGEDIT_ACTION action, LPSTR s) { switch (action) { case ACTION_ADD: { @@ -239,3 +204,95 @@ BOOL PerformRegAction(REGEDIT_ACTION action, LPSTR s) } return TRUE; } + +/** + * Process unknown switch. + * + * Params: + * chu - the switch character in upper-case. + * s - the command line string where s points to the switch character. + */ +static void error_unknown_switch(char chu, char *s) +{ + if (isalpha(chu)) { + fprintf(stderr,"%s: Undefined switch /%c!\n", getAppName(), chu); + } else { + fprintf(stderr,"%s: Alphabetic character is expected after '%c' " + "in switch specification\n", getAppName(), *(s - 1)); + } + exit(1); +} + +BOOL ProcessCmdLine(LPSTR lpCmdLine) +{ + REGEDIT_ACTION action = ACTION_UNDEF; + LPSTR s = lpCmdLine; /* command line pointer */ + CHAR ch = *s; /* current character */ + + setAppName("regedit"); + while (ch && ((ch == '-') || (ch == '/'))) { + char chu; + char ch2; + + s++; + ch = *s; + ch2 = *(s+1); + chu = toupper(ch); + if (!ch2 || isspace(ch2)) { + if (chu == 'S' || chu == 'V') { + /* ignore these switches */ + } else { + switch (chu) { + case 'D': + action = ACTION_DELETE; + break; + case 'E': + action = ACTION_EXPORT; + break; + case '?': + fprintf(stderr,usage); + exit(0); + break; + default: + error_unknown_switch(chu, s); + break; + } + } + s++; + } else { + if (ch2 == ':') { + switch (chu) { + case 'L': + /* fall through */ + case 'R': + s += 2; + while (*s && !isspace(*s)) { + s++; + } + break; + default: + error_unknown_switch(chu, s); + break; + } + } else { + /* this is a file name, starting from '/' */ + s--; + break; + } + } + /* skip spaces to the next parameter */ + ch = *s; + while (ch && isspace(ch)) { + s++; + ch = *s; + } + } + + if (*s && action == ACTION_UNDEF) + action = ACTION_ADD; + + if (action == ACTION_UNDEF) + return FALSE; + + return PerformRegAction(action, s); +} diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c index 16a2b8c..2718194 100644 --- a/programs/regedit/regproc.c +++ b/programs/regedit/regproc.c @@ -99,65 +99,6 @@ char* getToken(char** str, const char* delims) #endif
/****************************************************************************** - * Copies file name from command line string to the buffer. - * Rewinds the command line string pointer to the next non-space character - * after the file name. - * Buffer contains an empty string if no filename was found; - * - * params: - * command_line - command line current position pointer - * where *s[0] is the first symbol of the file name. - * file_name - buffer to write the file name to. - */ -void get_file_name(CHAR **command_line, CHAR *file_name) -{ - CHAR *s = *command_line; - int pos = 0; /* position of pointer "s" in *command_line */ - file_name[0] = 0; - - if (!s[0]) { - return; - } - - if (s[0] == '"') { - s++; - (*command_line)++; - while(s[0] != '"') { - if (!s[0]) { - fprintf(stderr,"%s: Unexpected end of file name!\n", - getAppName()); - exit(1); - } - s++; - pos++; - } - } else { - while(s[0] && !isspace(s[0])) { - s++; - pos++; - } - } - memcpy(file_name, *command_line, pos * sizeof((*command_line)[0])); - /* remove the last backslash */ - if (file_name[pos - 1] == '\') { - file_name[pos - 1] = '\0'; - } else { - file_name[pos] = '\0'; - } - - if (s[0]) { - s++; - pos++; - } - while(s[0] && isspace(s[0])) { - s++; - pos++; - } - (*command_line) += pos; -} - - -/****************************************************************************** * Converts a hex representation of a DWORD into a DWORD. */ DWORD convertHexToDWord(char *str, BYTE *buf) diff --git a/programs/regedit/regproc.h b/programs/regedit/regproc.h index 9a39951..0b23c6a 100644 --- a/programs/regedit/regproc.h +++ b/programs/regedit/regproc.h @@ -48,7 +48,6 @@ void processRegLines(FILE *in, CommandAPI command); * Generic prototypes */ char* getToken(char** str, const char* delims); -void get_file_name(CHAR **command_line, CHAR *filename); DWORD convertHexToDWord(char *str, BYTE *buf); DWORD convertHexCSVToHex(char *str, BYTE *buf, ULONG bufLen); LPSTR convertHexToHexCSV( BYTE *buf, ULONG len);