github.com/minio/minio@v0.0.0-20240328213742-3f72439b8a27/internal/ioutil/append-file_nix.go (about)

     1  //go:build !windows
     2  // +build !windows
     3  
     4  // Copyright (c) 2015-2021 MinIO, Inc.
     5  //
     6  // This file is part of MinIO Object Storage stack
     7  //
     8  // This program is free software: you can redistribute it and/or modify
     9  // it under the terms of the GNU Affero General Public License as published by
    10  // the Free Software Foundation, either version 3 of the License, or
    11  // (at your option) any later version.
    12  //
    13  // This program is distributed in the hope that it will be useful
    14  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  // GNU Affero General Public License for more details.
    17  //
    18  // You should have received a copy of the GNU Affero General Public License
    19  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    20  
    21  package ioutil
    22  
    23  import (
    24  	"io"
    25  	"os"
    26  )
    27  
    28  // AppendFile - appends the file "src" to the file "dst"
    29  func AppendFile(dst string, src string, osync bool) error {
    30  	flags := os.O_WRONLY | os.O_APPEND | os.O_CREATE
    31  	if osync {
    32  		flags |= os.O_SYNC
    33  	}
    34  	appendFile, err := os.OpenFile(dst, flags, 0o666)
    35  	if err != nil {
    36  		return err
    37  	}
    38  	defer appendFile.Close()
    39  
    40  	srcFile, err := os.Open(src)
    41  	if err != nil {
    42  		return err
    43  	}
    44  	defer srcFile.Close()
    45  	_, err = io.Copy(appendFile, srcFile)
    46  	return err
    47  }