meow-7.2.2
Mark Palange (Mani) 2010-11-11 19:07:02 -08:00
commit 0f26013d1d
3 changed files with 47 additions and 8 deletions

View File

@ -147,6 +147,8 @@ void LLThread::shutdown()
{
// This thread just wouldn't stop, even though we gave it time
llwarns << "LLThread::~LLThread() exiting thread before clean exit!" << llendl;
// Put a stake in its heart.
apr_thread_exit(mAPRThreadp, -1);
return;
}
mAPRThreadp = NULL;

View File

@ -26,6 +26,9 @@
#include "linden_common.h"
#include <boost/format.hpp>
#include <libgen.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
@ -62,6 +65,7 @@ Boolean gCancelled = false;
const char *gUpdateURL;
const char *gProductName;
const char *gBundleID;
const char *gDmgFile;
void *updatethreadproc(void*);
@ -334,6 +338,10 @@ int parse_args(int argc, char **argv)
{
gBundleID = argv[j];
}
else if ((!strcmp(argv[j], "-dmg")) && (++j < argc))
{
gDmgFile = argv[j];
}
}
return 0;
@ -361,10 +369,11 @@ int main(int argc, char **argv)
gUpdateURL = NULL;
gProductName = NULL;
gBundleID = NULL;
gDmgFile = NULL;
parse_args(argc, argv);
if (!gUpdateURL)
if ((gUpdateURL == NULL) && (gDmgFile == NULL))
{
llinfos << "Usage: mac_updater -url <url> [-name <product_name>] [-program <program_name>]" << llendl;
llinfos << "Usage: mac_updater -url <url> | -dmg <dmg file> [-name <product_name>] [-program <program_name>]" << llendl;
exit(1);
}
else
@ -700,10 +709,14 @@ static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app)
// Looks promising. Check to see if it has the right bundle identifier.
if(isFSRefViewerBundle(&ref))
{
llinfos << name << " is the one" << llendl;
// This is the one. Return it.
*app = ref;
found = true;
} else {
llinfos << name << " is not the bundle we are looking for; move along" << llendl;
}
}
}
}
@ -921,6 +934,22 @@ void *updatethreadproc(void*)
#endif // 0 *HACK for DEV-11935
// Skip downloading the file if the dmg was passed on the command line.
std::string dmgName;
if(gDmgFile != NULL) {
dmgName = basename((char *)gDmgFile);
char * dmgDir = dirname((char *)gDmgFile);
strncpy(tempDir, dmgDir, sizeof(tempDir));
err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL);
if(err != noErr) throw 0;
chdir(tempDir);
goto begin_install;
} else {
// Continue on to download file.
dmgName = "SecondLife.dmg";
}
strncat(temp, "/SecondLifeUpdate_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);
if(mkdtemp(temp) == NULL)
{
@ -979,14 +1008,17 @@ void *updatethreadproc(void*)
fclose(downloadFile);
downloadFile = NULL;
}
begin_install:
sendProgress(0, 0, CFSTR("Mounting image..."));
LLFile::mkdir("mnt", 0700);
// NOTE: we could add -private at the end of this command line to keep the image from showing up in the Finder,
// but if our cleanup fails, this makes it much harder for the user to unmount the image.
std::string mountOutput;
FILE* mounter = popen("hdiutil attach SecondLife.dmg -mountpoint mnt", "r"); /* Flawfinder: ignore */
boost::format cmdFormat("hdiutil attach %s -mountpoint mnt");
cmdFormat % dmgName;
FILE* mounter = popen(cmdFormat.str().c_str(), "r"); /* Flawfinder: ignore */
if(mounter == NULL)
{
@ -1077,7 +1109,11 @@ void *updatethreadproc(void*)
// Move aside old version (into work directory)
err = FSMoveObject(&targetRef, &tempDirRef, &asideRef);
if(err != noErr)
{
llwarns << "failed to move aside old version (error code " <<
err << ")" << llendl;
throw 0;
}
// Grab the path for later use.
err = FSRefMakePath(&asideRef, (UInt8*)aside, sizeof(aside));
@ -1175,6 +1211,10 @@ void *updatethreadproc(void*)
llinfos << "Moving work directory to the trash." << llendl;
err = FSMoveObject(&tempDirRef, &trashFolderRef, NULL);
if(err != noErr) {
llwarns << "failed to move files to trash, (error code " <<
err << ")" << llendl;
}
// snprintf(temp, sizeof(temp), "rm -rf '%s'", tempDir);
// printf("%s\n", temp);

View File

@ -1,6 +1,3 @@
#! /bin/bash
hdiutil attach -nobrowse $1
cp -R /Volumes/Second\ Life\ Installer/Second\ Life\ Viewer\ 2.app /Applications
hdiutil detach /Volumes/Second\ Life\ Installer
open /Applications/Second\ Life\ Viewer\ 2.app
open ../Resources/mac-updater.app --args -dmg "$1" -name "Second Life Viewer 2"