Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Side by Side Diff: net/tools/dump_cache/dump_cache.cc

Issue 11299239: Adding a simple class for dumping the contents of a cache. Use this new class in dump_cache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/tools/dump_cache/cache_dumper.cc ('k') | net/tools/dump_cache/dump_files.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This command-line program dumps the contents of a set of cache files, either 5 // This command-line program dumps the contents of a set of cache files, either
6 // to stdout or to another set of cache files. 6 // to stdout or to another set of cache files.
7 7
8 #include <stdio.h> 8 #include <stdio.h>
9 #include <string> 9 #include <string>
10 10
11 #include "base/at_exit.h" 11 #include "base/at_exit.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/process_util.h" 13 #include "base/process_util.h"
14 #include "base/string_util.h" 14 #include "base/string_util.h"
15 #include "base/stringprintf.h" 15 #include "base/stringprintf.h"
16 #include "net/disk_cache/disk_format.h"
17 #include "net/tools/dump_cache/dump_files.h"
18 #include "net/tools/dump_cache/simple_cache_dumper.h"
19
20 #if defined(OS_WIN)
16 #include "base/win/scoped_handle.h" 21 #include "base/win/scoped_handle.h"
17 #include "net/disk_cache/disk_format.h" 22 #include "net/tools/dump_cache/upgrade_win.h"
23 #endif
18 24
19 enum Errors { 25 enum Errors {
20 GENERIC = -1, 26 GENERIC = -1,
21 ALL_GOOD = 0, 27 ALL_GOOD = 0,
22 INVALID_ARGUMENT = 1, 28 INVALID_ARGUMENT = 1,
23 FILE_ACCESS_ERROR, 29 FILE_ACCESS_ERROR,
24 UNKNOWN_VERSION, 30 UNKNOWN_VERSION,
25 TOOL_NOT_FOUND, 31 TOOL_NOT_FOUND,
26 }; 32 };
27 33
28 int GetMajorVersion(const FilePath& input_path);
29 int DumpContents(const FilePath& input_path);
30 int DumpHeaders(const FilePath& input_path);
31 int RunSlave(const FilePath& input_path, const std::wstring& pipe_number);
32 int CopyCache(const FilePath& output_path, HANDLE pipe, bool copy_to_text);
33 HANDLE CreateServer(std::wstring* pipe_number);
34
35 const char kUpgradeHelp[] = 34 const char kUpgradeHelp[] =
36 "\nIn order to use the upgrade function, a version of this tool that\n" 35 "\nIn order to use the upgrade function, a version of this tool that\n"
37 "understands the file format of the files to upgrade is needed. For\n" 36 "understands the file format of the files to upgrade is needed. For\n"
38 "instance, to upgrade files saved with file format 3.4 to version 5.2,\n" 37 "instance, to upgrade files saved with file format 3.4 to version 5.2,\n"
39 "a version of this program that was compiled with version 3.4 has to be\n" 38 "a version of this program that was compiled with version 3.4 has to be\n"
40 "located beside this executable, and named dump_cache_3.exe, and this\n" 39 "located beside this executable, and named dump_cache_3.exe, and this\n"
41 "executable should be compiled with version 5.2 being the current one."; 40 "executable should be compiled with version 5.2 being the current one.";
42 41
43 // Folders to read and write cache files. 42 // Folders to read and write cache files.
44 const char kInputPath[] = "input"; 43 const char kInputPath[] = "input";
(...skipping 18 matching lines...) Expand all
63 int Help() { 62 int Help() {
64 printf("warning: input files are modified by this tool\n"); 63 printf("warning: input files are modified by this tool\n");
65 printf("dump_cache --input=path1 [--output=path2]\n"); 64 printf("dump_cache --input=path1 [--output=path2]\n");
66 printf("--dump-headers: display file headers\n"); 65 printf("--dump-headers: display file headers\n");
67 printf("--dump-contents: display all entries\n"); 66 printf("--dump-contents: display all entries\n");
68 printf("--upgrade: copy contents to the output path\n"); 67 printf("--upgrade: copy contents to the output path\n");
69 printf("--dump-to-files: write the contents of the cache to files\n"); 68 printf("--dump-to-files: write the contents of the cache to files\n");
70 return INVALID_ARGUMENT; 69 return INVALID_ARGUMENT;
71 } 70 }
72 71
72 #if defined(OS_WIN)
73
73 // Starts a new process, to generate the files. 74 // Starts a new process, to generate the files.
74 int LaunchSlave(CommandLine command_line, 75 int LaunchSlave(CommandLine command_line,
75 const std::wstring& pipe_number, 76 const std::wstring& pipe_number,
76 int version) { 77 int version) {
77 bool do_upgrade = command_line.HasSwitch(kUpgrade); 78 bool do_upgrade = command_line.HasSwitch(kUpgrade);
78 bool do_convert_to_text = command_line.HasSwitch(kDumpToFiles); 79 bool do_convert_to_text = command_line.HasSwitch(kDumpToFiles);
79 80
80 if (do_upgrade) { 81 if (do_upgrade) {
81 FilePath program(base::StringPrintf(L"%ls%d", L"dump_cache", version)); 82 FilePath program(base::StringPrintf(L"%ls%d", L"dump_cache", version));
82 command_line.SetProgram(program); 83 command_line.SetProgram(program);
83 } 84 }
84 85
85 if (do_upgrade || do_convert_to_text) 86 if (do_upgrade || do_convert_to_text)
86 command_line.AppendSwitch(kSlave); 87 command_line.AppendSwitch(kSlave);
87 88
88 command_line.AppendSwitchNative(kPipe, pipe_number); 89 command_line.AppendSwitchNative(kPipe, pipe_number);
89 if (!base::LaunchProcess(command_line, base::LaunchOptions(), NULL)) { 90 if (!base::LaunchProcess(command_line, base::LaunchOptions(), NULL)) {
90 printf("Unable to launch the needed version of this tool: %ls\n", 91 printf("Unable to launch the needed version of this tool: %ls\n",
91 command_line.GetProgram().value().c_str()); 92 command_line.GetProgram().value().c_str());
92 printf(kUpgradeHelp); 93 printf(kUpgradeHelp);
93 return TOOL_NOT_FOUND; 94 return TOOL_NOT_FOUND;
94 } 95 }
95 return ALL_GOOD; 96 return ALL_GOOD;
96 } 97 }
97 98
99 #endif
100
98 // ----------------------------------------------------------------------- 101 // -----------------------------------------------------------------------
99 102
100 int main(int argc, const char* argv[]) { 103 int main(int argc, const char* argv[]) {
101 // Setup an AtExitManager so Singleton objects will be destroyed. 104 // Setup an AtExitManager so Singleton objects will be destroyed.
102 base::AtExitManager at_exit_manager; 105 base::AtExitManager at_exit_manager;
103 106
104 CommandLine::Init(argc, argv); 107 CommandLine::Init(argc, argv);
105 108
106 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 109 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
107 FilePath input_path = command_line.GetSwitchValuePath(kInputPath); 110 FilePath input_path = command_line.GetSwitchValuePath(kInputPath);
108 if (input_path.empty()) 111 if (input_path.empty())
109 return Help(); 112 return Help();
110 113
111 bool upgrade = false;
112 bool slave_required = false;
113 bool copy_to_text = false;
114 FilePath output_path = command_line.GetSwitchValuePath(kOutputPath); 114 FilePath output_path = command_line.GetSwitchValuePath(kOutputPath);
115 115
116 if (command_line.HasSwitch(kDumpToFiles)) {
117 net::SimpleCacheDumper dumper(input_path, output_path);
118 dumper.Run();
119 return 0;
120 }
121
122 #if defined(OS_WIN)
123 bool upgrade = false;
116 if (command_line.HasSwitch(kUpgrade)) 124 if (command_line.HasSwitch(kUpgrade))
117 upgrade = true; 125 upgrade = true;
118 if (command_line.HasSwitch(kDumpToFiles))
119 copy_to_text = true;
120 126
121 if (upgrade || copy_to_text) { 127 bool slave_required = false;
128 if (upgrade) {
122 if (output_path.empty()) 129 if (output_path.empty())
123 return Help(); 130 return Help();
124 slave_required = true; 131 slave_required = true;
125 } 132 }
126 133
127 int version = GetMajorVersion(input_path); 134 int version = GetMajorVersion(input_path);
128 if (!version) 135 if (!version)
129 return FILE_ACCESS_ERROR; 136 return FILE_ACCESS_ERROR;
130 137
131 if (version != disk_cache::kCurrentVersion >> 16) { 138 if (version != disk_cache::kCurrentVersion >> 16) {
(...skipping 14 matching lines...) Expand all
146 if (!server.IsValid()) { 153 if (!server.IsValid()) {
147 printf("Unable to create the server pipe\n"); 154 printf("Unable to create the server pipe\n");
148 return -1; 155 return -1;
149 } 156 }
150 157
151 int ret = LaunchSlave(command_line, pipe_number, version); 158 int ret = LaunchSlave(command_line, pipe_number, version);
152 if (ret) 159 if (ret)
153 return ret; 160 return ret;
154 } 161 }
155 162
156 if (upgrade || copy_to_text) 163 // TODO(rch): Remove the logic from CopyCache that is redundant with
157 return CopyCache(output_path, server, copy_to_text); 164 // SimpleCacheDumper.
165 if (upgrade)
166 return CopyCache(output_path, server, false);
158 167
159 if (slave_required) { 168 if (slave_required) {
160 // Wait until the slave starts dumping data before we quit. Lazy "fix" for a 169 // Wait until the slave starts dumping data before we quit. Lazy "fix" for a
161 // console quirk. 170 // console quirk.
162 Sleep(500); 171 Sleep(500);
163 return ALL_GOOD; 172 return ALL_GOOD;
164 } 173 }
165 174
166 if (command_line.HasSwitch(kDumpContents)) 175 if (command_line.HasSwitch(kDumpContents))
167 return DumpContents(input_path); 176 return DumpContents(input_path);
168 if (command_line.HasSwitch(kDumpHeaders)) 177 if (command_line.HasSwitch(kDumpHeaders))
169 return DumpHeaders(input_path); 178 return DumpHeaders(input_path);
179 #endif
170 return Help(); 180 return Help();
171 } 181 }
OLDNEW
« no previous file with comments | « net/tools/dump_cache/cache_dumper.cc ('k') | net/tools/dump_cache/dump_files.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698