Add missing OPTIONAL information in prototypes
authorHervé Poussineau <hpoussin@reactos.org>
Wed, 12 Apr 2006 13:41:11 +0000 (13:41 +0000)
committerHervé Poussineau <hpoussin@reactos.org>
Wed, 12 Apr 2006 13:41:11 +0000 (13:41 +0000)
Check for NULL parameters

svn path=/trunk/; revision=21564

reactos/lib/recyclebin/openclose.c
reactos/lib/recyclebin/readme.txt
reactos/lib/recyclebin/recyclebin.c
reactos/lib/recyclebin/recyclebin.h
reactos/lib/recyclebin/recyclebin_private.h
reactos/lib/recyclebin/recyclebin_v5.c
reactos/lib/recyclebin/recyclebin_v5.h

index 24ea499..179c16f 100644 (file)
@@ -77,7 +77,7 @@ IntCreateEmptyRecycleBin(
        if (OwnerSid)\r
        {\r
                //DWORD rc;\r
-               \r
+\r
                /* Add ACL to allow only user/SYSTEM to open it */\r
                /* FIXME: rc = SetNamedSecurityInfo(\r
                        BufferName,\r
@@ -114,7 +114,7 @@ IntCreateEmptyRecycleBin(
        }\r
        CloseHandle(hFile);\r
        hFile = INVALID_HANDLE_VALUE;\r
-       \r
+\r
        /* Create empty INFO2 file */\r
        wcscpy(FileName, RECYCLE_BIN_FILE_NAME);\r
        hFile = CreateFileW(BufferName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);\r
@@ -140,7 +140,7 @@ cleanup:
                if (hFile != INVALID_HANDLE_VALUE)\r
                        CloseHandle(hFile);\r
        }\r
-       return ret;     \r
+       return ret;\r
 }\r
 \r
 PRECYCLE_BIN\r
index 71fc735..c7ab301 100644 (file)
@@ -6,6 +6,7 @@ TODO
 - Empty a recycle bin containing directories (v5)\r
 - Set security on recycle bin folder\r
 - Delete files > 4Gb\r
+- Make the library thread-safe\r
 \r
 3 levels\r
 - 1:  recyclebin.c:   Public interface\r
index ec75d55..4801255 100644 (file)
@@ -20,7 +20,7 @@ CloseRecycleBinHandle(
        IN HANDLE hDeletedFile)\r
 {\r
        BOOL ret = FALSE;\r
-       \r
+\r
        if (!IntCheckDeletedFileHandle(hDeletedFile))\r
                SetLastError(ERROR_INVALID_HANDLE);\r
        else\r
@@ -28,7 +28,7 @@ CloseRecycleBinHandle(
                PDELETED_FILE_HANDLE file = (PDELETED_FILE_HANDLE)hDeletedFile;\r
                ret = DereferenceHandle(&file->refCount);\r
        }\r
-       \r
+\r
        return ret;\r
 }\r
 \r
