msvcrt: Added strtok_s implementation.
authorPiotr Caban <piotr@codeweavers.com>
Mon, 26 Apr 2010 12:09:59 +0000 (14:09 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 26 Apr 2010 15:11:45 +0000 (10:11 -0500)
dlls/msvcr80/msvcr80.spec
dlls/msvcr90/msvcr90.spec
dlls/msvcrt/msvcrt.spec
dlls/msvcrt/string.c

index 65da4271d41e8cc4726a2545e8ea79db0dcf35ac..60e66bafc609c8d6bc229150d69239e04f1bb9ff 100644 (file)
 @ cdecl strstr(str str) msvcrt.strstr
 @ cdecl strtod(str ptr) msvcrt.strtod
 @ cdecl strtok(str str) msvcrt.strtok
-@ stub strtok_s
+@ cdecl strtok_s(ptr str ptr) msvcrt.strtok_s
 @ cdecl strtol(str ptr long) msvcrt.strtol
 @ cdecl strtoul(str ptr long) msvcrt.strtoul
 @ cdecl strxfrm(ptr str long) msvcrt.strxfrm
index b7884dc84001b7ec2ccf7c24bf6c4566f67a1b50..16a1bc2c694c4f91a7897642a9eaa00d19868d07 100644 (file)
 @ cdecl strstr(str str) msvcrt.strstr
 @ cdecl strtod(str ptr) msvcrt.strtod
 @ cdecl strtok(str str) msvcrt.strtok
-@ stub strtok_s
+@ cdecl strtok_s(ptr str ptr) msvcrt.strtok_s
 @ cdecl strtol(str ptr long) msvcrt.strtol
 @ cdecl strtoul(str ptr long) msvcrt.strtoul
 @ cdecl strxfrm(ptr str long) msvcrt.strxfrm
index 06803758498a6504a0cbcd5b84bd8012d7a7b7e2..6807de2dd6ee5aeb5bb895152895da512a3486c7 100644 (file)
 @ cdecl strstr(str str) ntdll.strstr
 @ cdecl strtod(str ptr) MSVCRT_strtod
 @ cdecl strtok(str str) MSVCRT_strtok
-# stub strtok_s
+@ cdecl strtok_s(ptr str ptr) MSVCRT_strtok_s
 @ cdecl strtol(str ptr long) MSVCRT_strtol
 @ cdecl strtoul(str ptr long) MSVCRT_strtoul
 @ cdecl strxfrm(ptr str long) MSVCRT_strxfrm
index d99c508c985397f7d3fcee53f8bbd42e20d53ff9..459d1a1cd91c0aa506015d9383d80b932f0ab06b 100644 (file)
@@ -111,6 +111,33 @@ char * CDECL MSVCRT_strtok( char *str, const char *delim )
     return ret;
 }
 
+/*********************************************************************
+ *             strtok_s  (MSVCRT.@)
+ */
+char * CDECL MSVCRT_strtok_s(char *str, const char *delim, char **ctx)
+{
+    if(!delim || !ctx || (!str && !*ctx)) {
+        MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0);
+        *MSVCRT__errno() = MSVCRT_EINVAL;
+        return NULL;
+    }
+
+    if(!str)
+        str = *ctx;
+
+    while(*str && strchr(delim, *str))
+        str++;
+    if(!*str)
+        return NULL;
+
+    *ctx = str+1;
+    while(**ctx && !strchr(delim, **ctx))
+        (*ctx)++;
+    if(**ctx)
+        *(*ctx)++ = 0;
+
+    return str;
+}
 
 /*********************************************************************
  *             _swab (MSVCRT.@)