diff src/os_win32.c @ 696:f0a9ef4db025

updated for version 7.0210
author vimboss
date Tue, 28 Feb 2006 23:52:23 +0000
parents ba54311bc43e
children 0f9f4761ad9c
line wrap: on
line diff
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -2548,6 +2548,61 @@ mch_isdir(char_u *name)
 }
 
 /*
+ * Return TRUE if file "fname" has more than one link.
+ */
+    int
+mch_is_linked(char_u *fname)
+{
+    HANDLE	hFile;
+    int		res = 0;
+    BY_HANDLE_FILE_INFORMATION inf;
+#ifdef FEAT_MBYTE
+    WCHAR	*wn = NULL;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	wn = enc_to_ucs2(fname, NULL);
+    if (wn != NULL)
+    {
+	hFile = CreateFileW(wn,		/* file name */
+		    GENERIC_READ,	/* access mode */
+		    0,			/* share mode */
+		    NULL,		/* security descriptor */
+		    OPEN_EXISTING,	/* creation disposition */
+		    0,			/* file attributes */
+		    NULL);		/* handle to template file */
+	if (hFile == INVALID_HANDLE_VALUE
+		&& GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+	{
+	    /* Retry with non-wide function (for Windows 98). */
+	    vim_free(wn);
+	    wn = NULL;
+	}
+    }
+    if (wn == NULL)
+#endif
+	hFile = CreateFile(fname,	/* file name */
+		    GENERIC_READ,	/* access mode */
+		    0,			/* share mode */
+		    NULL,		/* security descriptor */
+		    OPEN_EXISTING,	/* creation disposition */
+		    0,			/* file attributes */
+		    NULL);		/* handle to template file */
+
+    if (hFile != INVALID_HANDLE_VALUE)
+    {
+	if (GetFileInformationByHandle(hFile, &inf) != 0
+		&& inf.nNumberOfLinks > 1)
+	    res = 1;
+	CloseHandle(hFile);
+    }
+
+#ifdef FEAT_MBYTE
+    vim_free(wn);
+#endif
+    return res;
+}
+
+/*
  * Return TRUE if file or directory "name" is writable (not readonly).
  * Strange semantics of Win32: a readonly directory is writable, but you can't
  * delete a file.  Let's say this means it is writable.