mirror of
https://github.com/LongSoft/UEFITool.git
synced 2024-11-23 00:18:23 +08:00
116 lines
4.9 KiB
C
116 lines
4.9 KiB
C
|
/*
|
||
|
* This source file is part of the bstring string library. This code was
|
||
|
* written by Paul Hsieh in 2002-2015, and is covered by the BSD open source
|
||
|
* license and the GPL. Refer to the accompanying documentation for details
|
||
|
* on usage and license.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* bstraux.h
|
||
|
*
|
||
|
* This file is not a necessary part of the core bstring library itself, but
|
||
|
* is just an auxilliary module which includes miscellaneous or trivial
|
||
|
* functions.
|
||
|
*/
|
||
|
|
||
|
#ifndef BSTRAUX_INCLUDE
|
||
|
#define BSTRAUX_INCLUDE
|
||
|
|
||
|
#include <time.h>
|
||
|
#include "bstrlib.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* Safety mechanisms */
|
||
|
#define bstrDeclare(b) bstring (b) = NULL;
|
||
|
#define bstrFree(b) {if ((b) != NULL && (b)->slen >= 0 && (b)->mlen >= (b)->slen) { bdestroy (b); (b) = NULL; }}
|
||
|
|
||
|
/* Backward compatibilty with previous versions of Bstrlib */
|
||
|
#if !defined(BSTRLIB_REDUCE_NAMESPACE_POLLUTION)
|
||
|
#define bAssign(a,b) ((bassign)((a), (b)))
|
||
|
#define bSubs(b,pos,len,a,c) ((breplace)((b),(pos),(len),(a),(unsigned char)(c)))
|
||
|
#define bStrchr(b,c) ((bstrchr)((b), (c)))
|
||
|
#define bStrchrFast(b,c) ((bstrchr)((b), (c)))
|
||
|
#define bCatCstr(b,s) ((bcatcstr)((b), (s)))
|
||
|
#define bCatBlk(b,s,len) ((bcatblk)((b),(s),(len)))
|
||
|
#define bCatStatic(b,s) bcatStatic(b,s)
|
||
|
#define bTrunc(b,n) ((btrunc)((b), (n)))
|
||
|
#define bReplaceAll(b,find,repl,pos) ((bfindreplace)((b),(find),(repl),(pos)))
|
||
|
#define bUppercase(b) ((btoupper)(b))
|
||
|
#define bLowercase(b) ((btolower)(b))
|
||
|
#define bCaselessCmp(a,b) ((bstricmp)((a), (b)))
|
||
|
#define bCaselessNCmp(a,b,n) ((bstrnicmp)((a), (b), (n)))
|
||
|
#define bBase64Decode(b) (bBase64DecodeEx ((b), NULL))
|
||
|
#define bUuDecode(b) (bUuDecodeEx ((b), NULL))
|
||
|
#endif
|
||
|
|
||
|
/* Unusual functions */
|
||
|
extern struct bStream * bsFromBstr (const_bstring b);
|
||
|
extern bstring bTail (bstring b, int n);
|
||
|
extern bstring bHead (bstring b, int n);
|
||
|
extern int bSetCstrChar (bstring a, int pos, char c);
|
||
|
extern int bSetChar (bstring b, int pos, char c);
|
||
|
extern int bFill (bstring a, char c, int len);
|
||
|
extern int bReplicate (bstring b, int n);
|
||
|
extern int bReverse (bstring b);
|
||
|
extern int bInsertChrs (bstring b, int pos, int len, unsigned char c, unsigned char fill);
|
||
|
extern bstring bStrfTime (const char * fmt, const struct tm * timeptr);
|
||
|
#define bAscTime(t) (bStrfTime ("%c\n", (t)))
|
||
|
#define bCTime(t) ((t) ? bAscTime (localtime (t)) : NULL)
|
||
|
|
||
|
/* Spacing formatting */
|
||
|
extern int bJustifyLeft (bstring b, int space);
|
||
|
extern int bJustifyRight (bstring b, int width, int space);
|
||
|
extern int bJustifyMargin (bstring b, int width, int space);
|
||
|
extern int bJustifyCenter (bstring b, int width, int space);
|
||
|
|
||
|
/* Esoteric standards specific functions */
|
||
|
extern char * bStr2NetStr (const_bstring b);
|
||
|
extern bstring bNetStr2Bstr (const char * buf);
|
||
|
extern bstring bBase64Encode (const_bstring b);
|
||
|
extern bstring bBase64DecodeEx (const_bstring b, int * boolTruncError);
|
||
|
extern struct bStream * bsUuDecode (struct bStream * sInp, int * badlines);
|
||
|
extern bstring bUuDecodeEx (const_bstring src, int * badlines);
|
||
|
extern bstring bUuEncode (const_bstring src);
|
||
|
extern bstring bYEncode (const_bstring src);
|
||
|
extern bstring bYDecode (const_bstring src);
|
||
|
extern int bSGMLEncode (bstring b);
|
||
|
|
||
|
/* Writable stream */
|
||
|
typedef int (* bNwrite) (const void * buf, size_t elsize, size_t nelem, void * parm);
|
||
|
|
||
|
struct bwriteStream * bwsOpen (bNwrite writeFn, void * parm);
|
||
|
int bwsWriteBstr (struct bwriteStream * stream, const_bstring b);
|
||
|
int bwsWriteBlk (struct bwriteStream * stream, void * blk, int len);
|
||
|
int bwsWriteFlush (struct bwriteStream * stream);
|
||
|
int bwsIsEOF (const struct bwriteStream * stream);
|
||
|
int bwsBuffLength (struct bwriteStream * stream, int sz);
|
||
|
void * bwsClose (struct bwriteStream * stream);
|
||
|
|
||
|
/* Security functions */
|
||
|
#define bSecureDestroy(b) { \
|
||
|
bstring bstr__tmp = (b); \
|
||
|
if (bstr__tmp && bstr__tmp->mlen > 0 && bstr__tmp->data) { \
|
||
|
(void) memset (bstr__tmp->data, 0, (size_t) bstr__tmp->mlen); \
|
||
|
bdestroy (bstr__tmp); \
|
||
|
} \
|
||
|
}
|
||
|
#define bSecureWriteProtect(t) { \
|
||
|
if ((t).mlen >= 0) { \
|
||
|
if ((t).mlen > (t).slen)) { \
|
||
|
(void) memset ((t).data + (t).slen, 0, (size_t) (t).mlen - (t).slen); \
|
||
|
} \
|
||
|
(t).mlen = -1; \
|
||
|
} \
|
||
|
}
|
||
|
extern bstring bSecureInput (int maxlen, int termchar,
|
||
|
bNgetc vgetchar, void * vgcCtx);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|