ソースを参照

Added internal function __PHYSFS_platformStrnicmp().

Ryan C. Gordon 22 年 前
コミット
09ef260209
7 ファイル変更98 行追加1 行削除
  1. 5 0
      physfs_internal.h
  2. 7 0
      platform/macclassic.c
  3. 24 0
      platform/os2.c
  4. 6 1
      platform/pocketpc.c
  5. 22 0
      platform/posix.c
  6. 6 0
      platform/skeleton.c
  7. 28 0
      platform/win32.c

+ 5 - 0
physfs_internal.h

@@ -1313,6 +1313,11 @@ PHYSFS_uint64 __PHYSFS_platformGetThreadID(void);
  */
  */
 int __PHYSFS_platformStricmp(const char *str1, const char *str2);
 int __PHYSFS_platformStricmp(const char *str1, const char *str2);
 
 
+/*
+ * This is a pass-through to whatever strnicmp() is called on your platform.
+ */
+int __PHYSFS_platformStrnicmp(const char *s1, const char *s2, PHYSFS_uint32 l);
+
 /*
 /*
  * Return non-zero if filename (in platform-dependent notation) exists.
  * Return non-zero if filename (in platform-dependent notation) exists.
  *  Symlinks should NOT be followed; at this stage, we do not care what the
  *  Symlinks should NOT be followed; at this stage, we do not care what the

+ 7 - 0
platform/macclassic.c

@@ -350,6 +350,13 @@ int __PHYSFS_platformStricmp(const char *x, const char *y)
 } /* __PHYSFS_platformStricmp */
 } /* __PHYSFS_platformStricmp */
 
 
 
 
+int __PHYSFS_platformStrnicmp(const char *x, const char *y, PHYSFS_uint32 l)
+{
+    extern int _strnicmp(const char *, const char *, int);
+    return(_strnicmp(x, y, (int) l));  /* (*shrug*) */
+} /* __PHYSFS_platformStricmp */
+
+
 static OSErr fnameToFSSpecNoAlias(const char *fname, FSSpec *spec)
 static OSErr fnameToFSSpecNoAlias(const char *fname, FSSpec *spec)
 {
 {
     OSErr err;
     OSErr err;

+ 24 - 0
platform/os2.c

@@ -340,6 +340,30 @@ int __PHYSFS_platformStricmp(const char *x, const char *y)
 } /* __PHYSFS_platformStricmp */
 } /* __PHYSFS_platformStricmp */
 
 
 
 
+int __PHYSFS_platformStrnicmp(const char *x, const char *y, PHYSFS_uint32 len)
+{
+    int ux, uy;
+
+    if (!len)
+        return(0);
+
+    do
+    {
+        ux = toupper((int) *x);
+        uy = toupper((int) *y);
+        if (ux > uy)
+            return(1);
+        else if (ux < uy)
+            return(-1);
+        x++;
+        y++;
+        len--;
+    } while ((ux) && (uy) && (len));
+
+    return(0);
+} /* __PHYSFS_platformStrnicmp */
+
+
 int __PHYSFS_platformExists(const char *fname)
 int __PHYSFS_platformExists(const char *fname)
 {
 {
     FILESTATUS3 fs;
     FILESTATUS3 fs;

+ 6 - 1
platform/pocketpc.c

@@ -211,10 +211,15 @@ PHYSFS_uint64 __PHYSFS_platformGetThreadID(void)
 int __PHYSFS_platformStricmp(const char *x, const char *y)
 int __PHYSFS_platformStricmp(const char *x, const char *y)
 {    
 {    
     return(_stricmp(x, y));
     return(_stricmp(x, y));
-
 } /* __PHYSFS_platformStricmp */
 } /* __PHYSFS_platformStricmp */
 
 
 
 
+int __PHYSFS_platformStrnicmp(const char *x, const char *y, PHYSFS_uint32 len)
+{    
+    return(_strnicmp(x, y, (int) len));
+} /* __PHYSFS_platformStrnicmp */
+
+
 int __PHYSFS_platformExists(const char *fname)
 int __PHYSFS_platformExists(const char *fname)
 {
 {
     int retval=0;
     int retval=0;

+ 22 - 0
platform/posix.c

@@ -141,6 +141,28 @@ int __PHYSFS_platformStricmp(const char *x, const char *y)
 } /* __PHYSFS_platformStricmp */
 } /* __PHYSFS_platformStricmp */
 
 
 
 
+int __PHYSFS_platformStrnicmp(const char *x, const char *y, PHYSFS_uint32 len)
+{
+    int ux, uy;
+
+    if (!len)
+        return(0);
+
+    do
+    {
+        ux = toupper((int) *x);
+        uy = toupper((int) *y);
+        if (ux != uy)
+            return((ux > uy) ? 1 : -1);
+        x++;
+        y++;
+        len--;
+    } while ((ux) && (uy) && (len));
+
+    return(0);
+} /* __PHYSFS_platformStrnicmp */
+
+
 #if (defined __PHYSFS_NO_SYMLINKS__)
 #if (defined __PHYSFS_NO_SYMLINKS__)
 #define doStat stat
 #define doStat stat
 #else
 #else

+ 6 - 0
platform/skeleton.c

@@ -68,6 +68,12 @@ int __PHYSFS_platformStricmp(const char *x, const char *y)
 } /* __PHYSFS_platformStricmp */
 } /* __PHYSFS_platformStricmp */
 
 
 
 
+int __PHYSFS_platformStrnicmp(const char *x, const char *y, PHYSFS_uint32 l)
+{
+    BAIL_MACRO(ERR_NOT_IMPLEMENTED, 0);
+} /* __PHYSFS_platformStrnicmp */
+
+
 int __PHYSFS_platformExists(const char *fname)
 int __PHYSFS_platformExists(const char *fname)
 {
 {
     BAIL_MACRO(ERR_NOT_IMPLEMENTED, 0);
     BAIL_MACRO(ERR_NOT_IMPLEMENTED, 0);

+ 28 - 0
platform/win32.c

@@ -368,6 +368,34 @@ int __PHYSFS_platformStricmp(const char *x, const char *y)
 } /* __PHYSFS_platformStricmp */
 } /* __PHYSFS_platformStricmp */
 
 
 
 
+int __PHYSFS_platformStrnicmp(const char *x, const char *y, PHYSFS_uint32 len)
+{
+#if (defined _MSC_VER)
+    return(strnicmp(x, y, (int) len));
+#else
+    int ux, uy;
+
+    if (!len)
+        return(0);
+
+    do
+    {
+        ux = toupper((int) *x);
+        uy = toupper((int) *y);
+        if (ux > uy)
+            return(1);
+        else if (ux < uy)
+            return(-1);
+        x++;
+        y++;
+        len--;
+    } while ((ux) && (uy) && (len));
+
+    return(0);
+#endif
+} /* __PHYSFS_platformStricmp */
+
+
 int __PHYSFS_platformExists(const char *fname)
 int __PHYSFS_platformExists(const char *fname)
 {
 {
     BAIL_IF_MACRO(GetFileAttributes(fname) == INVALID_FILE_ATTRIBUTES,
     BAIL_IF_MACRO(GetFileAttributes(fname) == INVALID_FILE_ATTRIBUTES,