+ private fun file_realpath: CString `{
+#ifdef _WIN32
+ DWORD len = GetFullPathName(self, 0, NULL, NULL);
+ char *buf = malloc(len+1); // FIXME don't leak memory
+ len = GetFullPathName(self, len+1, buf, NULL);
+ return buf;
+#else
+ return realpath(self, NULL);
+#endif
+ `}