+static int
+do_open_wim(const tchar *filename, filedes_t *fd_ret)
+{
+ int fd;
+
+ fd = topen(filename, O_RDONLY);
+ if (fd == INVALID_FILEDES) {
+ ERROR_WITH_ERRNO("Can't open \"%"TS"\" read-only", filename);
+ return WIMLIB_ERR_OPEN;
+ }
+ *fd_ret = fd;
+ return 0;
+}
+
+int
+reopen_wim(WIMStruct *w)
+{
+ wimlib_assert(w->in_fd == INVALID_FILEDES);
+ return do_open_wim(w->filename, &w->in_fd);
+}
+
+int
+close_wim(WIMStruct *w)
+{
+ if (w->in_fd != INVALID_FILEDES) {
+ close(w->in_fd);
+ w->in_fd = INVALID_FILEDES;
+ }
+ return 0;
+}
+