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

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

unix.superglobalmegacorp.com

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