#include <stdint.h>
#include <stdio.h>
#include <string.h>
-#include <ctype.h>
-#include "avstring.h"
+
+#include "config.h"
+#include "common.h"
#include "mem.h"
+#include "avstring.h"
int av_strstart(const char *str, const char *pfx, const char **ptr)
{
int av_stristart(const char *str, const char *pfx, const char **ptr)
{
- while (*pfx && toupper((unsigned)*pfx) == toupper((unsigned)*str)) {
+ while (*pfx && av_toupper((unsigned)*pfx) == av_toupper((unsigned)*str)) {
pfx++;
str++;
}
if (!*s2)
return s1;
- do {
+ do
if (av_stristart(s1, s2, NULL))
return s1;
- } while (*s1++);
+ while (*s1++);
return NULL;
}
+char *av_strnstr(const char *haystack, const char *needle, size_t hay_length)
+{
+ size_t needle_len = strlen(needle);
+ if (!needle_len)
+ return haystack;
+ while (hay_length >= needle_len) {
+ hay_length--;
+ if (!memcmp(haystack, needle, needle_len))
+ return haystack;
+ haystack++;
+ }
+ return NULL;
+}
+
size_t av_strlcpy(char *dst, const char *src, size_t size)
{
size_t len = 0;
char *av_d2str(double d)
{
- char *str= av_malloc(16);
- if(str) snprintf(str, 16, "%f", d);
+ char *str = av_malloc(16);
+ if (str)
+ snprintf(str, 16, "%f", d);
return str;
}
char *av_get_token(const char **buf, const char *term)
{
- char *out = av_malloc(strlen(*buf) + 1);
- char *ret= out, *end= out;
+ char *out = av_malloc(strlen(*buf) + 1);
+ char *ret = out, *end = out;
const char *p = *buf;
- if (!out) return NULL;
+ if (!out)
+ return NULL;
p += strspn(p, WHITESPACES);
- while(*p && !strspn(p, term)) {
+ while (*p && !strspn(p, term)) {
char c = *p++;
- if(c == '\\' && *p){
+ if (c == '\\' && *p) {
*out++ = *p++;
- end= out;
- }else if(c == '\''){
- while(*p && *p != '\'')
+ end = out;
+ } else if (c == '\'') {
+ while (*p && *p != '\'')
*out++ = *p++;
- if(*p){
+ if (*p) {
p++;
- end= out;
+ end = out;
}
- }else{
+ } else {
*out++ = c;
}
}
- do{
+ do
*out-- = 0;
- }while(out >= end && strspn(out, WHITESPACES));
+ while (out >= end && strspn(out, WHITESPACES));
*buf = p;
return c1 - c2;
}
-#ifdef TEST
+const char *av_basename(const char *path)
+{
+ char *p = strrchr(path, '/');
-#include "common.h"
-#undef printf
+#if HAVE_DOS_PATHS
+ char *q = strrchr(path, '\\');
+ char *d = strchr(path, ':');
+
+ p = FFMAX3(p, q, d);
+#endif
-int main(void)
+ if (!p)
+ return path;
+
+ return p + 1;
+}
+
+const char *av_dirname(char *path)
{
- int i;
-
- printf("Testing av_get_token()\n");
- {
- const char *strings[] = {
- "''",
- "",
- ":",
- "\\",
- "'",
- " '' :",
- " '' '' :",
- "foo '' :",
- "'foo'",
- "foo ",
- " ' foo ' ",
- "foo\\",
- "foo': blah:blah",
- "foo\\: blah:blah",
- "foo\'",
- "'foo : ' :blahblah",
- "\\ :blah",
- " foo",
- " foo ",
- " foo \\ ",
- "foo ':blah",
- " foo bar : blahblah",
- "\\f\\o\\o",
- "'foo : \\ \\ ' : blahblah",
- "'\\fo\\o:': blahblah",
- "\\'fo\\o\\:': foo ' :blahblah"
- };
-
- for (i=0; i < FF_ARRAY_ELEMS(strings); i++) {
- const char *p= strings[i];
- printf("|%s|", p);
- printf(" -> |%s|", av_get_token(&p, ":"));
- printf(" + |%s|\n", p);
- }
- }
+ char *p = strrchr(path, '/');
+
+#if HAVE_DOS_PATHS
+ char *q = strrchr(path, '\\');
+ char *d = strchr(path, ':');
+
+ d = d ? d + 1 : d;
- return 0;
+ p = FFMAX3(p, q, d);
+#endif
+
+ if (!p)
+ return ".";
+
+ *p = '\0';
+
+ return path;
}
-#endif /* TEST */
+int av_match_name(const char *name, const char *names)
+{
+ const char *p;
+ int len, namelen;
+
+ if (!name || !names)
+ return 0;
+
+ namelen = strlen(name);
+ while ((p = strchr(names, ','))) {
+ len = FFMAX(p - names, namelen);
+ if (!av_strncasecmp(name, names, len))
+ return 1;
+ names = p + 1;
+ }
+ return !av_strcasecmp(name, names);
+}