Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/toolkit/profile/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 2 kB image not shown  

Quelle  nsProfileLock.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef __nsProfileLock_h___
#define __nsProfileLock_h___

#include "nsIFile.h"

class nsIProfileUnlocker;

#if defined(XP_WIN)
#  include <windows.h>
#endif

#if defined(XP_UNIX)
#  include <signal.h>
#  include "prclist.h"
#endif

class nsProfileLock
#if defined(XP_UNIX)
    : public PRCList
#endif
{
 public:
  nsProfileLock();
  nsProfileLock(nsProfileLock& src);

  ~nsProfileLock();

  nsProfileLock& operator=(nsProfileLock& rhs);

  /**
   * Attempt to lock a profile directory.
   *
   * @param aProfileDir  [in] The profile directory to lock.
   * @param aUnlocker    [out] Optional. This is only returned when locking
   *                     fails with NS_ERROR_FILE_ACCESS_DENIED, and may not
   *                     be returned at all.
   * @throws NS_ERROR_FILE_ACCESS_DENIED if the profile is locked.
   */

  nsresult Lock(nsIFile* aProfileDir, nsIProfileUnlocker** aUnlocker);

  /**
   * Unlock a profile directory.  If you're unlocking the directory because
   * the application is in the process of shutting down because of a fatal
   * signal, set aFatalSignal to true.
   */

  nsresult Unlock(bool aFatalSignal = false);

  /**
   * Checks, if the given file has a name that matches potential lock file
   * names. It does not check, if it actually is the currently active lock.
   */

  static bool IsMaybeLockFile(nsIFile* aFile);

  /**
   * Clean up any left over files in the directory.
   */

  nsresult Cleanup();

  /**
   * Get the modification time of a replaced profile lock, otherwise 0.
   */

  nsresult GetReplacedLockTime(PRTime* aResult);

 private:
  bool mHaveLock;
  PRTime mReplacedLockTime;
  nsCOMPtr<nsIFile> mLockFile;

#if defined(XP_WIN)
  HANDLE mLockFileHandle;
#elif defined(XP_UNIX)

  struct RemovePidLockFilesExiting {
    RemovePidLockFilesExiting() = default;
    ~RemovePidLockFilesExiting() { RemovePidLockFiles(false); }
  };

  static void RemovePidLockFiles(bool aFatalSignal);
  static void FatalSignalHandler(int signo
#  ifdef SA_SIGINFO
                                 ,
                                 siginfo_t* info, void* context
#  endif
  );
  static PRCList mPidLockList;

  nsresult LockWithFcntl(nsIFile* aLockFile,
                         nsIProfileUnlocker** aUnlocker = nullptr);

  /**
   * @param aHaveFcntlLock if true, we've already acquired an fcntl lock so this
   * lock is merely an "obsolete" lock to keep out old Firefoxes
   */

  nsresult LockWithSymlink(nsIFile* aLockFile, bool aHaveFcntlLock);

  char* mPidLockFileName;
  int mLockFileDesc;
#endif
};

#endif /* __nsProfileLock_h___ */

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.