diff --git a/xpinstall/cleanup/InstallCleanupUnix.cpp b/xpinstall/cleanup/InstallCleanupUnix.cpp new file mode 100644 index 00000000000..991a6007ea5 --- /dev/null +++ b/xpinstall/cleanup/InstallCleanupUnix.cpp @@ -0,0 +1,97 @@ + +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Don Bragg + */ + +#include "InstallCleanup.h" +#include +#include + +//---------------------------------------------------------------------------- +// Native Unix file deletion function +//---------------------------------------------------------------------------- +int NativeDeleteFile(const char* aFileToDelete) +{ + struct stat fileStack; + if (stat(aFileToDelete, &fileStack)) + { + return DONE;// No file to delete, do nothing. + } + else + { + if(!unlink(aFileToDelete)) + return TRY_LATER; + } + return DONE; +} + +//---------------------------------------------------------------------------- +// Native Windows file replacement function +//---------------------------------------------------------------------------- +int NativeReplaceFile(const char* replacementFile, const char* doomedFile ) +{ + struct stat fileStack; + + // replacement file must exist, doomed file doesn't have to + if (!stat(replacementFile, &fileStack)) + return DONE; + + // don't have to do anything if the files are the same + if (strcmp(replacementFile, doomedFile)) + return DONE; + + if (!unlink(doomedFile)) + { + if (stat(doomedFile, &fileStack)) + return TRY_LATER; + } + else + { + // doomedFile is gone move new file into place + if (!rename(replacementFile, doomedFile)) + return TRY_LATER; // this shouldn't happen + } + + return DONE; +} + + +int main() +{ + HREG reg; + int status = DONE; + + if ( REGERR_OK == NR_StartupRegistry()) + { + if ( REGERR_OK == NR_RegOpen("", ®) ) + { + do { + status = PerformScheduledTasks(reg); + if (status != DONE) + sleep(15000); + } while (status == TRY_LATER); + } + NR_ShutdownRegistry(); + } + return(0); +} + diff --git a/xpinstall/cleanup/Makefile.in b/xpinstall/cleanup/Makefile.in new file mode 100644 index 00000000000..c6c280ffc56 --- /dev/null +++ b/xpinstall/cleanup/Makefile.in @@ -0,0 +1,46 @@ +# +# The contents of this file are subject to the Netscape Public +# License Version 1.1 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.mozilla.org/NPL/ +# +# Software distributed under the License is distributed on an "AS +# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +# implied. See the License for the specific language governing +# rights and limitations under the License. +# +# The Original Code is Mozilla Communicator client code, +# released March 31, 1998. +# +# The Initial Developer of the Original Code is Netscape Communications +# Corporation. Portions created by Netscape are +# Copyright (C) 1998 Netscape Communications Corporation. All +# Rights Reserved. +# +# Contributor(s): +# Samir Gehani +# + +DEPTH = ../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +PROGRAM = xpicleanup +REQUIRES = libreg + +CPPSRCS = \ + InstallCleanup.cpp \ + InstallCleanupUnix.cpp \ + $(NULL) + +LIBS = \ + -lmozregsa_s \ + $(NULL) + +DEFINES += -DSTANDALONE_REGISTRY + +include $(topsrcdir)/config/rules.mk +