Correct compilation warning.

1) Modify src/common/mac/macho_walker.cc to remove a signed  vs unsigned comparison.

 2) Replace mktemp in test using AutoTmpDir that has been moved from client/mac/tests to common/tests.
Review URL: http://breakpad.appspot.com/328001

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@888 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
qsr@chromium.org
2011-11-23 14:22:05 +00:00
parent 84571a2b91
commit bad70be095
8 changed files with 157 additions and 133 deletions

View File

@@ -35,6 +35,7 @@
#include "common/linux/file_id.h"
#include "common/linux/synth_elf.h"
#include "common/test_assembler.h"
#include "common/tests/auto_tempdir.h"
#include "breakpad_googletest_includes.h"
using namespace google_breakpad;
@@ -65,19 +66,19 @@ TEST(FileIDStripTest, StripSelf) {
exe_name[len] = '\0';
// copy our binary to a temp file, and strip it
char templ[] = "/tmp/file-id-unittest-XXXXXX";
mktemp(templ);
AutoTempDir temp_dir;
std::string templ = temp_dir.path() + "/file-id-unittest";
char cmdline[4096];
sprintf(cmdline, "cp \"%s\" \"%s\"", exe_name, templ);
sprintf(cmdline, "cp \"%s\" \"%s\"", exe_name, templ.c_str());
ASSERT_EQ(system(cmdline), 0);
sprintf(cmdline, "strip \"%s\"", templ);
sprintf(cmdline, "strip \"%s\"", templ.c_str());
ASSERT_EQ(system(cmdline), 0);
uint8_t identifier1[sizeof(MDGUID)];
uint8_t identifier2[sizeof(MDGUID)];
FileID fileid1(exe_name);
EXPECT_TRUE(fileid1.ElfFileIdentifier(identifier1));
FileID fileid2(templ);
FileID fileid2(templ.c_str());
EXPECT_TRUE(fileid2.ElfFileIdentifier(identifier2));
char identifier_string1[37];
char identifier_string2[37];
@@ -86,7 +87,6 @@ TEST(FileIDStripTest, StripSelf) {
FileID::ConvertIdentifierToString(identifier2, identifier_string2,
37);
EXPECT_STREQ(identifier_string1, identifier_string2);
unlink(templ);
}
class FileIDTest : public testing::Test {

View File

@@ -105,9 +105,11 @@ bool MachoWalker::WalkHeader(int cpu_type) {
bool MachoWalker::ReadBytes(void *buffer, size_t size, off_t offset) {
if (memory_) {
if (offset < 0)
return false;
bool result = true;
if (offset + size > memory_size_) {
if (offset >= memory_size_)
if (static_cast<size_t>(offset) >= memory_size_)
return false;
size = memory_size_ - offset;
result = false;

View File

@@ -0,0 +1,98 @@
// Copyright (c) 2011, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Utility class for creating a temporary directory for unit tests
// that is deleted in the destructor.
#ifndef GOOGLE_BREAKPAD_COMMON_TESTS_AUTO_TEMPDIR
#define GOOGLE_BREAKPAD_COMMON_TESTS_AUTO_TEMPDIR
#include <dirent.h>
#include <sys/types.h>
#include <string>
#include "breakpad_googletest_includes.h"
#if !defined(__ANDROID__)
#define TEMPDIR "/tmp"
#else
#define TEMPDIR "/data/local/tmp"
#endif
namespace google_breakpad {
class AutoTempDir {
public:
AutoTempDir() {
char temp_dir[] = TEMPDIR "/breakpad.XXXXXXXXXX";
EXPECT_TRUE(mkdtemp(temp_dir) != NULL);
path_.assign(temp_dir);
}
~AutoTempDir() {
DeleteRecursively(path_);
}
const std::string& path() {
return path_;
}
private:
void DeleteRecursively(const std::string& path) {
// First remove any files in the dir
DIR* dir = opendir(path.c_str());
if (!dir)
return;
dirent* entry;
while ((entry = readdir(dir)) != NULL) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue;
std::string entry_path = path + "/" + entry->d_name;
struct stat stats;
EXPECT_TRUE(lstat(entry_path.c_str(), &stats) == 0);
if (S_ISDIR(stats.st_mode))
DeleteRecursively(entry_path);
else
EXPECT_TRUE(unlink(entry_path.c_str()) == 0);
}
EXPECT_TRUE(closedir(dir) == 0);
EXPECT_TRUE(rmdir(path.c_str()) == 0);
}
// prevent copy construction and assignment
AutoTempDir(const AutoTempDir&);
AutoTempDir& operator=(const AutoTempDir&);
std::string path_;
};
} // namespace google_breakpad
#endif // GOOGLE_BREAKPAD_COMMON_TESTS_AUTO_TEMPDIR