| Index: src/common/linux/symbol_upload.cc
|
| diff --git a/src/tools/linux/symupload/sym_upload.cc b/src/common/linux/symbol_upload.cc
|
| similarity index 61%
|
| copy from src/tools/linux/symupload/sym_upload.cc
|
| copy to src/common/linux/symbol_upload.cc
|
| index 2f9a73c39f8b6e2e8866e6462de264bb88c7605a..bbd3181e16ad80d5e617215efdc0625fd3457b2c 100644
|
| --- a/src/tools/linux/symupload/sym_upload.cc
|
| +++ b/src/common/linux/symbol_upload.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2006, Google Inc.
|
| +// Copyright (c) 2011 Google Inc.
|
| // All rights reserved.
|
| //
|
| // Redistribution and use in source and binary forms, with or without
|
| @@ -27,44 +27,23 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -// symupload.cc: Upload a symbol file to a HTTP server. The upload is sent as
|
| -// a multipart/form-data POST request with the following parameters:
|
| -// code_file: the basename of the module, e.g. "app"
|
| -// debug_file: the basename of the debugging file, e.g. "app"
|
| -// debug_identifier: the debug file's identifier, usually consisting of
|
| -// the guid and age embedded in the pdb, e.g.
|
| -// "11111111BBBB3333DDDD555555555555F"
|
| -// version: the file version of the module, e.g. "1.2.3.4"
|
| -// os: the operating system that the module was built for
|
| -// cpu: the CPU that the module was built for
|
| -// symbol_file: the contents of the breakpad-format symbol file
|
| +// symbol_upload.cc: implemented google_breakpad::sym_upload::Start, a helper
|
| +// function for linux symbol upload tool.
|
| +
|
| +#include "common/linux/http_upload.h"
|
| +#include "common/linux/symbol_upload.h"
|
|
|
| #include <assert.h>
|
| #include <stdio.h>
|
| -#include <stdlib.h>
|
| -#include <unistd.h>
|
|
|
| #include <functional>
|
| -#include <iostream>
|
| -#include <string>
|
| #include <vector>
|
|
|
| -#include "common/linux/http_upload.h"
|
| -#include "common/using_std_string.h"
|
| -
|
| -using google_breakpad::HTTPUpload;
|
| -
|
| -typedef struct {
|
| - string symbolsPath;
|
| - string uploadURLStr;
|
| - string proxy;
|
| - string proxy_user_pwd;
|
| - string version;
|
| - bool success;
|
| -} Options;
|
| +namespace google_breakpad {
|
| +namespace sym_upload {
|
|
|
| -static void TokenizeByChar(const string &source_string,
|
| - int c, std::vector<string> *results) {
|
| +void TokenizeByChar(const string &source_string, int c,
|
| + std::vector<string> *results) {
|
| assert(results);
|
| string::size_type cur_pos = 0, next_pos = 0;
|
| while ((next_pos = source_string.find(c, cur_pos)) != string::npos) {
|
| @@ -79,8 +58,8 @@ static void TokenizeByChar(const string &source_string,
|
| //=============================================================================
|
| // Parse out the module line which have 5 parts.
|
| // MODULE <os> <cpu> <uuid> <module-name>
|
| -static bool ModuleDataForSymbolFile(const string &file,
|
| - std::vector<string> *module_parts) {
|
| +bool ModuleDataForSymbolFile(const string &file,
|
| + std::vector<string> *module_parts) {
|
| assert(module_parts);
|
| const size_t kModulePartNumber = 5;
|
| FILE* fp = fopen(file.c_str(), "r");
|
| @@ -107,7 +86,7 @@ static bool ModuleDataForSymbolFile(const string &file,
|
| }
|
|
|
| //=============================================================================
|
| -static string CompactIdentifier(const string &uuid) {
|
| +string CompactIdentifier(const string &uuid) {
|
| std::vector<string> components;
|
| TokenizeByChar(uuid, '-', &components);
|
| string result;
|
| @@ -117,7 +96,7 @@ static string CompactIdentifier(const string &uuid) {
|
| }
|
|
|
| //=============================================================================
|
| -static void Start(Options *options) {
|
| +void Start(Options *options) {
|
| std::map<string, string> parameters;
|
| options->success = false;
|
| std::vector<string> module_parts;
|
| @@ -172,66 +151,5 @@ static void Start(Options *options) {
|
| options->success = success;
|
| }
|
|
|
| -//=============================================================================
|
| -static void
|
| -Usage(int argc, const char *argv[]) {
|
| - fprintf(stderr, "Submit symbol information.\n");
|
| - fprintf(stderr, "Usage: %s [options...] <symbols> <upload-URL>\n", argv[0]);
|
| - fprintf(stderr, "Options:\n");
|
| - fprintf(stderr, "<symbols> should be created by using the dump_syms tool.\n");
|
| - fprintf(stderr, "<upload-URL> is the destination for the upload\n");
|
| - fprintf(stderr, "-v:\t Version information (e.g., 1.2.3.4)\n");
|
| - fprintf(stderr, "-x:\t <host[:port]> Use HTTP proxy on given port\n");
|
| - fprintf(stderr, "-u:\t <user[:password]> Set proxy user and password\n");
|
| - fprintf(stderr, "-h:\t Usage\n");
|
| - fprintf(stderr, "-?:\t Usage\n");
|
| -}
|
| -
|
| -//=============================================================================
|
| -static void
|
| -SetupOptions(int argc, const char *argv[], Options *options) {
|
| - extern int optind;
|
| - int ch;
|
| -
|
| - while ((ch = getopt(argc, (char * const *)argv, "u:v:x:h?")) != -1) {
|
| - switch (ch) {
|
| - case 'h':
|
| - case '?':
|
| - Usage(argc, argv);
|
| - exit(0);
|
| - break;
|
| - case 'u':
|
| - options->proxy_user_pwd = optarg;
|
| - break;
|
| - case 'v':
|
| - options->version = optarg;
|
| - break;
|
| - case 'x':
|
| - options->proxy = optarg;
|
| - break;
|
| -
|
| - default:
|
| - fprintf(stderr, "Invalid option '%c'\n", ch);
|
| - Usage(argc, argv);
|
| - exit(1);
|
| - break;
|
| - }
|
| - }
|
| -
|
| - if ((argc - optind) != 2) {
|
| - fprintf(stderr, "%s: Missing symbols file and/or upload-URL\n", argv[0]);
|
| - Usage(argc, argv);
|
| - exit(1);
|
| - }
|
| -
|
| - options->symbolsPath = argv[optind];
|
| - options->uploadURLStr = argv[optind + 1];
|
| -}
|
| -
|
| -//=============================================================================
|
| -int main(int argc, const char* argv[]) {
|
| - Options options;
|
| - SetupOptions(argc, argv, &options);
|
| - Start(&options);
|
| - return options.success ? 0 : 1;
|
| -}
|
| +} // namespace sym_upload
|
| +} // namespace google_breakpad
|
|
|