diff options
| author | Dave Parks <davep@lindenlab.com> | 2010-12-02 21:34:01 -0600 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2010-12-02 21:34:01 -0600 | 
| commit | 98802a1ef99b7e5fb586dc259118fd58dc34631a (patch) | |
| tree | 51e183db55f7c3dfbc60bcc4ab09e700d8f7f51a /indra/viewer_components/updater/llupdateinstaller.cpp | |
| parent | 0be7fcf2a95a6d885bbef583966757d12fc9d18c (diff) | |
| parent | 680328dd78e1d31a2f8836919a0f6140a76af5f4 (diff) | |
Merge
Diffstat (limited to 'indra/viewer_components/updater/llupdateinstaller.cpp')
| -rw-r--r-- | indra/viewer_components/updater/llupdateinstaller.cpp | 90 | 
1 files changed, 90 insertions, 0 deletions
| diff --git a/indra/viewer_components/updater/llupdateinstaller.cpp b/indra/viewer_components/updater/llupdateinstaller.cpp new file mode 100644 index 0000000000..650ef88af4 --- /dev/null +++ b/indra/viewer_components/updater/llupdateinstaller.cpp @@ -0,0 +1,90 @@ +/**  + * @file llupdateinstaller.cpp + * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#include "linden_common.h" +#include <apr_file_io.h> +#include "llapr.h" +#include "llprocesslauncher.h" +#include "llupdateinstaller.h" +#include "lldir.h"  + + +namespace { +	class RelocateError {}; +	 +	 +	std::string copy_to_temp(std::string const & path) +	{ +		std::string scriptFile = gDirUtilp->getBaseFileName(path); +		std::string newPath = gDirUtilp->getExpandedFilename(LL_PATH_TEMP, scriptFile); +		apr_status_t status = apr_file_copy(path.c_str(), newPath.c_str(), APR_FILE_SOURCE_PERMS, gAPRPoolp); +		if(status != APR_SUCCESS) throw RelocateError(); +		 +		return newPath; +	} +} + + +int ll_install_update(std::string const & script, std::string const & updatePath, LLInstallScriptMode mode) +{ +	std::string actualScriptPath; +	switch(mode) { +		case LL_COPY_INSTALL_SCRIPT_TO_TEMP: +			try { +				actualScriptPath = copy_to_temp(script); +			} +			catch (RelocateError &) { +				return -1; +			} +			break; +		case LL_RUN_INSTALL_SCRIPT_IN_PLACE: +			actualScriptPath = script; +			break; +		default: +			llassert(!"unpossible copy mode"); +	} +	 +	llinfos << "UpdateInstaller: installing " << updatePath << " using " << +		actualScriptPath << LL_ENDL; +	 +	LLProcessLauncher launcher; +	launcher.setExecutable(actualScriptPath); +	launcher.addArgument(updatePath); +	launcher.addArgument(ll_install_failed_marker_path().c_str()); +	int result = launcher.launch(); +	launcher.orphan(); +	 +	return result; +} + + +std::string const & ll_install_failed_marker_path(void) +{ +	static std::string path; +	if(path.empty()) { +		path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLifeInstallFailed.marker"); +	} +	return path; +} | 
