Author: dchapyshev Date: Sat Feb 16 20:28:58 2008 New Revision: 32389
URL: http://svn.reactos.org/svn/reactos?rev=32389&view=rev Log: - Add small checking - Fix formating
Modified: trunk/reactos/base/system/rundll32/lang/bg-BG.rc trunk/reactos/base/system/rundll32/lang/de-DE.rc trunk/reactos/base/system/rundll32/lang/el-GR.rc trunk/reactos/base/system/rundll32/lang/en-US.rc trunk/reactos/base/system/rundll32/lang/es-ES.rc trunk/reactos/base/system/rundll32/lang/fr-FR.rc trunk/reactos/base/system/rundll32/lang/hu-HU.rc trunk/reactos/base/system/rundll32/lang/id-ID.rc trunk/reactos/base/system/rundll32/lang/it-IT.rc trunk/reactos/base/system/rundll32/lang/ja-JP.rc trunk/reactos/base/system/rundll32/lang/lt-LT.rc trunk/reactos/base/system/rundll32/lang/nb-NO.rc trunk/reactos/base/system/rundll32/lang/nl-NL.rc trunk/reactos/base/system/rundll32/lang/pl-PL.rc trunk/reactos/base/system/rundll32/lang/pt-BR.rc trunk/reactos/base/system/rundll32/lang/ru-RU.rc trunk/reactos/base/system/rundll32/lang/sk-SK.rc trunk/reactos/base/system/rundll32/lang/th-TH.rc trunk/reactos/base/system/rundll32/lang/uk-UA.rc trunk/reactos/base/system/rundll32/rundll32.c
Modified: trunk/reactos/base/system/rundll32/lang/bg-BG.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/b... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/bg-BG.rc (original) +++ trunk/reactos/base/system/rundll32/lang/bg-BG.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "Íåóñïåøíî çàðåæäàíå íà áèáëèîòåêà '%s'" -IDS_MissingEntry, "Ëèïñâàùà âõîäíà òî÷êà:%s\nâ %s" + IDS_DllNotLoaded, "Íåóñïåøíî çàðåæäàíå íà áèáëèîòåêà '%s'" + IDS_MissingEntry, "Ëèïñâàùà âõîäíà òî÷êà:%s\nâ %s" END
Modified: trunk/reactos/base/system/rundll32/lang/de-DE.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/d... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/de-DE.rc (original) +++ trunk/reactos/base/system/rundll32/lang/de-DE.rc Sat Feb 16 20:28:58 2008 @@ -7,6 +7,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary laden von '%s' fehlgeschlagen" -IDS_MissingEntry, "Fehlender Eintrag:%s\nIn %s" + IDS_DllNotLoaded, "LoadLibrary laden von '%s' fehlgeschlagen" + IDS_MissingEntry, "Fehlender Eintrag:%s\nIn %s" END
Modified: trunk/reactos/base/system/rundll32/lang/el-GR.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/e... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/el-GR.rc (original) +++ trunk/reactos/base/system/rundll32/lang/el-GR.rc Sat Feb 16 20:28:58 2008 @@ -1,13 +1,11 @@ #include "resource.h" /* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com * Gr.rc by Dj Apal® */
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary äåí êáôÜöåñå íá öïñôþóåé '%s'" -IDS_MissingEntry, "Ëåßðåé ôï óçìåßï åêêßíçóçò:%s\nIn %s" + IDS_DllNotLoaded, "LoadLibrary äåí êáôÜöåñå íá öïñôþóåé '%s'" + IDS_MissingEntry, "Ëåßðåé ôï óçìåßï åêêßíçóçò:%s\nIn %s" END
Modified: trunk/reactos/base/system/rundll32/lang/en-US.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/e... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/en-US.rc (original) +++ trunk/reactos/base/system/rundll32/lang/en-US.rc Sat Feb 16 20:28:58 2008 @@ -7,6 +7,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary failed to load '%s'" -IDS_MissingEntry, "Missing entry point:%s\nIn %s" + IDS_DllNotLoaded, "LoadLibrary failed to load '%s'" + IDS_MissingEntry, "Missing entry point:%s\nIn %s" END
Modified: trunk/reactos/base/system/rundll32/lang/es-ES.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/e... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/es-ES.rc (original) +++ trunk/reactos/base/system/rundll32/lang/es-ES.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "El cargador de Librerias falló al cargar '%s'" -IDS_MissingEntry, "Punto de entrada perdido:%s\nIn %s" + IDS_DllNotLoaded, "El cargador de Librerias falló al cargar '%s'" + IDS_MissingEntry, "Punto de entrada perdido:%s\nIn %s" END
Modified: trunk/reactos/base/system/rundll32/lang/fr-FR.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/f... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/fr-FR.rc (original) +++ trunk/reactos/base/system/rundll32/lang/fr-FR.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary a échoué lors du chargement de '%s'" -IDS_MissingEntry, "Point d'entrée manquant:%s\ndans %s" + IDS_DllNotLoaded, "LoadLibrary a échoué lors du chargement de '%s'" + IDS_MissingEntry, "Point d'entrée manquant:%s\ndans %s" END
Modified: trunk/reactos/base/system/rundll32/lang/hu-HU.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/h... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/hu-HU.rc (original) +++ trunk/reactos/base/system/rundll32/lang/hu-HU.rc Sat Feb 16 20:28:58 2008 @@ -1,13 +1,11 @@ #include "resource.h" /* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com * Hungarian version is Copyright 2005 - Peter Nagy nagylakas@gmail.com */
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "A(z) '%s' állományt, vagy valamelyik összetevõjét nem sikerült megnyitni" -IDS_MissingEntry, "Hiányzó bejegyzés: %s\nIn A Következõ állomány nem tölthetõ be: %s" + IDS_DllNotLoaded, "A(z) '%s' állományt, vagy valamelyik összetevõjét nem sikerült megnyitni" + IDS_MissingEntry, "Hiányzó bejegyzés: %s\nIn A Következõ állomány nem tölthetõ be: %s" END
Modified: trunk/reactos/base/system/rundll32/lang/id-ID.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/i... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/id-ID.rc (original) +++ trunk/reactos/base/system/rundll32/lang/id-ID.rc Sat Feb 16 20:28:58 2008 @@ -4,6 +4,6 @@
STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary gagal untuk mengambil '%s'" -IDS_MissingEntry, "entry point hilang:%s\nDalam %s" + IDS_DllNotLoaded, "LoadLibrary gagal untuk mengambil '%s'" + IDS_MissingEntry, "entry point hilang:%s\nDalam %s" END
Modified: trunk/reactos/base/system/rundll32/lang/it-IT.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/i... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/it-IT.rc (original) +++ trunk/reactos/base/system/rundll32/lang/it-IT.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary fallita '%s'" -IDS_MissingEntry, "Manca:%s\nIn %s" + IDS_DllNotLoaded, "LoadLibrary fallita '%s'" + IDS_MissingEntry, "Manca:%s\nIn %s" END
Modified: trunk/reactos/base/system/rundll32/lang/ja-JP.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/j... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/ja-JP.rc (original) +++ trunk/reactos/base/system/rundll32/lang/ja-JP.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary Í '%s' ÌÇÝÝɸsµÜµ½B" -IDS_MissingEntry, "Gg |Cgª èܹñ:%s\n( %s )" + IDS_DllNotLoaded, "LoadLibrary Í '%s' ÌÇÝÝɸsµÜµ½B" + IDS_MissingEntry, "Gg |Cgª èܹñ:%s\n( %s )" END
Modified: trunk/reactos/base/system/rundll32/lang/lt-LT.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/l... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/lt-LT.rc (original) +++ trunk/reactos/base/system/rundll32/lang/lt-LT.rc Sat Feb 16 20:28:58 2008 @@ -5,6 +5,6 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary nepavyko paleisti '%s'" -IDS_MissingEntry, "Trûksta áëjimo taðko:%s\nIn %s" + IDS_DllNotLoaded, "LoadLibrary nepavyko paleisti '%s'" + IDS_MissingEntry, "Trûksta áëjimo taðko:%s\nIn %s" END
Modified: trunk/reactos/base/system/rundll32/lang/nb-NO.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/n... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/nb-NO.rc (original) +++ trunk/reactos/base/system/rundll32/lang/nb-NO.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary mislykket å laste '%s'" -IDS_MissingEntry, "Mistet oppføring moment:%s\nIn %s" + IDS_DllNotLoaded, "LoadLibrary mislykket å laste '%s'" + IDS_MissingEntry, "Mistet oppføring moment:%s\nIn %s" END
Modified: trunk/reactos/base/system/rundll32/lang/nl-NL.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/n... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/nl-NL.rc (original) +++ trunk/reactos/base/system/rundll32/lang/nl-NL.rc Sat Feb 16 20:28:58 2008 @@ -1,13 +1,11 @@ #include "resource.h" /* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com * Translation done by Vertaald door Eric Janssen */
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary kon '%s' niet laden" -IDS_MissingEntry, "Entry point:%s\n niet gevonden In %s" + IDS_DllNotLoaded, "LoadLibrary kon '%s' niet laden" + IDS_MissingEntry, "Entry point:%s\n niet gevonden In %s" END
Modified: trunk/reactos/base/system/rundll32/lang/pl-PL.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/p... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/pl-PL.rc (original) +++ trunk/reactos/base/system/rundll32/lang/pl-PL.rc Sat Feb 16 20:28:58 2008 @@ -8,6 +8,6 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary nie móg³ za³adowaæ '%s'" -IDS_MissingEntry, "Brakuj¹cy punkt wejcia:%s\nW %s" + IDS_DllNotLoaded, "LoadLibrary nie móg³ za³adowaæ '%s'" + IDS_MissingEntry, "Brakuj¹cy punkt wejcia:%s\nW %s" END
Modified: trunk/reactos/base/system/rundll32/lang/pt-BR.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/p... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/pt-BR.rc (original) +++ trunk/reactos/base/system/rundll32/lang/pt-BR.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "Erro ao carregar '%s'" -IDS_MissingEntry, "Está faltando a entrada:%s\nem %s" + IDS_DllNotLoaded, "Erro ao carregar '%s'" + IDS_MissingEntry, "Está faltando a entrada:%s\nem %s" END
Modified: trunk/reactos/base/system/rundll32/lang/ru-RU.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/r... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/ru-RU.rc (original) +++ trunk/reactos/base/system/rundll32/lang/ru-RU.rc Sat Feb 16 20:28:58 2008 @@ -1,12 +1,8 @@ #include "resource.h" -/* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com - */
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó '%s'" -IDS_MissingEntry, "Íåâîçìîæíî íàéòè òî÷êó âõîäà: %s\nâ áèáëèîòåêå %s" + IDS_DllNotLoaded, "Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó '%s'" + IDS_MissingEntry, "Íåâîçìîæíî íàéòè òî÷êó âõîäà: %s\nâ áèáëèîòåêå %s" END
Modified: trunk/reactos/base/system/rundll32/lang/sk-SK.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/s... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/sk-SK.rc (original) +++ trunk/reactos/base/system/rundll32/lang/sk-SK.rc Sat Feb 16 20:28:58 2008 @@ -1,13 +1,11 @@ #include "resource.h" /* - * Moved all hardcoded strings to En.rc. - * By Magnus Olsen 2005 magnus@itkonsult-olsen.com * Slovak translation by Kario 2007 kario@szm.sk */
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "Naèítanie kninice zlyhalo pri pokus naèíta '%s'" -IDS_MissingEntry, "Chybný vstupný bod:%s\nv %s" + IDS_DllNotLoaded, "Naèítanie kninice zlyhalo pri pokus naèíta '%s'" + IDS_MissingEntry, "Chybný vstupný bod:%s\nv %s" END
Modified: trunk/reactos/base/system/rundll32/lang/th-TH.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/t... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/th-TH.rc (original) +++ trunk/reactos/base/system/rundll32/lang/th-TH.rc Sat Feb 16 20:28:58 2008 @@ -9,6 +9,6 @@ LANGUAGE LANG_THAI, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "¡ÒúÃèؤèÒÃкºà¡Ô´¼Ô´¾ÅÒ´ '%s'" -IDS_MissingEntry, "¡ÒÃà¢éÒËÒµÓá˹觼Դ¾ÅÒ´: %s\n%s" + IDS_DllNotLoaded, "¡ÒúÃèؤèÒÃкºà¡Ô´¼Ô´¾ÅÒ´ '%s'" + IDS_MissingEntry, "¡ÒÃà¢éÒËÒµÓá˹觼Դ¾ÅÒ´: %s\n%s" END
Modified: trunk/reactos/base/system/rundll32/lang/uk-UA.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/lang/u... ============================================================================== --- trunk/reactos/base/system/rundll32/lang/uk-UA.rc (original) +++ trunk/reactos/base/system/rundll32/lang/uk-UA.rc Sat Feb 16 20:28:58 2008 @@ -12,6 +12,6 @@
STRINGTABLE DISCARDABLE BEGIN -IDS_DllNotLoaded, "LoadLibrary íå âäàëîñÿ çàâàíòàæèòè '%s'" -IDS_MissingEntry, "Íåìîæëèâî çíàéòè òî÷êó âõîäó:%s\n á³áë³îòåö³ %s" + IDS_DllNotLoaded, "LoadLibrary íå âäàëîñÿ çàâàíòàæèòè '%s'" + IDS_MissingEntry, "Íåìîæëèâî çíàéòè òî÷êó âõîäó:%s\n á³áë³îòåö³ %s" END
Modified: trunk/reactos/base/system/rundll32/rundll32.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/rundll32/rundll... ============================================================================== --- trunk/reactos/base/system/rundll32/rundll32.c (original) +++ trunk/reactos/base/system/rundll32/rundll32.c Sat Feb 16 20:28:58 2008 @@ -60,176 +60,176 @@ // and is not intended to be used in any other program. LPTSTR *WINAPI CommandLineToArgv(LPCTSTR lpCmdLine, int *lpArgc) { - LPTSTR *argv, lpSrc, lpDest, lpArg; - int argc, nBSlash, nNames; - BOOL bInQuotes, bFirstChar; - - // If null was passed in for lpCmdLine, there are no arguments - if (!lpCmdLine) { - if (lpArgc) - *lpArgc = 0; - return 0; - } - - lpSrc = (LPTSTR)lpCmdLine; - // Skip spaces at beginning - while (*lpSrc == _T(' ') || *lpSrc == _T('\t')) - lpSrc++; - - // If command-line starts with null, there are no arguments - if (*lpSrc == 0) { - if (lpArgc) - *lpArgc = 0; - return 0; - } - - lpArg = lpSrc; - argc = 0; - nBSlash = 0; - bInQuotes = FALSE; - bFirstChar = TRUE; - nNames = 0; - - // Count the number of arguments - while (nNames < 4) { - if (*lpSrc == 0 || (*lpSrc == _T(',') && nNames == 2) || ((*lpSrc == _T(' ') || *lpSrc == _T('\t')) && !bInQuotes)) { - // Whitespace not enclosed in quotes signals the start of another argument - argc++; - - // Skip whitespace between arguments - while (*lpSrc == _T(' ') || *lpSrc == _T('\t') || (*lpSrc == _T(',') && nNames == 2)) - lpSrc++; - if (*lpSrc == 0) - break; - if (nNames >= 3) { - // Increment the count for the last argument - argc++; - break; - } - nBSlash = 0; - bFirstChar = TRUE; - continue; - } - else if (*lpSrc == _T('\')) { - // Count consecutive backslashes - nBSlash++; - bFirstChar = FALSE; - } - else if (*lpSrc == _T('"') && !(nBSlash & 1)) { - // Open or close quotes - bInQuotes = !bInQuotes; - nBSlash = 0; - } - else { - // Some other character - nBSlash = 0; - if (bFirstChar && ((*lpSrc != _T('/') && nNames <= 1) || nNames > 1)) - nNames++; - bFirstChar = FALSE; - } - lpSrc++; - } - - // Allocate space for the pointers in argv and the strings in one block - argv = (LPTSTR *)malloc(argc * sizeof(LPTSTR) + (_tcslen(lpArg) + 1) * sizeof(TCHAR)); - - if (!argv) { - // Memory allocation failed - if (lpArgc) - *lpArgc = 0; - return 0; - } - - lpSrc = lpArg; - lpDest = lpArg = (LPTSTR)(argv + argc); - argc = 0; - nBSlash = 0; - bInQuotes = FALSE; - bFirstChar = TRUE; - nNames = 0; - - // Fill the argument array - while (nNames < 4) { - if (*lpSrc == 0 || (*lpSrc == _T(',') && nNames == 2) || ((*lpSrc == _T(' ') || *lpSrc == _T('\t')) && !bInQuotes)) { - // Whitespace not enclosed in quotes signals the start of another argument - // Null-terminate argument - *lpDest++ = 0; - argv[argc++] = lpArg; - - // Skip whitespace between arguments - while (*lpSrc == _T(' ') || *lpSrc == _T('\t') || (*lpSrc == _T(',') && nNames == 2)) - lpSrc++; - if (*lpSrc == 0) - break; - lpArg = lpDest; - if (nNames >= 3) { - // Copy the rest of the command-line to the last argument - argv[argc++] = lpArg; - _tcscpy(lpArg,lpSrc); - break; - } - nBSlash = 0; - bFirstChar = TRUE; - continue; - } - else if (*lpSrc == _T('\')) { - *lpDest++ = _T('\'); - lpSrc++; - - // Count consecutive backslashes - nBSlash++; - bFirstChar = FALSE; - } - else if (*lpSrc == _T('"')) { - if (!(nBSlash & 1)) { - // If an even number of backslashes are before the quotes, - // the quotes don't go in the output - lpDest -= nBSlash / 2; - bInQuotes = !bInQuotes; - } - else { - // If an odd number of backslashes are before the quotes, - // output a quote - lpDest -= (nBSlash + 1) / 2; - *lpDest++ = _T('"'); - bFirstChar = FALSE; - } - lpSrc++; - nBSlash = 0; - } - else { - // Copy other characters - if (bFirstChar && ((*lpSrc != _T('/') && nNames <= 1) || nNames > 1)) - nNames++; - *lpDest++ = *lpSrc++; - nBSlash = 0; - bFirstChar = FALSE; - } - } - - if (lpArgc) - *lpArgc = argc; - return argv; + LPTSTR *argv, lpSrc, lpDest, lpArg; + int argc, nBSlash, nNames; + BOOL bInQuotes, bFirstChar; + + // If null was passed in for lpCmdLine, there are no arguments + if (!lpCmdLine) { + if (lpArgc) + *lpArgc = 0; + return 0; + } + + lpSrc = (LPTSTR)lpCmdLine; + // Skip spaces at beginning + while (*lpSrc == _T(' ') || *lpSrc == _T('\t')) + lpSrc++; + + // If command-line starts with null, there are no arguments + if (*lpSrc == 0) { + if (lpArgc) + *lpArgc = 0; + return 0; + } + + lpArg = lpSrc; + argc = 0; + nBSlash = 0; + bInQuotes = FALSE; + bFirstChar = TRUE; + nNames = 0; + + // Count the number of arguments + while (nNames < 4) { + if (*lpSrc == 0 || (*lpSrc == _T(',') && nNames == 2) || ((*lpSrc == _T(' ') || *lpSrc == _T('\t')) && !bInQuotes)) { + // Whitespace not enclosed in quotes signals the start of another argument + argc++; + + // Skip whitespace between arguments + while (*lpSrc == _T(' ') || *lpSrc == _T('\t') || (*lpSrc == _T(',') && nNames == 2)) + lpSrc++; + if (*lpSrc == 0) + break; + if (nNames >= 3) { + // Increment the count for the last argument + argc++; + break; + } + nBSlash = 0; + bFirstChar = TRUE; + continue; + } + else if (*lpSrc == _T('\')) { + // Count consecutive backslashes + nBSlash++; + bFirstChar = FALSE; + } + else if (*lpSrc == _T('"') && !(nBSlash & 1)) { + // Open or close quotes + bInQuotes = !bInQuotes; + nBSlash = 0; + } + else { + // Some other character + nBSlash = 0; + if (bFirstChar && ((*lpSrc != _T('/') && nNames <= 1) || nNames > 1)) + nNames++; + bFirstChar = FALSE; + } + lpSrc++; + } + + // Allocate space for the pointers in argv and the strings in one block + argv = (LPTSTR *)malloc(argc * sizeof(LPTSTR) + (_tcslen(lpArg) + 1) * sizeof(TCHAR)); + + if (!argv) { + // Memory allocation failed + if (lpArgc) + *lpArgc = 0; + return 0; + } + + lpSrc = lpArg; + lpDest = lpArg = (LPTSTR)(argv + argc); + argc = 0; + nBSlash = 0; + bInQuotes = FALSE; + bFirstChar = TRUE; + nNames = 0; + + // Fill the argument array + while (nNames < 4) { + if (*lpSrc == 0 || (*lpSrc == _T(',') && nNames == 2) || ((*lpSrc == _T(' ') || *lpSrc == _T('\t')) && !bInQuotes)) { + // Whitespace not enclosed in quotes signals the start of another argument + // Null-terminate argument + *lpDest++ = 0; + argv[argc++] = lpArg; + + // Skip whitespace between arguments + while (*lpSrc == _T(' ') || *lpSrc == _T('\t') || (*lpSrc == _T(',') && nNames == 2)) + lpSrc++; + if (*lpSrc == 0) + break; + lpArg = lpDest; + if (nNames >= 3) { + // Copy the rest of the command-line to the last argument + argv[argc++] = lpArg; + _tcscpy(lpArg,lpSrc); + break; + } + nBSlash = 0; + bFirstChar = TRUE; + continue; + } + else if (*lpSrc == _T('\')) { + *lpDest++ = _T('\'); + lpSrc++; + + // Count consecutive backslashes + nBSlash++; + bFirstChar = FALSE; + } + else if (*lpSrc == _T('"')) { + if (!(nBSlash & 1)) { + // If an even number of backslashes are before the quotes, + // the quotes don't go in the output + lpDest -= nBSlash / 2; + bInQuotes = !bInQuotes; + } + else { + // If an odd number of backslashes are before the quotes, + // output a quote + lpDest -= (nBSlash + 1) / 2; + *lpDest++ = _T('"'); + bFirstChar = FALSE; + } + lpSrc++; + nBSlash = 0; + } + else { + // Copy other characters + if (bFirstChar && ((*lpSrc != _T('/') && nNames <= 1) || nNames > 1)) + nNames++; + *lpDest++ = *lpSrc++; + nBSlash = 0; + bFirstChar = FALSE; + } + } + + if (lpArgc) + *lpArgc = argc; + return argv; }
void GetModuleTitle(void) { - LPTSTR lpStr; - - GetModuleFileName(0,ModuleFileName,MAX_PATH); - ModuleTitle = ModuleFileName; - - for (lpStr = ModuleFileName;*lpStr;lpStr++) { - if (*lpStr == _T('\')) - ModuleTitle = lpStr+1; - } - - for (lpStr = ModuleTitle;*lpStr;lpStr++) { - if (_tcsicmp(lpStr,_T(".exe"))==0) - break; - } - - *lpStr = 0; + LPTSTR lpStr; + + GetModuleFileName(0,ModuleFileName,MAX_PATH); + ModuleTitle = ModuleFileName; + + for (lpStr = ModuleFileName;*lpStr;lpStr++) { + if (*lpStr == _T('\')) + ModuleTitle = lpStr+1; + } + + for (lpStr = ModuleTitle;*lpStr;lpStr++) { + if (_tcsicmp(lpStr,_T(".exe"))==0) + break; + } + + *lpStr = 0; }
// The macro ConvertToWideChar takes a tstring parameter and returns @@ -245,15 +245,15 @@
LPWSTR ConvertToWideChar(LPCSTR lpString) { - LPWSTR lpwString; - size_t nStrLen; - - nStrLen = strlen(lpString) + 1; - - lpwString = (LPWSTR)malloc(nStrLen * sizeof(WCHAR)); - MultiByteToWideChar(0,0,lpString,nStrLen,lpwString,nStrLen); - - return lpwString; + LPWSTR lpwString; + size_t nStrLen; + + nStrLen = strlen(lpString) + 1; + + lpwString = (LPWSTR)malloc(nStrLen * sizeof(WCHAR)); + MultiByteToWideChar(0,0,lpString,nStrLen,lpwString,nStrLen); + + return lpwString; }
#define FreeConvertedWideChar(lpwString) free(lpwString) @@ -281,47 +281,54 @@ // for the returned string when it is no longer needed. LPSTR DuplicateToMultiByte(LPCTSTR lptString, size_t nBufferSize) { - LPSTR lpString; - size_t nStrLen; - - nStrLen = _tcslen(lptString) + 1; - if (nBufferSize == 0) nBufferSize = nStrLen; - - lpString = (LPSTR)malloc(nBufferSize); + LPSTR lpString; + size_t nStrLen; + + nStrLen = _tcslen(lptString) + 1; + if (nBufferSize == 0) nBufferSize = nStrLen; + + lpString = (LPSTR)malloc(nBufferSize); #ifdef UNICODE - WideCharToMultiByte(0,0,lptString,nStrLen,lpString,nBufferSize,0,0); + WideCharToMultiByte(0,0,lptString,nStrLen,lpString,nBufferSize,0,0); #else - strncpy(lpString,lptString,nBufferSize); -#endif - - return lpString; + strncpy(lpString,lptString,nBufferSize); +#endif + + return lpString; }
LRESULT CALLBACK EmptyWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - return DefWindowProc(hWnd, uMsg, wParam, lParam); + return DefWindowProc(hWnd, uMsg, wParam, lParam); }
// Registers a minimal window class for passing to the dll function -ATOM RegisterBlankClass(HINSTANCE hInstance) -{ - WNDCLASSEX wcex; - - wcex.cbSize = sizeof(WNDCLASSEX); - - wcex.style = 0; - wcex.lpfnWndProc = EmptyWindowProc; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = 0; - wcex.hInstance = hInstance; - wcex.hIcon = 0; - wcex.hCursor = 0; - wcex.hbrBackground = 0; - wcex.lpszMenuName = 0; - wcex.lpszClassName = rundll32_wclass; - wcex.hIconSm = 0; - - return RegisterClassEx(&wcex); +ATOM RegisterBlankClass(HINSTANCE hInstance, HINSTANCE hPrevInstance) +{ + WNDCLASSEX wcex; + ATOM Ret; + + if (!hPrevInstance) + { + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = 0; + wcex.lpfnWndProc = EmptyWindowProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = 0; + wcex.hCursor = 0; + wcex.hbrBackground = 0; + wcex.lpszMenuName = 0; + wcex.lpszClassName = rundll32_wclass; + wcex.hIconSm = 0; + } + + Ret = RegisterClassEx(&wcex); + if (!Ret) return FALSE; + + return Ret; }
int WINAPI WinMain( @@ -331,149 +338,152 @@ int nCmdShow ) { - int argc; - TCHAR szMsg[RC_STRING_MAX_SIZE]; - - LPTSTR *argv; - LPTSTR lptCmdLine,lptDllName,lptFuncName,lptMsgBuffer; - LPSTR lpFuncName,lpaCmdLine; - LPWSTR lpwCmdLine; - HMODULE hDll; - DllWinMainW fnDllWinMainW; - DllWinMainA fnDllWinMainA; - HWND hWindow; - int nRetVal,i; - size_t nStrLen; - - // Get command-line in argc-argv format - argv = CommandLineToArgv(GetCommandLine(),&argc); - - // Skip all beginning arguments starting with a slash (/) - for (i = 1; i < argc; i++) - if (*argv[i] != _T('/')) break; - - // If no dll was specified, there is nothing to do - if (i >= argc) { - if (argv) free(argv); - return 0; - } - - lptDllName = argv[i++]; - - // The next argument, which specifies the name of the dll function, - // can either have a comma between it and the dll filename or a space. - // Using a comma here is the preferred method - if (i < argc) - lptFuncName = argv[i++]; - else - lptFuncName = _T(""); - - // If no function name was specified, nothing needs to be done - if (!*lptFuncName) { - if (argv) free(argv); - return 0; - } - - // The rest of the arguments will be passed to dll function - if (i < argc) - lptCmdLine = argv[i]; - else - lptCmdLine = _T(""); - - nRetVal = 0; - - // Everything is all setup, so load the dll now - hDll = LoadLibrary(lptDllName); - if (hDll) { - nStrLen = _tcslen(lptFuncName); - // Make a non-unicode version of the function name, - // since that is all GetProcAddress accepts - lpFuncName = DuplicateToMultiByte(lptFuncName,nStrLen + 2); + int argc; + TCHAR szMsg[RC_STRING_MAX_SIZE]; + + LPTSTR *argv; + LPTSTR lptCmdLine,lptDllName,lptFuncName,lptMsgBuffer; + LPSTR lpFuncName,lpaCmdLine; + LPWSTR lpwCmdLine; + HMODULE hDll; + DllWinMainW fnDllWinMainW; + DllWinMainA fnDllWinMainA; + HWND hWindow; + int nRetVal,i; + size_t nStrLen; + + // Get command-line in argc-argv format + argv = CommandLineToArgv(GetCommandLine(),&argc); + + // Skip all beginning arguments starting with a slash (/) + for (i = 1; i < argc; i++) + if (*argv[i] != _T('/')) break; + + // If no dll was specified, there is nothing to do + if (i >= argc) { + if (argv) free(argv); + return 0; + } + + lptDllName = argv[i++]; + + // The next argument, which specifies the name of the dll function, + // can either have a comma between it and the dll filename or a space. + // Using a comma here is the preferred method + if (i < argc) + lptFuncName = argv[i++]; + else + lptFuncName = _T(""); + + // If no function name was specified, nothing needs to be done + if (!*lptFuncName) { + if (argv) free(argv); + return 0; + } + + // The rest of the arguments will be passed to dll function + if (i < argc) + lptCmdLine = argv[i]; + else + lptCmdLine = _T(""); + + nRetVal = 0; + + // Everything is all setup, so load the dll now + hDll = LoadLibrary(lptDllName); + if (hDll) { + nStrLen = _tcslen(lptFuncName); + // Make a non-unicode version of the function name, + // since that is all GetProcAddress accepts + lpFuncName = DuplicateToMultiByte(lptFuncName,nStrLen + 2);
#ifdef UNICODE - lpFuncName[nStrLen] = 'W'; - lpFuncName[nStrLen+1] = 0; - // Get address of unicode version of the dll function if it exists - fnDllWinMainW = (DllWinMainW)GetProcAddress(hDll,lpFuncName); - fnDllWinMainA = 0; - if (!fnDllWinMainW) { - // If no unicode function was found, get the address of the non-unicode function - lpFuncName[nStrLen] = 'A'; - fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); - if (!fnDllWinMainA) { - // If first non-unicode function was not found, get the address - // of the other non-unicode function - lpFuncName[nStrLen] = 0; - fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); - } - } + lpFuncName[nStrLen] = 'W'; + lpFuncName[nStrLen+1] = 0; + // Get address of unicode version of the dll function if it exists + fnDllWinMainW = (DllWinMainW)GetProcAddress(hDll,lpFuncName); + fnDllWinMainA = 0; + if (!fnDllWinMainW) { + // If no unicode function was found, get the address of the non-unicode function + lpFuncName[nStrLen] = 'A'; + fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); + if (!fnDllWinMainA) { + // If first non-unicode function was not found, get the address + // of the other non-unicode function + lpFuncName[nStrLen] = 0; + fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); + } + } #else - // Get address of non-unicode version of the dll function if it exists - fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); - fnDllWinMainW = 0; - if (!fnDllWinMainA) { - // If first non-unicode function was not found, get the address - // of the other non-unicode function - lpFuncName[nStrLen] = 'A'; - lpFuncName[nStrLen+1] = 0; - fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); - if (!fnDllWinMainA) { - // If non-unicode function was not found, get the address of the unicode function - lpFuncName[nStrLen] = 'W'; - fnDllWinMainW = (DllWinMainW)GetProcAddress(hDll,lpFuncName); - } - } -#endif - - free(lpFuncName); - - RegisterBlankClass(hInstance); - // Create a window so we can pass a window handle to - // the dll function; this is required - hWindow = CreateWindowEx(0,rundll32_wclass,rundll32_wtitle,0,CW_USEDEFAULT,0,CW_USEDEFAULT,0,0,0,hInstance,0); - - if (fnDllWinMainW) { - // Convert the command-line string to unicode and call the dll function - lpwCmdLine = ConvertToWideChar(lptCmdLine); - nRetVal = fnDllWinMainW(hWindow,hInstance,lpwCmdLine,nCmdShow); - FreeConvertedWideChar(lpwCmdLine); - } - else if (fnDllWinMainA) { - // Convert the command-line string to ansi and call the dll function - lpaCmdLine = ConvertToMultiByte(lptCmdLine); - nRetVal = fnDllWinMainA(hWindow,hInstance,lpaCmdLine,nCmdShow); - FreeConvertedMultiByte(lpaCmdLine); - } - else { - // The specified dll function was not found; display an error message - GetModuleTitle(); + // Get address of non-unicode version of the dll function if it exists + fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); + fnDllWinMainW = 0; + if (!fnDllWinMainA) { + // If first non-unicode function was not found, get the address + // of the other non-unicode function + lpFuncName[nStrLen] = 'A'; + lpFuncName[nStrLen+1] = 0; + fnDllWinMainA = (DllWinMainA)GetProcAddress(hDll,lpFuncName); + if (!fnDllWinMainA) { + // If non-unicode function was not found, get the address of the unicode function + lpFuncName[nStrLen] = 'W'; + fnDllWinMainW = (DllWinMainW)GetProcAddress(hDll,lpFuncName); + } + } +#endif + + free(lpFuncName); + + if (!RegisterBlankClass(hInstance, hPrevInstance)) + { + return 0; + } + // Create a window so we can pass a window handle to + // the dll function; this is required + hWindow = CreateWindowEx(0,rundll32_wclass,rundll32_wtitle,0,CW_USEDEFAULT,0,CW_USEDEFAULT,0,0,0,hInstance,0); + + if (fnDllWinMainW) { + // Convert the command-line string to unicode and call the dll function + lpwCmdLine = ConvertToWideChar(lptCmdLine); + nRetVal = fnDllWinMainW(hWindow,hInstance,lpwCmdLine,nCmdShow); + FreeConvertedWideChar(lpwCmdLine); + } + else if (fnDllWinMainA) { + // Convert the command-line string to ansi and call the dll function + lpaCmdLine = ConvertToMultiByte(lptCmdLine); + nRetVal = fnDllWinMainA(hWindow,hInstance,lpaCmdLine,nCmdShow); + FreeConvertedMultiByte(lpaCmdLine); + } + else { + // The specified dll function was not found; display an error message + GetModuleTitle(); LoadString( GetModuleHandle(NULL), IDS_MissingEntry, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
- lptMsgBuffer = (LPTSTR)malloc((_tcslen(szMsg) - 4 + _tcslen(lptFuncName) + _tcslen(lptDllName) + 1) * sizeof(TCHAR)); - _stprintf(lptMsgBuffer,szMsg,lptFuncName,lptDllName); - MessageBox(0,lptMsgBuffer,ModuleTitle,MB_ICONERROR); - free(lptMsgBuffer); - } - - DestroyWindow(hWindow); - UnregisterClass(rundll32_wclass,hInstance); - - // The dll function has finished executing, so unload it - FreeLibrary(hDll); - } - else { - // The dll could not be loaded; display an error message - GetModuleTitle(); - LoadString( GetModuleHandle(NULL), IDS_DllNotLoaded, (LPTSTR) szMsg,RC_STRING_MAX_SIZE); - - lptMsgBuffer = (LPTSTR)malloc((_tcslen(szMsg) - 2 + _tcslen(lptDllName) + 1) * sizeof(TCHAR)); - _stprintf(lptMsgBuffer,szMsg,lptDllName); - - MessageBox(0,lptMsgBuffer,ModuleTitle,MB_ICONERROR); - free(lptMsgBuffer); - } - - if (argv) free(argv); - return nRetVal; -} - + lptMsgBuffer = (LPTSTR)malloc((_tcslen(szMsg) - 4 + _tcslen(lptFuncName) + _tcslen(lptDllName) + 1) * sizeof(TCHAR)); + _stprintf(lptMsgBuffer,szMsg,lptFuncName,lptDllName); + MessageBox(0,lptMsgBuffer,ModuleTitle,MB_ICONERROR); + free(lptMsgBuffer); + } + + DestroyWindow(hWindow); + UnregisterClass(rundll32_wclass,hInstance); + + // The dll function has finished executing, so unload it + FreeLibrary(hDll); + } + else { + // The dll could not be loaded; display an error message + GetModuleTitle(); + LoadString( GetModuleHandle(NULL), IDS_DllNotLoaded, (LPTSTR) szMsg,RC_STRING_MAX_SIZE); + + lptMsgBuffer = (LPTSTR)malloc((_tcslen(szMsg) - 2 + _tcslen(lptDllName) + 1) * sizeof(TCHAR)); + _stprintf(lptMsgBuffer,szMsg,lptDllName); + + MessageBox(0,lptMsgBuffer,ModuleTitle,MB_ICONERROR); + free(lptMsgBuffer); + } + + if (argv) free(argv); + return nRetVal; +} +