Skip to content

Commit

Permalink
windows: podman save allow the use of stdout
Browse files Browse the repository at this point in the history
By default podman save tries to write to /dev/stdout, this file doe snot
exists on windows and cannot be opened. Instead we should just use fd 1
in such case.

[NO NEW TESTS NEEDED]

Fixes containers#18147

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 committed Apr 27, 2023
1 parent af185b2 commit aca9936
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions pkg/domain/infra/tunnel/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,10 +282,19 @@ func (ir *ImageEngine) Save(ctx context.Context, nameOrID string, tags []string,
defer func() { _ = os.Remove(f.Name()) }()
}
default:
// This code was added to allow for opening stdout replacing
// os.Create(opts.Output) which was attempting to open the file
// for read/write which fails on Darwin platforms
f, err = os.OpenFile(opts.Output, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
// This is ugly but I think the best we can do for now,
// on windows there is no /dev/stdout but the save command defaults to /dev/stdout.
// The proper thing to do would be to pass an io.Writer down from the cli frontend
// but since the local save API does not support an io.Writer this is impossible.
// I reported it a while ago in https://github.com/containers/common/issues/1275
if opts.Output == "/dev/stdout" {
f = os.Stdout
} else {
// This code was added to allow for opening stdout replacing
// os.Create(opts.Output) which was attempting to open the file
// for read/write which fails on Darwin platforms
f, err = os.OpenFile(opts.Output, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
}
}
if err != nil {
return err
Expand Down

0 comments on commit aca9936

Please sign in to comment.