#include <time.h>
#include <stdlib.h>
#include <stdarg.h>
-#define LIBCITADEL_VERSION_NUMBER 760
+#define LIBCITADEL_VERSION_NUMBER 770
/*
* Here's a bunch of stupid magic to make the MIME parser portable.
#define VIEW_WIKI 6 /* Wiki view */
#define VIEW_CALBRIEF 7 /* Brief Calendar view */
#define VIEW_JOURNAL 8 /* Journal view */
+#define VIEW_BLOG 9 /* Blog view (not yet implemented) */
#ifndef IsEmptyStr
#define IsEmptyStr(a) ((a)[0] == '\0')
#endif
+/*
+ * another word to indicate n/a for a pointer if NULL already has a "meaning"
+ */
+extern const char *StrBufNOTNULL;
+
/*
* Misc declarations
*/
char *libcitadel_version_string(void);
int libcitadel_version_number(void);
+void StartLibCitadel(size_t basesize);
void ShutDownLibCitadel(void);
/*
* MIME parser declarations
*/
-void extract_key(char *target, char *source, long sourcelen, char *key, long keylen);
+void extract_key(char *target, char *source, long sourcelen, char *key, long keylen, char KeyEnd);
void mime_parser(char *content_start, char *content_end,
void (*CallBack)
const char *Key;
long len;
}ConstStr;
-
+#define CKEY(a) (a).Key, (a).len
StrBuf* NewStrBuf(void);
StrBuf* NewStrBufDup(const StrBuf *CopyMe);
StrBuf* NewStrBufPlain(const char* ptr, int nChars);
+long StrBufShrinkToFit(StrBuf *Buf, int Force);
+void ReAdjustEmptyBuf(StrBuf *Buf, long ThreshHold, long NewSize);
+
int StrBufPlain(StrBuf *Buf, const char* ptr, int nChars);
StrBuf* _NewConstStrBuf(const char* StringConstant, size_t SizeOfStrConstant);
#define NewConstStrBuf(a) _NewConstStrBuf(a, sizeof(a))
void FreeStrBuf (StrBuf **FreeMe);
+char *SmashStrBuf (StrBuf **SmashMe);
void HFreeStrBuf (void *VFreeMe);
int FlushStrBuf(StrBuf *buf);
+int FLUSHStrBuf(StrBuf *buf); /* expensive but doesn't leave content behind for others to find in case of errors */
const char *ChrPtr(const StrBuf *Str);
int StrLength(const StrBuf *Str);
int StrBufNum_tokens(const StrBuf *source, char tok);
int StrBufRemove_token(StrBuf *Source, int parmnum, char separator);
+int StrBufHaveNextToken(const StrBuf *Source, const char **pStart);
int StrBufExtract_NextToken(StrBuf *dest, const StrBuf *Source, const char **pStart, char separator);
int StrBufSkip_NTokenS(const StrBuf *Source, const char **pStart, char separator, int nTokens);
unsigned long StrBufExtractNext_unsigned_long(const StrBuf* Source, const char **pStart, char separator);
void StrBufAppendBufPlain(StrBuf *Buf, const char *AppendBuf, long AppendSize, unsigned long Offset);
void StrBufAppendBuf(StrBuf *Buf, const StrBuf *AppendBuf, unsigned long Offset);
+size_t CurlFillStrBuf_callback(void *ptr, size_t size, size_t nmemb, void *stream);
void StrBufAppendPrintf(StrBuf *Buf, const char *format, ...);
#ifdef SHOW_ME_VAPPEND_PRINTF
/* so owe don't create an include depndency, this is just visible on demand. */
void StrBufTrim(StrBuf *Buf);
void StrBufUpCase(StrBuf *Buf);
void StrBufLowerCase(StrBuf *Buf);
+void StrBufStripSlashes(StrBuf *Dir, int RemoveTrailingSlash);
void StrBufEUid_unescapize(StrBuf *target, const StrBuf *source);
void StrBufEUid_escapize(StrBuf *target, const StrBuf *source);
+void StrBufToUnixLF(StrBuf *buf);
void StrBufReplaceChars(StrBuf *buf, char search, char replace);
int CompressBuffer(StrBuf *Buf);
#define RB (2)
#define QU (3)
void StrBufUrlescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn);
+void StrBufHexescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn);
long StrEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int nbsp, int nolinebreaks);
long StrECMAEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn);
-void StrMsgEscAppend(StrBuf *Target, StrBuf *Source, const char *PlainIn);
+long StrHtmlEcmaEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int nbsp, int nolinebreaks);
+void StrMsgEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn);
+void StrIcalEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn);
long StrTol(const StrBuf *Buf);
int StrToi(const StrBuf *Buf);
/* tools */
-int Ctdl_IsUtf8SequenceStart(char Char);
-int Ctdl_GetUtf8SequenceLength(char Char);
-int Ctdl_Utf8StrLen(char *str);
-char *Ctdl_Utf8StrCut(char *str, int maxlen);
-
int safestrncpy(char *dest, const char *src, size_t n);
int num_tokens (const char *source, char tok);
int CtdlDecodeBase64(char *dest, const char *source, size_t length);
unsigned int decode_hex(char *Source);
int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
+void StripSlashes(char *Dir, int TrailingSlash);
size_t striplt(char *);
int haschar(const char *st, int ch);
void remove_token(char *source, int parmnum, char separator);
char *CtdlTempFileName(char *prefix1, int prefix2);
FILE *CtdlTempFile(void);
void generate_uuid(char *buf);
-char *bmstrcasestr(char *text, char *pattern);
-char *bmstrcasestr_len(char *text, size_t textlen, char *pattern, size_t patlen);
+const char *bmstrcasestr(const char *text, const char *pattern);
+const char *bmstrcasestr_len(const char *text, size_t textlen, const char *pattern, size_t patlen);
void CtdlMakeTempFileName(char *name, int len);
char *rfc2047encode(char *line, long length);
int is_msg_in_mset(const char *mset, long msgnum);
typedef void (*PrintHashDataFunc) (const char *Key, void *Item, int Odd);
int Flathash(const char *str, long len);
-#define IKEY(a) (const char*)(&((int)a)), sizeof(int)
+#define IKEY(a) (const char*) &a, sizeof(a)
HashList *NewHash(int Uniq, HashFunc F);
void DeleteHash(HashList **Hash);
int dbg_PrintHash(HashList *Hash, PrintHashContent first, PrintHashContent Second);
int PrintHash(HashList *Hash, TransitionFunc Trans, PrintHashDataFunc PrintEntry);
HashPos *GetNewHashPos(HashList *Hash, int StepWidth);
-int GetHashPosCounter(HashPos *At);
+int GetHashPosFromKey(HashList *Hash, const char *HKey, long HKLen, HashPos *At);
+int DeleteEntryFromHash(HashList *Hash, HashPos *At);
+int GetHashPosCounter(HashList *Hash, HashPos *At);
void DeleteHashPos(HashPos **DelMe);
int GetNextHashPos(HashList *Hash, HashPos *At, long *HKLen, const char **HashKey, void **Data);
int GetHashAt(HashList *Hash,long At, long *HKLen, const char **HashKey, void **Data);