Annotation of truecrypt/common/cmdline.c, revision 1.1.1.10

1.1.1.10! root        1: /*
        !             2:  Legal Notice: The source code contained in this file has been derived from
        !             3:  the source code of Encryption for the Masses 2.02a, which is Copyright (c)
        !             4:  Paul Le Roux and which is covered by the 'License Agreement for Encryption
        !             5:  for the Masses'. Modifications and additions to that source code contained
        !             6:  in this file are Copyright (c) TrueCrypt Foundation and are covered by the
        !             7:  TrueCrypt License 2.2 the full text of which is contained in the file
        !             8:  License.txt included in TrueCrypt binary and source code distribution
        !             9:  packages. */
1.1       root       10: 
1.1.1.6   root       11: #include "Tcdefs.h"
1.1       root       12: 
                     13: #include <malloc.h>
                     14: #include <ctype.h>
1.1.1.6   root       15: #include "Cmdline.h"
1.1       root       16: 
1.1.1.6   root       17: #include "Resource.h"
                     18: #include "Crypto.h"
                     19: #include "Apidrvr.h"
                     20: #include "Dlgcode.h"
                     21: #include "Language.h"
1.1       root       22: 
                     23: /* Except in response to the WM_INITDIALOG message, the dialog box procedure
                     24:    should return nonzero if it processes the message, and zero if it does
                     25:    not. - see DialogProc */
                     26: BOOL WINAPI
                     27: CommandHelpDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
                     28: {
                     29:        if (lParam);            /* remove warning */
                     30:        if (wParam);            /* remove warning */
                     31: 
                     32:        switch (msg)
                     33:        {
                     34:        case WM_INITDIALOG:
                     35:                {
                     36:                char * tmp = err_malloc(8192);
1.1.1.7   root       37:                char tmp2[MAX_PATH * 2];
1.1       root       38:                argumentspec *as;
                     39:                int i;
                     40: 
1.1.1.6   root       41:                LocalizeDialog (hwndDlg, "IDD_COMMANDHELP_DLG");
1.1       root       42: 
                     43:                as = (argumentspec*) lParam;
                     44: 
                     45:                *tmp = 0;
                     46: 
1.1.1.4   root       47:                strcpy (tmp, "Command line options:\n\n");
1.1       root       48:                for (i = 0; i < as->arg_cnt; i ++)
                     49:                {
1.1.1.4   root       50:                        sprintf(tmp2, "%s\t%s\n", as->args[i].short_name, as->args[i].long_name);
1.1       root       51:                        strcat(tmp,tmp2);
                     52:                }
                     53: 
                     54:                SetWindowText (GetDlgItem (hwndDlg, IDC_COMMANDHELP_TEXT), (char*) tmp);
                     55:                return 1;
                     56:                }
                     57: 
                     58:        case WM_COMMAND:
                     59:                EndDialog (hwndDlg, IDOK);
                     60:                return 1;
                     61:        case WM_CLOSE:
                     62:                EndDialog (hwndDlg, 0);
                     63:                return 1;
                     64:        }
                     65: 
                     66:        return 0;
                     67: }
                     68: 
                     69: int
                     70: Win32CommandLine (char *lpszCommandLine, char ***lpszArgs)
                     71: {
                     72:        int i = 0, k = 0, x = 0, nValid = TRUE;
                     73:        int nLen = strlen (lpszCommandLine);
                     74:        int nArrSize = 16;
1.1.1.7   root       75:        char szTmp[MAX_PATH * 2];
1.1       root       76: 
                     77:        *lpszArgs = malloc (sizeof (char *)* nArrSize);
                     78: 
                     79:        if (*lpszArgs == NULL)
                     80:                return 0;
                     81: 
                     82:        while (i < nLen)
                     83:        {
                     84:                if (lpszCommandLine[i] == ' ')
                     85:                {
                     86:                        if (k > 0)
                     87:                        {
                     88:                                szTmp[k] = 0;
                     89:                                (*lpszArgs)[x] = _strdup (szTmp);
                     90:                                if ((*lpszArgs)[x] == NULL)
                     91:                                {
                     92:                                        free (*lpszArgs);
                     93:                                        return 0;
                     94:                                }
                     95:                                x++;
                     96:                                k = 0;
                     97:                                if (x == nArrSize)
                     98:                                {
                     99:                                        break;
                    100:                                }
                    101:                        }
                    102:                        i++;
                    103:                        continue;
                    104:                }
                    105:                if (lpszCommandLine[i] == '"')
                    106:                {
                    107:                        i++;
                    108:                        while (i < nLen)
                    109:                        {
                    110:                                if (lpszCommandLine[i] == '"')
                    111:                                        break;
                    112:                                if (k < sizeof (szTmp))
                    113:                                        szTmp[k++] = lpszCommandLine[i++];
                    114:                                else
                    115:                                {
                    116:                                        free (*lpszArgs);
                    117:                                        return 0;
                    118:                                }
                    119:                        }
                    120: 
                    121:                        if (lpszCommandLine[i] != '"')
                    122:                        {
                    123:                                nValid = FALSE;
                    124:                                break;
                    125:                        }
                    126:                }
                    127:                else
                    128:                {
                    129:                        if (k < sizeof (szTmp))
                    130:                                szTmp[k++] = lpszCommandLine[i];
                    131:                        else
                    132:                        {
                    133:                                free (*lpszArgs);
                    134:                                return 0;
                    135:                        }
                    136:                }
                    137: 
                    138:                i++;
                    139:        }
                    140: 
                    141:        if (nValid == FALSE)
                    142:        {
                    143:                free (*lpszArgs);
                    144:                return 0;
                    145:        }
                    146:        else if (k > 0)
                    147:        {
                    148:                szTmp[k] = 0;
                    149:                (*lpszArgs)[x] = _strdup (szTmp);
                    150:                if ((*lpszArgs)[x] == NULL)
                    151:                {
                    152:                        free (*lpszArgs);
                    153:                        return 0;
                    154:                }
                    155:                x++;
                    156:                k = 0;
                    157:        }
                    158:        if (!x)
                    159:        {
                    160:                free (*lpszArgs);
                    161:                return 0;
                    162:        }
                    163:        return x;
                    164: }
                    165: 
                    166: int
                    167: GetArgSepPosOffset (char *lpszArgument)
                    168: {
                    169:        if (lpszArgument[0] == '/')
                    170:                return 1;
                    171:        else if (lpszArgument[0] == '-' && lpszArgument[1] == '-')
                    172:                return 2;
                    173:        else if (lpszArgument[0] == '-')
                    174:                return 1;
                    175:        else
                    176:                return 0;
                    177: }
                    178: 
                    179: int
                    180: GetArgumentID (argumentspec *as, char *lpszArgument, int *nArgPos)
                    181: {
1.1.1.7   root      182:        char szTmp[MAX_PATH * 2];
1.1       root      183:        int i;
                    184: 
                    185:        i = strlen (lpszArgument);
                    186:        szTmp[i] = 0;
                    187:        while (--i >= 0)
                    188:        {
                    189:                szTmp[i] = (char) tolower (lpszArgument[i]);
                    190:        }
                    191: 
                    192:        for (i = 0; i < as->arg_cnt; i++)
                    193:        {
                    194:                size_t k;
                    195: 
                    196:                k = strlen (as->args[i].long_name);
                    197:                if (memcmp (as->args[i].long_name, szTmp, k * sizeof (char)) == 0)
                    198:                {
                    199:                        int x;
                    200:                        for (x = i + 1; x < as->arg_cnt; x++)
                    201:                        {
                    202:                                size_t m;
                    203: 
                    204:                                m = strlen (as->args[x].long_name);
                    205:                                if (memcmp (as->args[x].long_name, szTmp, m * sizeof (char)) == 0)
                    206:                                {
                    207:                                        break;
                    208:                                }
                    209:                        }
                    210: 
                    211:                        if (x == as->arg_cnt)
                    212:                        {
                    213:                                if (strlen (lpszArgument) != k)
                    214:                                        *nArgPos = k;
                    215:                                else
                    216:                                        *nArgPos = 0;
                    217:                                return as->args[i].short_name[1];
                    218:                        }
                    219:                }
                    220:        }
                    221: 
                    222:        for (i = 0; i < as->arg_cnt; i++)
                    223:        {
                    224:                size_t k;
                    225: 
                    226:                k = strlen (as->args[i].short_name);
                    227:                if (memcmp (as->args[i].short_name, szTmp, k * sizeof (char)) == 0)
                    228:                {
                    229:                        int x;
                    230:                        for (x = i + 1; x < as->arg_cnt; x++)
                    231:                        {
                    232:                                size_t m;
                    233: 
                    234:                                m = strlen (as->args[x].short_name);
                    235:                                if (memcmp (as->args[x].short_name, szTmp, m * sizeof (char)) == 0)
                    236:                                {
                    237:                                        break;
                    238:                                }
                    239:                        }
                    240: 
                    241:                        if (x == as->arg_cnt)
                    242:                        {
                    243:                                if (strlen (lpszArgument) != k)
                    244:                                        *nArgPos = k;
                    245:                                else
                    246:                                        *nArgPos = 0;
                    247:                                return as->args[i].short_name[1];
                    248:                        }
                    249:                }
                    250:        }
                    251: 
                    252: 
                    253:        return -1;
                    254: }
                    255: 
                    256: int
                    257: GetArgumentValue (char **lpszCommandLineArgs, int nArgPos, int *nArgIdx,
                    258:                  int nNoCommandLineArgs, char *lpszValue, int nValueSize)
                    259: {
                    260:        *lpszValue = 0;
                    261: 
                    262:        if (nArgPos)
                    263:        {
                    264:                /* Handles the case of no space between parameter code and
                    265:                   value */
1.1.1.5   root      266:                strncpy (lpszValue, &lpszCommandLineArgs[*nArgIdx][nArgPos], nValueSize);
1.1       root      267:                lpszValue[nValueSize - 1] = 0;
                    268:                return HAS_ARGUMENT;
                    269:        }
1.1.1.5   root      270:        else if (*nArgIdx + 1 < nNoCommandLineArgs)
1.1       root      271:        {
                    272:                int x = GetArgSepPosOffset (lpszCommandLineArgs[*nArgIdx + 1]);
                    273:                if (x == 0)
                    274:                {
                    275:                        /* Handles the case of space between parameter code
                    276:                           and value */
1.1.1.5   root      277:                        strncpy (lpszValue, &lpszCommandLineArgs[*nArgIdx + 1][x], nValueSize);
1.1       root      278:                        lpszValue[nValueSize - 1] = 0;
                    279:                        (*nArgIdx)++;
                    280:                        return HAS_ARGUMENT;
                    281:                }
                    282:        }
                    283: 
                    284:        return HAS_NO_ARGUMENT;
                    285: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.