summaryrefslogtreecommitdiffstats
path: root/chrome/browser/mac
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/mac')
-rw-r--r--chrome/browser/mac/relauncher.cc21
1 files changed, 10 insertions, 11 deletions
diff --git a/chrome/browser/mac/relauncher.cc b/chrome/browser/mac/relauncher.cc
index aaaacb9..d028d3e 100644
--- a/chrome/browser/mac/relauncher.cc
+++ b/chrome/browser/mac/relauncher.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -6,6 +6,7 @@
#include <ApplicationServices/ApplicationServices.h>
#include <AvailabilityMacros.h>
+#include <crt_externs.h>
#include <dlfcn.h>
#include <string.h>
#include <sys/event.h>
@@ -264,22 +265,20 @@ int RelauncherMain(const content::MainFunctionParams& main_parameters) {
// after the separator should be given to the relaunched process; it's also
// important to not treat the path to the relaunched process as a "loose"
// argument. NXArgc and NXArgv are pointers to the original argc and argv as
- // passed to main(), so use those. The typical mechanism to do this is to
- // provide "extern" declarations to access these, but they're only present
- // in the crt1.o start file. This function will be linked into the framework
- // dylib, having no direct access to anything in crt1.o. dlsym to the
- // rescue.
- const int* argcp = static_cast<const int*>(dlsym(RTLD_MAIN_ONLY, "NXArgc"));
+ // passed to main(), so use those. Access them through _NSGetArgc and
+ // _NSGetArgv because NXArgc and NXArgv are normally only available to a
+ // main executable via crt1.o and this code will run from a dylib, and
+ // because of http://crbug.com/139902.
+ const int* argcp = _NSGetArgc();
if (!argcp) {
- LOG(ERROR) << "dlsym NXArgc: " << dlerror();
+ NOTREACHED();
return 1;
}
int argc = *argcp;
- const char* const** argvp =
- static_cast<const char* const**>(dlsym(RTLD_MAIN_ONLY, "NXArgv"));
+ const char* const* const* argvp = _NSGetArgv();
if (!argvp) {
- LOG(ERROR) << "dlsym NXArgv: " << dlerror();
+ NOTREACHED();
return 1;
}
const char* const* argv = *argvp;