5050#else
5151 #include < fcntl.h>
5252 #include < unistd.h>
53- #include < unistd.h>
5453 #include < dirent.h> // for readdir
5554 #include < libgen.h> // for basename and dirname
5655 #include < sys/stat.h> // for stat
6160 #include < sys/sendfile.h>
6261 #endif
6362 #define PATHSEP ' /'
64- #include < unistd.h>
6563 #include < sys/wait.h>
6664#endif
6765
@@ -105,15 +103,16 @@ class RawDataHandleStorage : public RefCountedStorage {
105103 }
106104 virtual ~RawDataHandleStorage () { free (data); }
107105 void resize (size_t newSize) {
108- if (data) {
106+ if (newSize == 0 ) {
107+ free (data);
108+ data = nullptr ;
109+ dataSize = 0 ;
110+ } else {
109111 void *newData = realloc (data, newSize);
110112 if (newData) {
111113 data = newData;
112114 dataSize = newSize;
113115 }
114- } else {
115- data = malloc (newSize);
116- if (data) dataSize = newSize;
117116 }
118117 }
119118
@@ -350,8 +349,12 @@ static IntrinsicResult intrinsic_basename(Context *context, IntrinsicResult part
350349 char extBuf[256 ];
351350 _splitpath_s (pathStr.c_str (), driveBuf, sizeof (driveBuf), nullptr , 0 , nameBuf, sizeof (nameBuf), extBuf, sizeof (extBuf));
352351 String result = String (nameBuf) + String (extBuf);
353- # else
352+ # elif defined(__APPLE__) || defined(__FreeBSD__)
354353 String result (basename ((char *)pathStr.c_str ()));
354+ #else
355+ char *duplicate = strdup ((char *)pathStr.c_str ());
356+ String result (basename (duplicate));
357+ free (duplicate);
355358 #endif
356359 return IntrinsicResult (result);
357360}
@@ -740,7 +743,7 @@ static IntrinsicResult intrinsic_readLines(Context *context, IntrinsicResult par
740743 partialLine = " " ;
741744 }
742745 list.Add (line);
743- if (buf[i] == ' \n ' && i+1 < bytesRead && buf[i+1 ] == ' \r ' ) i++;
746+ if (buf[i] == ' \r ' && i+1 < bytesRead && buf[i+1 ] == ' \n ' ) i++;
744747 if (i+1 < bytesRead && buf[i+1 ] == 0 ) i++;
745748 lineStart = i + 1 ;
746749 }
@@ -749,6 +752,7 @@ static IntrinsicResult intrinsic_readLines(Context *context, IntrinsicResult par
749752 partialLine = String (&buf[lineStart], bytesRead - lineStart);
750753 }
751754 }
755+ if (!partialLine.empty ()) list.Add (partialLine);
752756 fclose (handle);
753757 return IntrinsicResult (list);
754758}
@@ -1139,7 +1143,6 @@ static IntrinsicResult intrinsic_rawDataSetUtf8(Context *context, IntrinsicResul
11391143 return IntrinsicResult (nBytes);
11401144}
11411145
1142-
11431146static IntrinsicResult intrinsic_keyAvailable (Context *context, IntrinsicResult partialResult) {
11441147 return IntrinsicResult (KeyAvailable ());
11451148}
@@ -1330,7 +1333,6 @@ static IntrinsicResult intrinsic_exec(Context* context, IntrinsicResult partialR
13301333}
13311334#else
13321335
1333-
13341336static IntrinsicResult intrinsic_exec (Context *context, IntrinsicResult partialResult) {
13351337 double now = context->vm ->RunTime ();
13361338 if (partialResult.Done ()) {
@@ -1362,7 +1364,6 @@ static IntrinsicResult intrinsic_exec(Context *context, IntrinsicResult partialR
13621364 return IntrinsicResult (data, false );
13631365 }
13641366}
1365- #endif
13661367
13671368static bool disallowAssignment (ValueDict& dict, Value key, Value value) {
13681369 return true ;
0 commit comments