Auto merge of #136769 - thaliaarchi:io-optional-methods/stdio, r=joboet · rust-lang/rust@60a3084 (original) (raw)

`@@ -97,39 +97,53 @@ const fn stderr_raw() -> StderrRaw {

`

97

97

``

98

98

`impl Read for StdinRaw {

`

99

99

`fn read(&mut self, buf: &mut [u8]) -> io::Result {

`

100

``

`-

handle_ebadf(self.0.read(buf), 0)

`

``

100

`+

handle_ebadf(self.0.read(buf), || Ok(0))

`

101

101

`}

`

102

102

``

103

103

`fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> io::Result<()> {

`

104

``

`-

handle_ebadf(self.0.read_buf(buf), ())

`

``

104

`+

handle_ebadf(self.0.read_buf(buf), || Ok(()))

`

105

105

`}

`

106

106

``

107

107

`fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result {

`

108

``

`-

handle_ebadf(self.0.read_vectored(bufs), 0)

`

``

108

`+

handle_ebadf(self.0.read_vectored(bufs), || Ok(0))

`

109

109

`}

`

110

110

``

111

111

`#[inline]

`

112

112

`fn is_read_vectored(&self) -> bool {

`

113

113

`self.0.is_read_vectored()

`

114

114

`}

`

115

115

``

``

116

`+

fn read_exact(&mut self, buf: &mut [u8]) -> io::Result<()> {

`

``

117

`+

if buf.is_empty() {

`

``

118

`+

return Ok(());

`

``

119

`+

}

`

``

120

`+

handle_ebadf(self.0.read_exact(buf), || Err(io::Error::READ_EXACT_EOF))

`

``

121

`+

}

`

``

122

+

``

123

`+

fn read_buf_exact(&mut self, buf: BorrowedCursor<'_>) -> io::Result<()> {

`

``

124

`+

if buf.capacity() == 0 {

`

``

125

`+

return Ok(());

`

``

126

`+

}

`

``

127

`+

handle_ebadf(self.0.read_buf_exact(buf), || Err(io::Error::READ_EXACT_EOF))

`

``

128

`+

}

`

``

129

+

116

130

`fn read_to_end(&mut self, buf: &mut Vec) -> io::Result {

`

117

``

`-

handle_ebadf(self.0.read_to_end(buf), 0)

`

``

131

`+

handle_ebadf(self.0.read_to_end(buf), || Ok(0))

`

118

132

`}

`

119

133

``

120

134

`fn read_to_string(&mut self, buf: &mut String) -> io::Result {

`

121

``

`-

handle_ebadf(self.0.read_to_string(buf), 0)

`

``

135

`+

handle_ebadf(self.0.read_to_string(buf), || Ok(0))

`

122

136

`}

`

123

137

`}

`

124

138

``

125

139

`impl Write for StdoutRaw {

`

126

140

`fn write(&mut self, buf: &[u8]) -> io::Result {

`

127

``

`-

handle_ebadf(self.0.write(buf), buf.len())

`

``

141

`+

handle_ebadf(self.0.write(buf), || Ok(buf.len()))

`

128

142

`}

`

129

143

``

130

144

`fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result {

`

131

``

`-

let total = || bufs.iter().map(|b| b.len()).sum();

`

132

``

`-

handle_ebadf_lazy(self.0.write_vectored(bufs), total)

`

``

145

`+

let total = || Ok(bufs.iter().map(|b| b.len()).sum());

`

``

146

`+

handle_ebadf(self.0.write_vectored(bufs), total)

`

133

147

`}

`

134

148

``

135

149

`#[inline]

`

`@@ -138,30 +152,30 @@ impl Write for StdoutRaw {

`

138

152

`}

`

139

153

``

140

154

`fn flush(&mut self) -> io::Result<()> {

`

141

``

`-

handle_ebadf(self.0.flush(), ())

`

``

155

