* -- malloc'ed memory. Then free "s1".
*/
char *
-add (char *s2, char *s1)
+add (const char *s2, char *s1)
{
char *cp;
size_t len1 = 0, len2 = 0;
* Append an item to a comma separated list
*/
char *
-addlist (char *list, char *item)
+addlist (char *list, const char *item)
{
if (list)
list = add (", ", list);
* folder_exists
* Check to see if a folder exists.
*/
-int folder_exists(char *folder)
+int folder_exists(const char *folder)
{
struct stat st;
int exists = 0;
}
return in;
}
+
+
+/*
+ * Finds first occurrence of str in buf. buf is not a C string but a
+ * byte array of length buflen. str is a null-terminated C string.
+ * find_str() does not modify buf but passes back a non-const char *
+ * pointer so that the caller can modify it.
+ */
+char *
+find_str (const char buf[], size_t buflen, const char *str) {
+ const size_t len = strlen (str);
+ size_t i;
+
+ for (i = 0; i + len <= buflen; ++i, ++buf) {
+ if (! memcmp (buf, str, len)) return (char *) buf;
+ }
+
+ return NULL;
+}
+
+
+/*
+ * Finds last occurrence of str in buf. buf is not a C string but a
+ * byte array of length buflen. str is a null-terminated C string.
+ * find_str() does not modify buf but passes back a non-const char *
+ * pointer so that the caller can modify it.
+ */
+char *
+rfind_str (const char buf[], size_t buflen, const char *str) {
+ const size_t len = strlen (str);
+ size_t i;
+
+ for (i = 0, buf += buflen - len; i + len <= buflen; ++i, --buf) {
+ if (! memcmp (buf, str, len)) return (char *) buf;
+ }
+
+ return NULL;
+}