use memmem and strndup from FreeBSD on Darwin (Thanks Marcus)
This commit is contained in:
parent
fc583adb99
commit
02dfb8e891
@ -164,4 +164,18 @@ char *get_process_filename(const char *prefix);
|
|||||||
*/
|
*/
|
||||||
void i3_restart(bool forget_layout);
|
void i3_restart(bool forget_layout);
|
||||||
|
|
||||||
|
#if defined(__OpenBSD__) || defined(__APPLE__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Taken from FreeBSD
|
||||||
|
* Find the first occurrence of the byte string s in byte string l.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void *memmem(const void *l, size_t l_len, const void *s, size_t s_len);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
71
src/util.c
71
src/util.c
@ -448,9 +448,7 @@ void i3_restart(bool forget_layout) {
|
|||||||
/* not reached */
|
/* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if defined(__OpenBSD__) || defined(__APPLE__)
|
||||||
|
|
||||||
#if defined(__OpenBSD__)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Taken from FreeBSD
|
* Taken from FreeBSD
|
||||||
@ -458,31 +456,54 @@ void i3_restart(bool forget_layout) {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void *memmem(const void *l, size_t l_len, const void *s, size_t s_len) {
|
void *memmem(const void *l, size_t l_len, const void *s, size_t s_len) {
|
||||||
register char *cur, *last;
|
register char *cur, *last;
|
||||||
const char *cl = (const char *)l;
|
const char *cl = (const char *)l;
|
||||||
const char *cs = (const char *)s;
|
const char *cs = (const char *)s;
|
||||||
|
|
||||||
/* we need something to compare */
|
|
||||||
if (l_len == 0 || s_len == 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* "s" must be smaller or equal to "l" */
|
|
||||||
if (l_len < s_len)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* special case where s_len == 1 */
|
|
||||||
if (s_len == 1)
|
|
||||||
return memchr(l, (int)*cs, l_len);
|
|
||||||
|
|
||||||
/* the last position where its possible to find "s" in "l" */
|
|
||||||
last = (char *)cl + l_len - s_len;
|
|
||||||
|
|
||||||
for (cur = (char *)cl; cur <= last; cur++)
|
|
||||||
if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0)
|
|
||||||
return cur;
|
|
||||||
|
|
||||||
|
/* we need something to compare */
|
||||||
|
if (l_len == 0 || s_len == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
/* "s" must be smaller or equal to "l" */
|
||||||
|
if (l_len < s_len)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* special case where s_len == 1 */
|
||||||
|
if (s_len == 1)
|
||||||
|
return memchr(l, (int)*cs, l_len);
|
||||||
|
|
||||||
|
/* the last position where its possible to find "s" in "l" */
|
||||||
|
last = (char *)cl + l_len - s_len;
|
||||||
|
|
||||||
|
for (cur = (char *)cl; cur <= last; cur++)
|
||||||
|
if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0)
|
||||||
|
return cur;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Taken from FreeBSD
|
||||||
|
* Returns a pointer to a new string which is a duplicate of the
|
||||||
|
* string, but only copies at most n characters.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
char *strndup(const char *str, size_t n) {
|
||||||
|
size_t len;
|
||||||
|
char *copy;
|
||||||
|
|
||||||
|
for (len = 0; len < n && str[len]; len++)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((copy = malloc(len + 1)) == NULL)
|
||||||
|
return (NULL);
|
||||||
|
memcpy(copy, str, len);
|
||||||
|
copy[len] = '\0';
|
||||||
|
return (copy);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user