1/*
2 * The Initial Developer of the Original Code is International
3 * Business Machines Corporation. Portions created by IBM
4 * Corporation are Copyright (C) 2005, 2006 International Business
5 * Machines Corporation. All Rights Reserved.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the Common Public License as published by
9 * IBM Corporation; either version 1 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * Common Public License for more details.
16 *
17 * You should have received a copy of the Common Public License
18 * along with this program; if not, a copy can be viewed at
19 * http://www.opensource.org/licenses/cpl1.0.php.
20 */
21
22#ifndef __TPM_UTILS_H
23#define __TPM_UTILS_H
24
25#ifdef ENABLE_NLS
26#include <libintl.h>
27#include <locale.h>
28#define _(String) gettext(String)
29#define N_(String) String
30#else
31#define setlocale(category, local)
32#define bindtextdomain(package, localedir)
33#define textdomain(package);
34#define _(String) String
35#define N_(String) String
36#endif
37
38#include <string.h>
39#include <stdio.h>
40#include <stdlib.h>
41#include <stdarg.h>
42//#define GNU_SOURCE
43#include <getopt.h>
44
45#ifndef BOOL
46#define BOOL int
47#endif
48
49#ifndef FALSE
50#define FALSE 0
51#endif
52
53#ifndef TRUE
54#define TRUE (!FALSE)
55#endif
56
57#define CMD_VERSION             PACKAGE_VERSION
58
59#define LOG_NONE                _("none")
60#define LOG_LEVEL_NONE          0
61#define LOG_ERROR               _("error")
62#define LOG_LEVEL_ERROR         1
63#define LOG_INFO                _("info")
64#define LOG_LEVEL_INFO          2
65#define LOG_DEBUG               _("debug")
66#define LOG_LEVEL_DEBUG         3
67
68#ifdef __GNUC__
69#define __no_optimize __attribute__((optimize("O0")))
70#else
71#define __no_optimize
72#endif
73
74void * __no_optimize __memset(void *s, int c, size_t n);
75
76typedef int (*CmdOptParser)( const int aOpt, const char *aOptArg );
77typedef void (*CmdHelpFunction)( const char *aCmd );
78
79void initIntlSys( );
80
81int genericOptHandler( int a_iNumArgs, char **a_pszArgs,
82		       const char *a_pszShortOpts,
83		       struct option *a_psLongOpts, int a_iNumOpts,
84		       CmdOptParser, CmdHelpFunction );
85char *getPlainPasswd( const char* a_pszPrompt, BOOL a_bConfirm );
86#ifdef TSS_LIB_IS_12
87char *_getPasswd12( const char *a_pszPrompt, int *a_iLen, BOOL a_bConfirm, BOOL a_uUseUnicode);
88char *getPasswd12( const char *a_pszPrompt, int *a_iLen, BOOL a_bConfirm );
89
90#define _GETPASSWD	_getPasswd12
91#define GETPASSWD	getPasswd12
92#else
93char *getPasswd( const char *a_pszPrompt, int *a_iLen, BOOL a_bConfirm );
94
95#define _GETPASSWD	_getPasswd
96#define GETPASSWD	getPasswd
97#endif
98char *_getPasswd( const char *a_pszPrompt, int *a_iLen, BOOL a_bConfirm, BOOL a_bUseUnicode);
99void  shredPasswd( char *a_pszPasswd );
100char *getReply( const char *a_pszPrompt, int a_iMaxLen );
101
102extern int iLogLevel;
103extern BOOL useUnicode;
104
105int logHex( int a_iLen, void *a_pData );
106int logMsg( const char *a_pszFormat, ... );
107int logDebug( const char *a_pszFormat, ... );
108int logInfo( const char *a_pszFormat, ... );
109int logError( const char *a_pszFormat, ... );
110
111int logProcess( FILE *a_pStream, const char *a_pszFormat, va_list a_vaArgs );
112int logIt( FILE *a_pStream, const char *a_pszFormat, va_list a_vaArgs );
113
114void  logSuccess( const char *a_pszCmd );
115void  logCmdOption( const char *a_pszOption, const char *a_pszDescr );
116void  logUnicodeCmdOption( );
117void  logGenericOptions( );
118void  logCmdHelp( const char *a_pszCmd );
119void  logCmdHelpEx( const char *a_pszCmd, char *a_pszArgs[], char *a_pszArgDescs[] );
120char *logBool( BOOL aValue );
121void  logOwnerPassCmdOption( );
122void  logNVIndexCmdOption( );
123
124#endif
125