Make ssize_t size match size_t, provide SSIZE_MAX on Windows.
bk: 64169807wtm82iCy2AhNAbmk6IX4_Q
*/
#define __func__ __FUNCTION__
-typedef int pid_t; /* PID is an int */
-typedef int ssize_t; /* ssize is an int */
+typedef int pid_t; /* PID is an int */
/*
* Map the stream to the file number
typedef unsigned __int64 uint64_t;
#endif
+#ifdef _WIN64 /* mirroring SIZE_MAX from limits.h */
+ typedef SSIZE_T ssize_t;
+#define SSIZE_MAX _I64_MAX
+#else
+ typedef int ssize_t;
+#define SSIZE_MAX INT_MAX
+#endif
/* Directory separator, usually / or \ */
#define DIR_SEP '\\'
ssize_t len;
char * target;
- REQUIRE(bufsiz > 0);
+ REQUIRE(bufsiz > 0 && bufsiz <= SSIZE_MAX);
target = emalloc(bufsiz);
len = readlink(fname, target, bufsiz);
- if (len < 0 ) {
+ if (len < 0) {
fname[0] = '\0';
return;
}
- if (len > (int)bufsiz - 1)
- len = (int)bufsiz - 1;
+ if ((size_t)len > bufsiz - 1)
+ len = bufsiz - 1;
memcpy(fname, target, len);
fname[len] = '\0';
free(target);