DocSystem пре 11 месеци
родитељ
комит
ca57e1553c
1 измењених фајлова са 25 додато и 2 уклоњено
  1. 25 2
      api/calypso/transit/navigo.c

+ 25 - 2
api/calypso/transit/navigo.c

@@ -211,6 +211,28 @@ int get_intercode_subversion(int version) {
     return version & 0x07;
 }
 
+char* get_token(char* psrc, const char* delimit, void* psave) {
+    static char sret[512];
+    register char* ptr = psave;
+    memset(sret, 0, sizeof(sret));
+
+    if(psrc != NULL) strcpy(ptr, psrc);
+    if(ptr == NULL) return NULL;
+
+    int i = 0, nlength = strlen(ptr);
+    for(i = 0; i < nlength; i++) {
+        if(ptr[i] == delimit[0]) break;
+        if(ptr[i] == delimit[1]) {
+            ptr = NULL;
+            break;
+        }
+        sret[i] = ptr[i];
+    }
+    if(ptr != NULL) strcpy(ptr, &ptr[i + 1]);
+
+    return sret;
+}
+
 char* get_navigo_station(
     int station_group_id,
     int station_id,
@@ -227,13 +249,14 @@ char* get_navigo_station(
                 if(!station_name) {
                     return "Unknown";
                 }
-                char* token = strtok(station_name, "|");
+                char* token = get_token(station_name, "|", station_name);
                 for(int i = 0; i < station_sub_id - 1; i++) {
-                    token = strtok(NULL, "|");
+                    token = get_token(station_name, "|", station_name);
                     if(!token) {
                         break;
                     }
                 }
+                free(station_name);
                 if(token) {
                     return token;
                 }