@@ -39,7 +39,14 @@ DeleteFileToRecycleBinA(
        int len;\r
        LPWSTR FileNameW = NULL;\r
        BOOL ret = FALSE;\r
-       \r
+\r
+       /* Check parameters */\r
+       if (FileName == NULL)\r
+       {\r
+               SetLastError(ERROR_INVALID_PARAMETER);\r
+               goto cleanup;\r
+       }\r
+\r
        len = MultiByteToWideChar(CP_ACP, 0, FileName, -1, NULL, 0);\r
        if (len == 0)\r
                goto cleanup;\r
@@ -70,6 +77,13 @@ DeleteFileToRecycleBinW(
        PRECYCLE_BIN bin = NULL;\r
        BOOL ret = FALSE;\r
 \r
+       /* Check parameters */\r
+       if (FileName == NULL)\r
+       {\r
+               SetLastError(ERROR_INVALID_PARAMETER);\r
+               goto cleanup;\r
+       }\r
+\r
        /* Get full file name */\r
        while (TRUE)\r
        {\r
@@ -145,7 +159,7 @@ BOOL WINAPI
 EnumerateRecycleBinA(\r
        IN CHAR driveLetter,\r
        IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback,\r
-       IN PVOID Context)\r
+       IN PVOID Context OPTIONAL)\r
 {\r
        return EnumerateRecycleBinW((WCHAR)driveLetter, pFnCallback, Context);\r
 }\r
@@ -202,11 +216,18 @@ BOOL WINAPI
 EnumerateRecycleBinW(\r
        IN WCHAR driveLetter,\r
        IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback,\r
-       IN PVOID Context)\r
+       IN PVOID Context OPTIONAL)\r
 {\r
        PRECYCLE_BIN bin = NULL;\r
        BOOL ret = FALSE;\r
 \r
+       /* Check parameters */\r
+       if (pFnCallback == NULL)\r
+       {\r
+               SetLastError(ERROR_INVALID_PARAMETER);\r
+               goto cleanup;\r
+       }\r
+\r
        /* Open recycle bin */\r
        bin = IntReferenceRecycleBin(driveLetter);\r
        if (!bin)\r
@@ -235,7 +256,7 @@ BOOL WINAPI
 GetDeletedFileDetailsA(\r
        IN HANDLE hDeletedFile,\r
        IN DWORD BufferSize,\r
-       IN OUT PDELETED_FILE_DETAILS_A FileDetails,\r
+       IN OUT PDELETED_FILE_DETAILS_A FileDetails OPTIONAL,\r
        OUT LPDWORD RequiredSize OPTIONAL)\r
 {\r
        PDELETED_FILE_DETAILS_W FileDetailsW = NULL;\r
@@ -279,7 +300,7 @@ BOOL WINAPI
 GetDeletedFileDetailsW(\r
        IN HANDLE hDeletedFile,\r
        IN DWORD BufferSize,\r
-       IN OUT PDELETED_FILE_DETAILS_W FileDetails,\r
+       IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL,\r
        OUT LPDWORD RequiredSize OPTIONAL)\r
 {\r
        BOOL ret = FALSE;\r
index ef69a34..cdbca4b 100644 (file)
@@ -68,12 +68,12 @@ BOOL WINAPI
 EnumerateRecycleBinA(\r
        IN CHAR driveLetter,\r
        IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback,\r
-       IN PVOID Context);\r
+       IN PVOID Context OPTIONAL);\r
 BOOL WINAPI\r
 EnumerateRecycleBinW(\r
        IN WCHAR driveLetter,\r
        IN PENUMERATE_RECYCLEBIN_CALLBACK pFnCallback,\r
-       IN PVOID Context);\r
+       IN PVOID Context OPTIONAL);\r
 #ifdef UNICODE\r
 #define EnumerateRecycleBin EnumerateRecycleBinW\r
 #else\r
@@ -84,13 +84,13 @@ BOOL WINAPI
 GetDeletedFileDetailsA(\r
        IN HANDLE hDeletedFile,\r
        IN DWORD BufferSize,\r
-       IN OUT PDELETED_FILE_DETAILS_A FileDetails,\r
+       IN OUT PDELETED_FILE_DETAILS_A FileDetails OPTIONAL,\r
        OUT LPDWORD RequiredSize OPTIONAL);\r
 BOOL WINAPI\r
 GetDeletedFileDetailsW(\r
        IN HANDLE hDeletedFile,\r
        IN DWORD BufferSize,\r
-       IN OUT PDELETED_FILE_DETAILS_W FileDetails,\r
+       IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL,\r
        OUT LPDWORD RequiredSize OPTIONAL);\r
 #ifdef UNICODE\r
 #define GetDeletedFileDetails GetDeletedFileDetailsW\r
index 0efa411..a49fecf 100644 (file)
@@ -22,14 +22,14 @@ typedef struct _RECYCLE_BIN *PRECYCLE_BIN;
 struct _REFCOUNT_DATA;\r
 typedef struct _REFCOUNT_DATA *PREFCOUNT_DATA;\r
 \r
-typedef BOOL (*PINT_ENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HANDLE hDeletedFile);\r
+typedef BOOL (*PINT_ENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context OPTIONAL, IN HANDLE hDeletedFile);\r
 typedef BOOL (*PDESTROY_DATA)    (IN PREFCOUNT_DATA pData);\r
 \r
 typedef BOOL (*PCLOSE_HANDLE)    (IN HANDLE hHandle);\r
 typedef BOOL (*PDELETE_FILE)     (IN PRECYCLE_BIN bin, IN LPCWSTR FullPath, IN LPCWSTR FileName);\r
 typedef BOOL (*PEMPTY_RECYCLEBIN)(IN PRECYCLE_BIN* bin);\r
-typedef BOOL (*PENUMERATE_FILES) (IN PRECYCLE_BIN bin, IN PINT_ENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context);\r
-typedef BOOL (*PGET_DETAILS)     (IN PRECYCLE_BIN bin, IN HANDLE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_W FileDetails, OUT LPDWORD RequiredSize OPTIONAL);\r
+typedef BOOL (*PENUMERATE_FILES) (IN PRECYCLE_BIN bin, IN PINT_ENUMERATE_RECYCLEBIN_CALLBACK pFnCallback, IN PVOID Context OPTIONAL);\r
+typedef BOOL (*PGET_DETAILS)     (IN PRECYCLE_BIN bin, IN HANDLE hDeletedFile, IN DWORD BufferSize, IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL, OUT LPDWORD RequiredSize OPTIONAL);\r
 typedef BOOL (*PRESTORE_FILE)    (IN PRECYCLE_BIN bin, IN HANDLE hDeletedFile);\r
 \r
 typedef struct _RECYCLEBIN_CALLBACKS\r
index 5d8b96d..866290e 100644 (file)
@@ -189,13 +189,13 @@ static BOOL
 EnumerateFiles5(\r
        IN PRECYCLE_BIN bin,\r
        IN PINT_ENUMERATE_RECYCLEBIN_CALLBACK pFnCallback,\r
-       IN PVOID Context)\r
+       IN PVOID Context OPTIONAL)\r
 {\r
        INFO2_HEADER Header;\r
        DELETED_FILE_RECORD DeletedFile;\r
        DWORD bytesRead, dwEntries;\r
        BOOL ret = FALSE;\r
-               \r
+\r
        if (SetFilePointer(bin->hInfo, 0, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)\r
                goto cleanup;\r
        if (!ReadFile(bin->hInfo, &Header, sizeof(INFO2_HEADER), &bytesRead, NULL))\r
@@ -227,7 +227,7 @@ EnumerateFiles5(
                if (SetFilePointer(bin->hInfo, sizeof(INFO2_HEADER) + Header.dwRecordSize * dwEntries, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)\r
                        goto cleanup;\r
        }\r
-       \r
+\r
        ret = TRUE;\r
 \r
 cleanup:\r
@@ -239,7 +239,7 @@ GetDetails5(
        IN PRECYCLE_BIN bin,\r
        IN HANDLE hDeletedFile,\r
        IN DWORD BufferSize,\r
-       IN OUT PDELETED_FILE_DETAILS_W FileDetails,\r
+       IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL,\r
        OUT LPDWORD RequiredSize OPTIONAL)\r
 {\r
        DELETED_FILE_RECORD DeletedFile;\r
@@ -248,9 +248,16 @@ GetDetails5(
        HANDLE hFile = INVALID_HANDLE_VALUE;\r
        BOOL ret = FALSE;\r
 \r
+       /* Check parameters */\r
+       if (BufferSize > 0 && FileDetails == NULL)\r
+       {\r
+               SetLastError(ERROR_INVALID_PARAMETER);\r
+               goto cleanup;\r
+       }\r
+\r
        if (!IntSearchRecord(bin, hDeletedFile, &DeletedFile, NULL))\r
                goto cleanup;\r
-       Needed = (DWORD)FIELD_OFFSET(DELETED_FILE_DETAILS_W, FileName) + (wcslen(DeletedFile.FileNameW) + 1) * sizeof(WCHAR);\r
+       Needed = FIELD_OFFSET(DELETED_FILE_DETAILS_W, FileName) + (wcslen(DeletedFile.FileNameW) + 1) * sizeof(WCHAR);\r
        if (RequiredSize)\r
                *RequiredSize = (DWORD)Needed;\r
        if (Needed > BufferSize)\r
@@ -304,7 +311,7 @@ RestoreFile5(
        DELETED_FILE_RECORD DeletedFile, LastFile;\r
        LPWSTR FullName = NULL;\r
        BOOL ret = FALSE;\r
-               \r
+\r
        if (SetFilePointer(bin->hInfo, 0, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)\r
                goto cleanup;\r
        if (!ReadFile(bin->hInfo, &Header, sizeof(INFO2_HEADER), &bytesRead, NULL))\r
@@ -330,7 +337,7 @@ RestoreFile5(
        /* Restore file */\r
        if (!MoveFileW(FullName, DeletedFile.FileNameW))\r
                goto cleanup;\r
-       \r
+\r
        /* Update INFO2 */\r
        /* 1) If not last entry, copy last entry to the current one */\r
        if (SetFilePointer(bin->hInfo, -sizeof(DELETED_FILE_RECORD), NULL, FILE_END) == INVALID_SET_FILE_POINTER)\r
@@ -434,7 +441,7 @@ IntEmptyRecycleBinCallback(
 \r
        if (!IntGetFullName(bin, &DeletedFile, &FullName))\r
                goto cleanup;\r
-       \r
+\r
        if (!IntDeleteRecursive(FullName))\r
                goto cleanup;\r
        ret = TRUE;\r
@@ -489,7 +496,7 @@ IntSearchRecord(
        DELETED_FILE_RECORD DeletedFile;\r
        DWORD bytesRead, dwEntries;\r
        BOOL ret = FALSE;\r
-               \r
+\r
        if (SetFilePointer(bin->hInfo, 0, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)\r
                goto cleanup;\r
        if (!ReadFile(bin->hInfo, &Header, sizeof(INFO2_HEADER), &bytesRead, NULL))\r
index 47047d6..f6a0a3a 100644 (file)
@@ -26,7 +26,7 @@ CloseHandle5(
 \r
 static BOOL\r
 DeleteFile5(\r
-       IN PRECYCLE_BIN Context,\r
+       IN PRECYCLE_BIN bin,\r
        IN LPCWSTR FullPath,\r
        IN LPCWSTR FileName);\r
 \r
@@ -38,19 +38,19 @@ static BOOL
 EnumerateFiles5(\r
        IN PRECYCLE_BIN bin,\r
        IN PINT_ENUMERATE_RECYCLEBIN_CALLBACK pFnCallback,\r
-       IN PVOID Context);\r
+       IN PVOID Context OPTIONAL);\r
 \r
 static BOOL\r
 GetDetails5(\r
        IN PRECYCLE_BIN bin,\r
        IN HANDLE hDeletedFile,\r
        IN DWORD BufferSize,\r
-       IN OUT PDELETED_FILE_DETAILS_W FileDetails,\r
+       IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL,\r
        OUT LPDWORD RequiredSize OPTIONAL);\r
 \r
 static BOOL\r
 RestoreFile5(\r
-       IN PRECYCLE_BIN Context,\r
+       IN PRECYCLE_BIN bin,\r
        IN HANDLE hDeletedFile);\r
 \r
 static BOOL\r