`+

handle_ebadf(self.0.flush(), || Ok(()))

`

142

156

`}

`

143

157

``

144

158

`fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {

`

145

``

`-

handle_ebadf(self.0.write_all(buf), ())

`

``

159

`+

handle_ebadf(self.0.write_all(buf), || Ok(()))

`

146

160

`}

`

147

161

``

148

162

`fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> io::Result<()> {

`

149

``

`-

handle_ebadf(self.0.write_all_vectored(bufs), ())

`

``

163

`+

handle_ebadf(self.0.write_all_vectored(bufs), || Ok(()))

`

150

164

`}

`

151

165

``

152

166

`fn write_fmt(&mut self, fmt: fmt::Arguments<'_>) -> io::Result<()> {

`

153

``

`-

handle_ebadf(self.0.write_fmt(fmt), ())

`

``

167

`+

handle_ebadf(self.0.write_fmt(fmt), || Ok(()))

`

154

168

`}

`

155

169

`}

`

156

170

``

157

171

`impl Write for StderrRaw {

`

158

172

`fn write(&mut self, buf: &[u8]) -> io::Result {

`

159

``

`-

handle_ebadf(self.0.write(buf), buf.len())

`

``

173

`+

handle_ebadf(self.0.write(buf), || Ok(buf.len()))

`

160

174

`}

`

161

175

``

162

176

`fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result {

`

163

``

`-

let total = || bufs.iter().map(|b| b.len()).sum();

`

164

``

`-

handle_ebadf_lazy(self.0.write_vectored(bufs), total)

`

``

177

`+

let total = || Ok(bufs.iter().map(|b| b.len()).sum());

`

``

178

`+

handle_ebadf(self.0.write_vectored(bufs), total)

`

165

179

`}

`

166

180

``

167

181

`#[inline]

`

`@@ -170,32 +184,25 @@ impl Write for StderrRaw {

`

170

184

`}

`

171

185

``

172

186

`fn flush(&mut self) -> io::Result<()> {

`

173

``

`-

handle_ebadf(self.0.flush(), ())

`

``

187

`+

handle_ebadf(self.0.flush(), || Ok(()))

`

174

188

`}

`

175

189

``

176

190

`fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {

`

177

``

`-

handle_ebadf(self.0.write_all(buf), ())

`

``

191

`+

handle_ebadf(self.0.write_all(buf), || Ok(()))

`

178

192

`}

`

179

193

``

180

194

`fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> io::Result<()> {

`

181

``

`-

handle_ebadf(self.0.write_all_vectored(bufs), ())

`

``

195

`+

handle_ebadf(self.0.write_all_vectored(bufs), || Ok(()))

`

182

196

`}

`

183

197

``

184

198

`fn write_fmt(&mut self, fmt: fmt::Arguments<'_>) -> io::Result<()> {

`

185

``

`-

handle_ebadf(self.0.write_fmt(fmt), ())

`

186

``

`-

}

`

187

``

`-

}

`

188

``

-

189

``

`-

fn handle_ebadf(r: io::Result, default: T) -> io::Result {

`

190

``

`-

match r {

`

191

``

`-

Err(ref e) if stdio::is_ebadf(e) => Ok(default),

`

192

``

`-

r => r,

`

``

199

`+

handle_ebadf(self.0.write_fmt(fmt), || Ok(()))

`

193

200

`}

`

194

201

`}

`

195

202

``

196

``

`-

fn handle_ebadf_lazy(r: io::Result, default: impl FnOnce() -> T) -> io::Result {

`

``

203

`+

fn handle_ebadf(r: io::Result, default: impl FnOnce() -> io::Result) -> io::Result {

`

197

204

`match r {

`

198

``

`-

Err(ref e) if stdio::is_ebadf(e) => Ok(default()),

`

``

205

`+

Err(ref e) if stdio::is_ebadf(e) => default(),

`

199

206

` r => r,

`

200

207

`}

`

201

208

`}

`