diff --git a/cmd/nvidia-ctk/cdi/generate/generate.go b/cmd/nvidia-ctk/cdi/generate/generate.go index 4e930e05..008145ad 100644 --- a/cmd/nvidia-ctk/cdi/generate/generate.go +++ b/cmd/nvidia-ctk/cdi/generate/generate.go @@ -167,11 +167,15 @@ func (m command) run(c *cli.Context, cfg *config) error { return nil } - err = createParentDirsIfRequired(cfg.output) - if err != nil { - return fmt.Errorf("failed to create parent folders for output file: %v", err) + path := cfg.output + if filepath.Clean(filepath.Dir(path)) == "." { + pwd, err := os.Getwd() + if err != nil { + return fmt.Errorf("failed to get current working directory: %v", err) + } + path = filepath.Join(pwd, path) } - return spec.Save(cfg.output) + return spec.Save(path) } func formatFromFilename(filename string) string { @@ -270,14 +274,3 @@ func MergeDeviceSpecs(deviceSpecs []specs.Device, mergedDeviceName string) (spec } return merged, nil } - -// createParentDirsIfRequired creates the parent folders of the specified path if requried. -// Note that MkdirAll does not specifically check whether the specified path is non-empty and raises an error if it is. -// The path will be empty if filename in the current folder is specified, for example -func createParentDirsIfRequired(filename string) error { - dir := filepath.Dir(filename) - if dir == "" { - return nil - } - return os.MkdirAll(dir, 0755) -}