* Set the version numbers of everything to 7.66.
[citadel.git] / libcitadel / lib / libcitadel.h
index 0f4f6e2d19e6f8ff2fe69d2ff4b7fcdc7c8b6727..aca897882031539569c84953540fc149c0d169c1 100644 (file)
@@ -15,7 +15,7 @@
 #include <time.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#define LIBCITADEL_VERSION_NUMBER      760
+#define LIBCITADEL_VERSION_NUMBER      766
 
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
@@ -65,12 +65,18 @@ enum LogLevel {
 #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);
 
 /*
@@ -216,17 +222,22 @@ typedef struct _ConstStr {
        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);
@@ -235,12 +246,15 @@ long StrBufPeek(StrBuf *Buf, const char* ptr, long nThChar, char PeekValue);
 
 int StrBufTCP_read_line(StrBuf *buf, int *fd, int append, const char **Error);
 int StrBufReadBLOB(StrBuf *Buf, int *fd, int append, long nBytes, const char **Error);
+#define NNN_TERM 1
+#define O_TERM 0
 int StrBufReadBLOBBuffered(StrBuf *Buf, 
                           StrBuf *IOBuf, 
                           const char **BufPos,
                           int *fd, 
                           int append, 
                           long nBytes, 
+                          int check, 
                           const char **Error);
 int StrBufTCP_read_buffered_line(StrBuf *Line, 
                                 StrBuf *buf, 
@@ -266,6 +280,7 @@ int StrBufExtract_int(const StrBuf* Source, int parmnum, char separator);
 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);
@@ -275,6 +290,7 @@ int StrBufExtractNext_int(const StrBuf* Source, const char **pStart, char separa
 
 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. */
@@ -287,6 +303,7 @@ void StrBufCutAt(StrBuf *Buf, int AfternChars, const char *At);
 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);
 
@@ -297,6 +314,7 @@ void StrBufConvert(StrBuf *ConvertBuf, StrBuf *TmpBuf, void *pic);
 void ctdl_iconv_open(const char *tocode, const char *fromcode, void *pic);
 void StrBuf_RFC822_to_Utf8(StrBuf *Target, const StrBuf *DecodeMe, const StrBuf* DefaultCharset, StrBuf *FoundCharset);
 int StrBufDecodeBase64(StrBuf *Buf);
+int StrBufDecodeHex(StrBuf *Buf);
 int StrBufRFC2047encode(StrBuf **target, const StrBuf *source);
 int StrBufSanitizeAscii(StrBuf *Buf, const char Mute);
 #define LB                     (1)             /* Internal escape chars */
@@ -305,7 +323,8 @@ int StrBufSanitizeAscii(StrBuf *Buf, const char Mute);
 void StrBufUrlescAppend(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);
+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);
@@ -325,11 +344,6 @@ const char *GetIconFilename(char *MimeType, size_t len);
 
 /* 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);
@@ -343,7 +357,8 @@ size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int li
 int CtdlDecodeBase64(char *dest, const char *source, size_t length);
 unsigned int decode_hex(char *Source);
 int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
-long striplt(char *);
+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);
 void fmt_date(char *buf, size_t n, time_t thetime, int seconds);
@@ -388,7 +403,9 @@ struct vCard {
 
 struct vCard *vcard_new(void);
 void vcard_add_prop(struct vCard *v, char *propname, char *propvalue);
-struct vCard *vcard_load(char *);
+struct vCard *vcard_load(char *vtext);
+struct vCard *VCardLoad(StrBuf *vbtext);
+
 void vcard_free(struct vCard *);
 void vcard_set_prop(struct vCard *v, char *name, char *value, int append);
 char *vcard_get_prop(struct vCard *v, char *propname, int is_partial,
@@ -417,7 +434,7 @@ typedef void (*TransitionFunc) (void *Item1, void *Item2, int Odd);
 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);