]> code.citadel.org Git - citadel.git/blobdiff - libcitadel/lib/stringbuf.c
* zero-safe StrtoI/L
[citadel.git] / libcitadel / lib / stringbuf.c
index fb817d2f0769d336e821f68fef08855fc3eefd76..67a50ece57b97c64f1de39dcb550eedc57d5b4ca 100644 (file)
@@ -271,6 +271,8 @@ void HFreeStrBuf (void *VFreeMe)
  */
 long StrTol(const StrBuf *Buf)
 {
+       if (Buf == NULL)
+               return 0;
        if(Buf->BufUsed > 0)
                return atol(Buf->buf);
        else
@@ -282,7 +284,9 @@ long StrTol(const StrBuf *Buf)
  */
 int StrToi(const StrBuf *Buf)
 {
-       if(Buf->BufUsed > 0)
+       if (Buf == NULL)
+               return 0;
+       if (Buf->BufUsed > 0)
                return atoi(Buf->buf);
        else
                return 0;
@@ -1143,6 +1147,24 @@ void StrBufCutRight(StrBuf *Buf, int nChars)
        Buf->buf[Buf->BufUsed] = '\0';
 }
 
+/**
+ * \brief Cut the string after n Chars
+ * \param Buf Buffer to modify
+ * \param AfternChars after how many chars should we trunkate the string?
+ * \param At if non-null and points inside of our string, cut it there.
+ */
+void StrBufCutAt(StrBuf *Buf, int AfternChars, const char *At)
+{
+       if (At != NULL){
+               AfternChars = At - Buf->buf;
+       }
+
+       if ((AfternChars < 0) || (AfternChars >= Buf->BufUsed))
+               return;
+       Buf->BufUsed = AfternChars;
+       Buf->buf[Buf->BufUsed] = '\0';
+}
+
 
 /*
  * Strip leading and trailing spaces from a string; with premeasured and adjusted length.