author Dustin J. Mitchell <>
Mon, 02 Oct 2017 18:22:56 +0000
changeset 399728 0f0395687d36597098e4248457ed69f092c39f8f
parent 392280 abe5e28c49908b8a94196b73a787656a546bac9c
child 404365 a04f505f94540b4297f34a0704cbfad7b7d6bb79
permissions -rw-r--r--
Bug 1403519 - only build docs when necessary r=gps This marks **/docs/** as exclusively docs, and code that is autodoc'd as inclusively docs. That means that a change that purely modifies documentation files will *only* run `docs` tasks, while a change that modifies autodoc'd source code will *additionaly* run `docs` tasks. The tasks do not run by default. MozReview-Commit-ID: G9tOK0AwtrI

/* -*- 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 */

#ifndef FileOperations_h
#define FileOperations_h

#include <stdio.h>
#include <string>

#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>

// Make sure that all directories on path exist, excluding the final element of
// the path.
void ensurePath(std::string Path);

std::string getAbsolutePath(const std::string &Filename);

// Lock the given filename so that it cannot be opened by anyone else until this
// object goes out of scope. On Windows, we use a named mutex. On POSIX
// platforms, we use flock.
struct AutoLockFile {
  int FileDescriptor = -1;

#if defined(_WIN32) || defined(_WIN64)
  HANDLE Handle = NULL;

  AutoLockFile(const std::string &Filename);

  bool success();

  FILE *openFile(const char *Mode);
  bool truncateFile(size_t Length);