mirror of
https://git.zx2c4.com/wireguard-windows
synced 2024-11-10 16:59:18 +00:00
6ed37f30f5
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
47 lines
1.0 KiB
Go
47 lines
1.0 KiB
Go
/* SPDX-License-Identifier: MIT
|
||
*
|
||
* Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved.
|
||
*/
|
||
|
||
package ui
|
||
|
||
import (
|
||
"os"
|
||
|
||
"github.com/lxn/walk"
|
||
|
||
"golang.zx2c4.com/wireguard/windows/l18n"
|
||
)
|
||
|
||
func writeFileWithOverwriteHandling(owner walk.Form, filePath string, write func(file *os.File) error) bool {
|
||
showError := func(err error) bool {
|
||
if err == nil {
|
||
return false
|
||
}
|
||
|
||
showErrorCustom(owner, l18n.Sprintf("Writing file failed"), err.Error())
|
||
|
||
return true
|
||
}
|
||
|
||
file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_EXCL, 0o600)
|
||
if err != nil {
|
||
if os.IsExist(err) {
|
||
if walk.DlgCmdNo == walk.MsgBox(owner, l18n.Sprintf("Writing file failed"), l18n.Sprintf(`File ‘%s’ already exists.
|
||
|
||
Do you want to overwrite it?`, filePath), walk.MsgBoxYesNo|walk.MsgBoxDefButton2|walk.MsgBoxIconWarning) {
|
||
return false
|
||
}
|
||
|
||
if file, err = os.Create(filePath); err != nil {
|
||
return !showError(err)
|
||
}
|
||
} else {
|
||
return !showError(err)
|
||
}
|
||
}
|
||
defer file.Close()
|
||
|
||
return !showError(write(file))
|
||
}
|