github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/readline/editor.go (about)

     1  //go:build !windows
     2  // +build !windows
     3  
     4  package readline
     5  
     6  import (
     7  	"crypto/md5"
     8  	"encoding/hex"
     9  	"io"
    10  	"os"
    11  	"strconv"
    12  	"time"
    13  )
    14  
    15  func (rl *Instance) writeTempFile(content []byte) (string, error) {
    16  	fileID := strconv.Itoa(time.Now().Nanosecond()) + ":" + rl.line.String()
    17  
    18  	h := md5.New()
    19  	_, err := h.Write([]byte(fileID))
    20  	if err != nil {
    21  		return "", err
    22  	}
    23  
    24  	name := rl.TempDirectory + "readline-" + hex.EncodeToString(h.Sum(nil)) + "-" + strconv.Itoa(os.Getpid())
    25  
    26  	file, err := os.Create(name)
    27  	if err != nil {
    28  		return "", err
    29  	}
    30  
    31  	defer file.Close()
    32  
    33  	_, err = file.Write(content)
    34  	return name, err
    35  }
    36  
    37  func readTempFile(name string) ([]byte, error) {
    38  	file, err := os.Open(name)
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  
    43  	b, err := io.ReadAll(file)
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  
    48  	if len(b) > 0 && b[len(b)-1] == '\n' {
    49  		b = b[:len(b)-1]
    50  	}
    51  
    52  	if len(b) > 0 && b[len(b)-1] == '\r' {
    53  		b = b[:len(b)-1]
    54  	}
    55  
    56  	if len(b) > 0 && b[len(b)-1] == '\n' {
    57  		b = b[:len(b)-1]
    58  	}
    59  
    60  	if len(b) > 0 && b[len(b)-1] == '\r' {
    61  		b = b[:len(b)-1]
    62  	}
    63  
    64  	err = os.Remove(name)
    65  	return b, err
    66  }