changeset 10692:7cb48ef05b02

Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
author mosu
date Mon, 25 Aug 2003 09:12:28 +0000
parents 665fd8af2db7
children 7cf006b5a61c
files subreader.c
diffstat 1 files changed, 18 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/subreader.c	Mon Aug 25 09:08:06 2003 +0000
+++ b/subreader.c	Mon Aug 25 09:12:28 2003 +0000
@@ -74,6 +74,20 @@
 	while (i > 0 && isspace(s[i])) s[i--] = '\0';
 }
 
+static char *stristr(const char *haystack, const char *needle) {
+    int len = 0;
+    const char *p = haystack;
+
+    if (!(haystack && needle)) return NULL;
+
+    len=strlen(needle);
+    while (*p != '\0') {
+	if (strncasecmp(p, needle, len) == 0) return (char*)p;
+	p++;
+    }
+
+    return NULL;
+}
 
 subtitle *sub_read_line_sami(FILE *fd, subtitle *current) {
     static char line[LINE_LEN+1];
@@ -92,11 +106,11 @@
 	switch (state) {
 
 	case 0: /* find "START=" or "Slacktime:" */
-	    slacktime_s = strstr (s, "Slacktime:");
+	    slacktime_s = stristr (s, "Slacktime:");
 	    if (slacktime_s) 
                 sub_slacktime = strtol (slacktime_s+10, NULL, 0) / 10;
 
-	    s = strstr (s, "Start=");
+	    s = stristr (s, "Start=");
 	    if (s) {
 		current->start = strtol (s + 6, &s, 0) / 10;
 		state = 1; continue;
@@ -104,7 +118,7 @@
 	    break;
  
 	case 1: /* find "<P" */
-	    if ((s = strstr (s, "<P"))) { s += 2; state = 2; continue; }
+	    if ((s = stristr (s, "<P"))) { s += 2; state = 2; continue; }
 	    break;
  
 	case 2: /* find ">" */
@@ -131,7 +145,7 @@
 	    continue;
 
 	case 4: /* get current->end or skip <TAG> */
-	    q = strstr (s, "Start=");
+	    q = stristr (s, "Start=");
 	    if (q) {
 		current->end = strtol (q + 6, &q, 0) / 10 - 1;
 		*p = '\0'; trail_space (text);