summaryrefslogtreecommitdiff
path: root/src/ToolBox/superpmi/mcs/verbmerge.h
blob: 222669dac08c0c98db6118c3a03b6b5a59ee8433 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//

//----------------------------------------------------------
// verbMerge.h - verb that merges multiple .MC into one .MCH file
//----------------------------------------------------------
#ifndef _verbMerge
#define _verbMerge

class verbMerge
{
public:
    static int DoWork(const char* nameOfOutputFile, const char* pattern, bool recursive);

private:
    typedef bool (*DirectoryFilterFunction_t)(WIN32_FIND_DATAA*);
    static bool DirectoryFilterDirectories(WIN32_FIND_DATAA* findData);
    static bool DirectoryFilterFile(WIN32_FIND_DATAA* findData);
    static int __cdecl WIN32_FIND_DATAA_qsort_helper(const void* p1, const void* p2);
    static int FilterDirectory(const char*                  searchPattern,
                               DirectoryFilterFunction_t    filter,
                               /* out */ WIN32_FIND_DATAA** ppFileArray,
                               int*                         pElemCount);

    static char* MergePathStrings(const char* dir, const char* file);

    static int AppendFile(HANDLE hFileOut, const char* fileName, unsigned char* buffer, size_t bufferSize);
    static int AppendAllInDir(HANDLE              hFileOut,
                              const char*         dir,
                              const char*         file,
                              unsigned char*      buffer,
                              size_t              bufferSize,
                              bool                recursive,
                              /* out */ LONGLONG* size);
};
#endif