implemented SetFileShortName()
authorThomas Bluemel <thomas@reactsoft.com>
Thu, 18 Mar 2004 18:29:19 +0000 (18:29 +0000)
committerThomas Bluemel <thomas@reactsoft.com>
Thu, 18 Mar 2004 18:29:19 +0000 (18:29 +0000)
svn path=/trunk/; revision=8783

reactos/lib/kernel32/file/file.c
reactos/lib/kernel32/misc/stubs.c

index 330ff39..80d24fa 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: file.c,v 1.52 2004/03/18 16:19:25 weiden Exp $
+/* $Id: file.c,v 1.53 2004/03/18 18:29:18 weiden Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS system libraries
@@ -1183,7 +1183,7 @@ SetFileValidData(
                                                sizeof(FILE_VALID_DATA_LENGTH_INFORMATION),
                                                FileValidDataLengthInformation
                                                );
-
+  
        if (!NT_SUCCESS(Status)){
                SetLastErrorByStatus(Status);
                return FALSE;
@@ -1192,4 +1192,94 @@ SetFileValidData(
        return TRUE;
 }
 
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+SetFileShortNameW(
+  HANDLE hFile,
+  LPCWSTR lpShortName)
+{
+  NTSTATUS Status;
+  ULONG NeededSize;
+  UNICODE_STRING ShortName;
+  IO_STATUS_BLOCK IoStatusBlock;
+  PFILE_NAME_INFORMATION FileNameInformation;
+  
+  if(!lpShortName)
+  {
+    SetLastError(ERROR_INVALID_PARAMETER);
+    return FALSE;
+  }
+  
+  RtlInitUnicodeString(&ShortName, lpShortName);
+  
+  NeededSize = sizeof(FILE_NAME_INFORMATION) + ShortName.Length + sizeof(WCHAR);
+  if(!(FileNameInformation = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, NeededSize)))
+  {
+    SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+    return FALSE;
+  }
+  
+  FileNameInformation->FileNameLength = ShortName.Length;
+  RtlCopyMemory(FileNameInformation->FileName, ShortName.Buffer, ShortName.Length);
+  
+  Status = NtSetInformationFile(hFile,
+                                &IoStatusBlock,         //out
+                                FileNameInformation,
+                                NeededSize,
+                                FileShortNameInformation);
+  
+  RtlFreeHeap(RtlGetProcessHeap(), 0, FileNameInformation);
+  if(!NT_SUCCESS(Status))
+  {
+    
+    SetLastErrorByStatus(Status);
+  }
+  
+  return NT_SUCCESS(Status);
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+SetFileShortNameA(
+    HANDLE hFile,
+    LPCSTR lpShortName
+    )
+{
+  NTSTATUS Status;
+  BOOL Ret;
+  ANSI_STRING ShortNameA;
+  UNICODE_STRING ShortName;
+  
+  if(!lpShortName)
+  {
+    SetLastError(ERROR_INVALID_PARAMETER);
+    return FALSE;
+  }
+  
+  RtlInitAnsiString(&ShortNameA, (LPSTR)lpShortName);
+  
+  if(bIsFileApiAnsi)
+    Status = RtlAnsiStringToUnicodeString(&ShortName, &ShortNameA, TRUE);
+  else
+    Status = RtlOemStringToUnicodeString(&ShortName, &ShortNameA, TRUE);
+  if(!NT_SUCCESS(Status))
+  {
+    SetLastErrorByStatus(Status);
+    return FALSE;
+  }
+  
+  Ret = SetFileShortNameW(hFile, ShortName.Buffer);
+  
+  RtlFreeUnicodeString(&ShortName);
+  return Ret;
+}
+
 /* EOF */
index df17c38..dbc3daf 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: stubs.c,v 1.69 2004/03/18 16:19:26 weiden Exp $
+/* $Id: stubs.c,v 1.70 2004/03/18 18:29:19 weiden Exp $
  *
  * KERNEL32.DLL stubs (unimplemented functions)
  * Remove from this file, if you implement them.
@@ -1880,20 +1880,6 @@ SetDllDirectoryW(
     return 0;
 }
 
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-SetFileShortNameW(
-    HANDLE hFile,
-    LPCWSTR lpShortName
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
 /*
  * @unimplemented
  */
@@ -2254,20 +2240,6 @@ SetDllDirectoryA(
     return 0;
 }
 
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-SetFileShortNameA(
-    HANDLE hFile,
-    LPCSTR lpShortName
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
 /*
  * @unimplemented
  */