info.c (tagcompare): use a locale-insensitive toupper()
authorsezero <sezero@users.sourceforge.net>
Sat, 10 Nov 2018 21:51:10 +0000 (00:51 +0300)
committerThomas Daede <daede003@umn.edu>
Mon, 28 Jan 2019 23:41:18 +0000 (15:41 -0800)
see: https://gitlab.xiph.org/xiph/vorbis/issues/2079

lib/info.c

index 23efa25..4a5e2b3 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
 #include "codec_internal.h"
@@ -47,6 +46,10 @@ static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
   }
 }
 
+static int _v_toupper(int c) {
+  return (c >= 'a' && c <= 'z') ? (c & ~('a' - 'A')) : c;
+}
+
 void vorbis_comment_init(vorbis_comment *vc){
   memset(vc,0,sizeof(*vc));
 }
@@ -78,7 +81,7 @@ void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, const char *con
 static int tagcompare(const char *s1, const char *s2, int n){
   int c=0;
   while(c < n){
-    if(toupper(s1[c]) != toupper(s2[c]))
+    if(_v_toupper(s1[c]) != _v_toupper(s2[c]))
       return !0;
     c++;
   }