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

Unified Diff: content/browser/geolocation/gps_location_provider_linux.cc

Issue 11571036: Linux: use generated library loader for libgps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more fixlets 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/geolocation/gps_location_provider_linux.cc
diff --git a/content/browser/geolocation/gps_location_provider_linux.cc b/content/browser/geolocation/gps_location_provider_linux.cc
index 279d65f4d0720f3dc74f2a583563a2b70ce1e3b3..74a9537dcbb55d0ee76c54ddae76968246bcc73d 100644
--- a/content/browser/geolocation/gps_location_provider_linux.cc
+++ b/content/browser/geolocation/gps_location_provider_linux.cc
@@ -4,7 +4,6 @@
#include "content/browser/geolocation/gps_location_provider_linux.h"
-#include <dlfcn.h>
#include <errno.h>
#include <algorithm>
@@ -18,10 +17,6 @@
#include "base/stringprintf.h"
#include "content/public/common/geoposition.h"
-#if defined(USE_LIBGPS)
-#include "third_party/gpsd/release-3.1/gps.h"
-#endif // defined(USE_LIBGPS)
-
namespace content {
namespace {
@@ -71,56 +66,21 @@ const char kLibGpsName[] = "libgps.so.20";
} // namespace
-LibGps::LibGps(void* dl_handle,
- gps_open_fn gps_open,
- gps_close_fn gps_close,
- gps_read_fn gps_read)
- : dl_handle_(dl_handle),
- gps_open_(gps_open),
- gps_close_(gps_close),
- gps_read_(gps_read),
- gps_data_(new gps_data_t),
+LibGps::LibGps()
+ : gps_data_(new gps_data_t),
is_open_(false) {
- DCHECK(gps_open_);
- DCHECK(gps_close_);
- DCHECK(gps_read_);
}
LibGps::~LibGps() {
Stop();
- if (dl_handle_) {
- const int err = dlclose(dl_handle_);
- DCHECK_EQ(0, err) << "Error closing dl handle: " << err;
- }
}
LibGps* LibGps::New() {
- void* dl_handle = dlopen(kLibGpsName, RTLD_LAZY);
- if (!dl_handle) {
- DLOG(WARNING) << "Could not open " << kLibGpsName << ": " << dlerror();
+ scoped_ptr<LibGps> libgps(new LibGps);
+ if (!libgps->libgps_loader_.Load(kLibGpsName))
return NULL;
- }
- DLOG(INFO) << "Loaded " << kLibGpsName;
-
- #define DECLARE_FN_POINTER(function) \
- function##_fn function = reinterpret_cast<function##_fn>( \
- dlsym(dl_handle, #function)); \
- if (!function) { \
- DLOG(WARNING) << "libgps " << #function << " error: " << dlerror(); \
- dlclose(dl_handle); \
- return NULL; \
- }
- DECLARE_FN_POINTER(gps_open);
- DECLARE_FN_POINTER(gps_close);
- DECLARE_FN_POINTER(gps_read);
- // We don't use gps_shm_read() directly, just to make sure that libgps has
- // the shared memory support.
- typedef int (*gps_shm_read_fn)(struct gps_data_t*);
- DECLARE_FN_POINTER(gps_shm_read);
- #undef DECLARE_FN_POINTER
-
- return new LibGps(dl_handle, gps_open, gps_close, gps_read);
+ return libgps.release();
}
bool LibGps::Start() {
@@ -128,7 +88,7 @@ bool LibGps::Start() {
return true;
errno = 0;
- if (gps_open_(GPSD_SHARED_MEMORY, 0, gps_data_.get()) != 0) {
+ if (libgps_loader_.gps_open(GPSD_SHARED_MEMORY, 0, gps_data_.get()) != 0) {
// See gps.h NL_NOxxx for definition of gps_open() error numbers.
DLOG(WARNING) << "gps_open() failed " << errno;
return false;
@@ -140,7 +100,7 @@ bool LibGps::Start() {
void LibGps::Stop() {
if (is_open_)
- gps_close_(gps_data_.get());
+ libgps_loader_.gps_close(gps_data_.get());
is_open_ = false;
}
@@ -153,7 +113,7 @@ bool LibGps::Read(Geoposition* position) {
return false;
}
- if (gps_read_(gps_data_.get()) < 0) {
+ if (libgps_loader_.gps_read(gps_data_.get()) < 0) {
DLOG(WARNING) << "gps_read() fails";
position->error_message = "gps_read() fails";
return false;
@@ -224,10 +184,7 @@ bool LibGps::GetPositionIfFixed(Geoposition* position) {
#else // !defined(USE_LIBGPS)
// Stub implementation of LibGps.
-LibGps::LibGps(void* dl_handle,
- gps_open_fn gps_open,
- gps_close_fn gps_close,
- gps_read_fn gps_read) {
+LibGps::LibGps() {
}
LibGps::~LibGps() {

Powered by Google App Engine
This is Rietveld 408576698