// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build !go1.24

package mcp

import (
	"errors"
	"os"
	"path/filepath"
)

// withFile calls f on the file at join(dir, rel).
// It does not protect against path traversal attacks.
func withFile(dir, rel string, f func(*os.File) error) (err error) {
	file, err := os.Open(filepath.Join(dir, rel))
	if err != nil {
		return err
	}
	// Record error, in case f writes.
	defer func() { err = errors.Join(err, file.Close()) }()
	return f(file)
}
