Esempio n. 1
0
        private Stream TryOpenStandardInputStream(SandboxedProcessInfo info, out bool success)
        {
            success = true;

            if (info.StandardInputSourceInfo == null)
            {
                return(null);
            }

            try
            {
                if (info.StandardInputSourceInfo.Data != null)
                {
                    return(new MemoryStream(CharUtilities.Utf8NoBomNoThrow.GetBytes(info.StandardInputSourceInfo.Data)));
                }
                else
                {
                    Contract.Assert(info.StandardInputSourceInfo.File != null);

                    return(FileUtilities.CreateAsyncFileStream(
                               info.StandardInputSourceInfo.File,
                               FileMode.Open,
                               FileAccess.Read,
                               FileShare.Read | FileShare.Delete));
                }
            }
            catch (BuildXLException ex)
            {
                m_logger.LogError($"Unable to open standard input stream: {ex.ToString()}");
                success = false;
                return(null);
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Saves a pip cost hash table to a file.
 /// </summary>
 /// <exception cref="BuildXLException">
 /// Thrown if a recoverable error occurs while operating on the file.
 /// </exception>
 public async Task SaveAsync(string fileName)
 {
     Contract.Requires(fileName != null);
     using (FileStream fileStream = FileUtilities.CreateAsyncFileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.Delete))
     {
         await SaveAsync(fileStream);
     }
 }
Esempio n. 3
0
 /// <summary>
 /// Opens a pip cost hash table from a file.
 /// </summary>
 /// <exception cref="BuildXLException">
 /// Thrown if a recoverable error occurs while operating on the file.
 /// </exception>
 public static async Task <PipRuntimeTimeTable> LoadAsync(string fileName)
 {
     Contract.Requires(fileName != null);
     using (
         FileStream fileStream = FileUtilities.CreateAsyncFileStream(
             fileName,
             FileMode.Open,
             FileAccess.Read,
             FileShare.Read | FileShare.Delete))
     {
         return(await LoadAsync(fileStream));
     }
 }
Esempio n. 4
0
        /// <inheritdoc />
        public virtual async Task <CopyFileResult> CopyToAsync(OperationContext context, ContentLocation sourceLocation, Stream destinationStream, CopyOptions options)
        {
            var sourcePath = new AbsolutePath(sourceLocation.Machine.Path) / FileSystemContentStoreInternal.GetPrimaryRelativePath(sourceLocation.Hash, includeSharedFolder: false);

            if (!FileUtilities.Exists(sourcePath.Path))
            {
                return(new CopyFileResult(CopyResultCode.FileNotFoundError, $"Source file {sourcePath} doesn't exist."));
            }

            long startPosition = destinationStream.Position;

            using (Stream s = FileUtilities.CreateAsyncFileStream(sourcePath.Path, FileMode.Open, FileAccess.Read, FileShare.Read, FileOptions.Asynchronous | FileOptions.SequentialScan))
            {
                return(await s.CopyToAsync(destinationStream, 81920, context.Token).ContinueWith(_ => CopyFileResult.SuccessWithSize(destinationStream.Position - startPosition)));
            }
        }
Esempio n. 5
0
        /// <inheritdoc />
        public async Task <CopyFileResult> CopyToAsync(AbsolutePath sourcePath, Stream destinationStream, long expectedContentSize, CancellationToken cancellationToken)
        {
            // NOTE: Assumes source is local
            Contract.Assert(sourcePath.IsLocal);

            if (!FileUtilities.Exists(sourcePath.Path))
            {
                return(new CopyFileResult(CopyFileResult.ResultCode.SourcePathError, $"Source file {sourcePath} doesn't exist."));
            }

            long startPosition = destinationStream.Position;

            using (Stream s = FileUtilities.CreateAsyncFileStream(sourcePath.Path, FileMode.Open, FileAccess.Read, FileShare.Read, FileOptions.Asynchronous | FileOptions.SequentialScan))
            {
                return(await s.CopyToAsync(destinationStream, 81920, cancellationToken).ContinueWith(_ => CopyFileResult.SuccessWithSize(destinationStream.Position - startPosition)));
            }
        }