xref: /aosp_15_r20/external/OpenCL-CTS/test_common/harness/mingw_compat.c (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
1*6467f958SSadaf Ebrahimi //
2*6467f958SSadaf Ebrahimi // Copyright (c) 2017 The Khronos Group Inc.
3*6467f958SSadaf Ebrahimi //
4*6467f958SSadaf Ebrahimi // Licensed under the Apache License, Version 2.0 (the "License");
5*6467f958SSadaf Ebrahimi // you may not use this file except in compliance with the License.
6*6467f958SSadaf Ebrahimi // You may obtain a copy of the License at
7*6467f958SSadaf Ebrahimi //
8*6467f958SSadaf Ebrahimi //    http://www.apache.org/licenses/LICENSE-2.0
9*6467f958SSadaf Ebrahimi //
10*6467f958SSadaf Ebrahimi // Unless required by applicable law or agreed to in writing, software
11*6467f958SSadaf Ebrahimi // distributed under the License is distributed on an "AS IS" BASIS,
12*6467f958SSadaf Ebrahimi // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6467f958SSadaf Ebrahimi // See the License for the specific language governing permissions and
14*6467f958SSadaf Ebrahimi // limitations under the License.
15*6467f958SSadaf Ebrahimi //
16*6467f958SSadaf Ebrahimi #if defined(__MINGW32__)
17*6467f958SSadaf Ebrahimi 
18*6467f958SSadaf Ebrahimi #include "mingw_compat.h"
19*6467f958SSadaf Ebrahimi #include <stdio.h>
20*6467f958SSadaf Ebrahimi #include <string.h>
21*6467f958SSadaf Ebrahimi 
22*6467f958SSadaf Ebrahimi // This function is unavailable on various mingw compilers,
23*6467f958SSadaf Ebrahimi // especially 64 bit so implementing it here
24*6467f958SSadaf Ebrahimi const char *basename_dot = ".";
basename(char * path)25*6467f958SSadaf Ebrahimi char *basename(char *path)
26*6467f958SSadaf Ebrahimi {
27*6467f958SSadaf Ebrahimi     char *p = path, *b = NULL;
28*6467f958SSadaf Ebrahimi     int len = strlen(path);
29*6467f958SSadaf Ebrahimi 
30*6467f958SSadaf Ebrahimi     if (path == NULL)
31*6467f958SSadaf Ebrahimi     {
32*6467f958SSadaf Ebrahimi         return (char *)basename_dot;
33*6467f958SSadaf Ebrahimi     }
34*6467f958SSadaf Ebrahimi 
35*6467f958SSadaf Ebrahimi     // Not absolute path on windows
36*6467f958SSadaf Ebrahimi     if (path[1] != ':')
37*6467f958SSadaf Ebrahimi     {
38*6467f958SSadaf Ebrahimi         return path;
39*6467f958SSadaf Ebrahimi     }
40*6467f958SSadaf Ebrahimi 
41*6467f958SSadaf Ebrahimi     // Trim trailing path seperators
42*6467f958SSadaf Ebrahimi     if (path[len - 1] == '\\' || path[len - 1] == '/')
43*6467f958SSadaf Ebrahimi     {
44*6467f958SSadaf Ebrahimi         len--;
45*6467f958SSadaf Ebrahimi         path[len] = '\0';
46*6467f958SSadaf Ebrahimi     }
47*6467f958SSadaf Ebrahimi 
48*6467f958SSadaf Ebrahimi     while (len)
49*6467f958SSadaf Ebrahimi     {
50*6467f958SSadaf Ebrahimi         while ((*p != '\\' || *p != '/') && len)
51*6467f958SSadaf Ebrahimi         {
52*6467f958SSadaf Ebrahimi             p++;
53*6467f958SSadaf Ebrahimi             len--;
54*6467f958SSadaf Ebrahimi         }
55*6467f958SSadaf Ebrahimi         p++;
56*6467f958SSadaf Ebrahimi         b = p;
57*6467f958SSadaf Ebrahimi     }
58*6467f958SSadaf Ebrahimi 
59*6467f958SSadaf Ebrahimi     return b;
60*6467f958SSadaf Ebrahimi }
61*6467f958SSadaf Ebrahimi 
62*6467f958SSadaf Ebrahimi #endif