1.1 --- a/tools/fetchdlls/main.cpp Fri Jul 11 06:51:21 2008 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,192 +0,0 @@
1.4 -#include <stdio.h>
1.5 -#include <windows.h>
1.6 -#include <DbgHelp.h>
1.7 -
1.8 -void mdmp_string(void *mdmp, RVA addr, char *buffer, size_t maxlength)
1.9 -{
1.10 - int len;
1.11 - MINIDUMP_STRING *str;
1.12 -
1.13 - str = (MINIDUMP_STRING *)((char *)mdmp + addr);
1.14 - len = WideCharToMultiByte(CP_UTF8,
1.15 - 0,
1.16 - str->Buffer,
1.17 - str->Length / sizeof(WCHAR),
1.18 - buffer,
1.19 - maxlength,
1.20 - NULL,
1.21 - NULL);
1.22 - buffer[len] = '\0';
1.23 -}
1.24 -
1.25 -int find_revision(const char *version, MINIDUMP_MODULE *module, const char *name)
1.26 -{
1.27 - FILE *fp;
1.28 - char msg[255];
1.29 - size_t i, len;
1.30 - char path[255];
1.31 - char buffer[3000];
1.32 - int last_revision;
1.33 -
1.34 - len = _snprintf(path, sizeof(path), "%s", name);
1.35 - for (i = 0; i < len; i++)
1.36 - {
1.37 - if (path[i] == '\\')
1.38 - {
1.39 - path[i] = '/';
1.40 - }
1.41 - }
1.42 -
1.43 - DeleteFile("_svnlog.txt");
1.44 - _snprintf(buffer,
1.45 - sizeof(buffer),
1.46 - "svn log svn://svn.alliedmods.net/svnroot/Packages/sourcemod/sourcemod-%d.%d/windows/base/addons/sourcemod/%s > _svnlog.txt",
1.47 - (module->VersionInfo.dwFileVersionMS >> 16),
1.48 - (module->VersionInfo.dwFileVersionMS & 0xFFFF),
1.49 - path);
1.50 - system(buffer);
1.51 -
1.52 - if ((fp = fopen("_svnlog.txt", "rt")) == NULL)
1.53 - {
1.54 - return -1;
1.55 - }
1.56 -
1.57 - _snprintf(msg,
1.58 - sizeof(msg),
1.59 - "sourcemod-%s",
1.60 - version);
1.61 -
1.62 - while (fgets(buffer, sizeof(buffer), fp) != NULL)
1.63 - {
1.64 - if (buffer[0] == 'r')
1.65 - {
1.66 - last_revision = atoi(&buffer[1]);
1.67 - }
1.68 - else if (strstr(buffer, msg) != NULL)
1.69 - {
1.70 - fclose(fp);
1.71 -
1.72 - _snprintf(buffer,
1.73 - sizeof(buffer),
1.74 - "svn export -q -r %d svn://svn.alliedmods.net/svnroot/Packages/sourcemod/sourcemod-%d.%d/windows/base/addons/sourcemod/%s",
1.75 - last_revision,
1.76 - (module->VersionInfo.dwFileVersionMS >> 16),
1.77 - (module->VersionInfo.dwFileVersionMS & 0xFFFF),
1.78 - path);
1.79 - system(buffer);
1.80 -
1.81 - return last_revision;
1.82 - }
1.83 - }
1.84 -
1.85 - fclose(fp);
1.86 -
1.87 - return -1;
1.88 -}
1.89 -
1.90 -int main(int argc, char **argv)
1.91 -{
1.92 - int rev;
1.93 - ULONG32 m;
1.94 - LPVOID mdmp;
1.95 - HANDLE hFile;
1.96 - const char *name;
1.97 - ULONG stream_size;
1.98 - char name_buf[255];
1.99 - HANDLE hFileMapping;
1.100 - MINIDUMP_MODULE *module;
1.101 - MINIDUMP_DIRECTORY *dir;
1.102 - MINIDUMP_MODULE_LIST *modules;
1.103 -
1.104 - if (argc < 3)
1.105 - {
1.106 - fprintf(stderr, "Usage: <build> <mdmp>\n");
1.107 - exit(-1);
1.108 - }
1.109 -
1.110 - if ((hFile = CreateFile(argv[2],
1.111 - GENERIC_READ,
1.112 - FILE_SHARE_READ,
1.113 - NULL,
1.114 - OPEN_EXISTING,
1.115 - FILE_ATTRIBUTE_NORMAL,
1.116 - NULL))
1.117 - == INVALID_HANDLE_VALUE)
1.118 - {
1.119 - fprintf(stderr, "Could not open file (error %d)\n", GetLastError());
1.120 - exit(-1);
1.121 - }
1.122 -
1.123 - hFileMapping = CreateFileMapping(
1.124 - hFile,
1.125 - NULL,
1.126 - PAGE_READONLY,
1.127 - 0,
1.128 - 0,
1.129 - NULL);
1.130 - if (hFileMapping == NULL)
1.131 - {
1.132 - fprintf(stderr, "Could not open file mapping (error %d)\n", GetLastError());
1.133 - CloseHandle(hFile);
1.134 - exit(-1);
1.135 - }
1.136 -
1.137 - mdmp = MapViewOfFile(hFileMapping,
1.138 - FILE_MAP_READ,
1.139 - 0,
1.140 - 0,
1.141 - 0);
1.142 - if (mdmp == NULL)
1.143 - {
1.144 - fprintf(stderr, "Could not create map view (error %d)\n", GetLastError());
1.145 - CloseHandle(hFileMapping);
1.146 - CloseHandle(hFile);
1.147 - exit(-1);
1.148 - }
1.149 -
1.150 - if (!MiniDumpReadDumpStream(mdmp,
1.151 - ModuleListStream,
1.152 - &dir,
1.153 - (void **)&modules,
1.154 - &stream_size))
1.155 - {
1.156 - fprintf(stderr, "Could not read the module list stream.\n");
1.157 - UnmapViewOfFile(mdmp);
1.158 - CloseHandle(hFileMapping);
1.159 - CloseHandle(hFile);
1.160 - }
1.161 -
1.162 - for (m = 0; m < modules->NumberOfModules; m++)
1.163 - {
1.164 - module = &modules->Modules[m];
1.165 -
1.166 - mdmp_string(mdmp, module->ModuleNameRva, name_buf, sizeof(name_buf));
1.167 -
1.168 - if ((name = strstr(name_buf, "sourcemod\\")) != NULL)
1.169 - {
1.170 - name += 10;
1.171 - fprintf(stdout,
1.172 - "looking for: %s (%d.%d.%d.%d of build %s)... ",
1.173 - name,
1.174 - (module->VersionInfo.dwFileVersionMS >> 16),
1.175 - (module->VersionInfo.dwFileVersionMS & 0xFFFF),
1.176 - (module->VersionInfo.dwFileVersionLS >> 16),
1.177 - (module->VersionInfo.dwFileVersionLS & 0xFFFF),
1.178 - argv[1]
1.179 - );
1.180 - fflush(stdout);
1.181 - if ((rev = find_revision(argv[1], module, name)) == -1)
1.182 - {
1.183 - fprintf(stdout, "not found :(\n");
1.184 - continue;
1.185 - }
1.186 - fprintf(stdout, "downloaded! (pkgrev %d)\n", rev);
1.187 - }
1.188 - }
1.189 -
1.190 - UnmapViewOfFile(mdmp);
1.191 - CloseHandle(hFileMapping);
1.192 - CloseHandle(hFile);
1.193 -
1.194 - return 0;
1.195 -}