- enum detect_result result;
-
- result = try_detect (handle, sfm_detect);
- if (result == IO_ERROR)
- return NULL;
- else if (result == YES)
- return make_any_reader (SYSTEM_FILE,
- sfm_open_reader (handle, dict, NULL));
-
- result = try_detect (handle, pfm_detect);
- if (result == IO_ERROR)
- return NULL;
- else if (result == YES)
- return make_any_reader (PORTABLE_FILE,
- pfm_open_reader (handle, dict, NULL));
-
- msg (SE, _("\"%s\" is not a system or portable file."),
- fh_get_file_name (handle));
- return NULL;
+ const struct any_reader_class *class;
+ int retval;
+
+ retval = any_reader_detect (handle, &class);
+ if (retval <= 0)
+ {
+ if (retval == 0)
+ msg (SE, _("`%s' is not a system or portable file."),
+ fh_get_file_name (handle));
+ return NULL;
+ }
+
+ return class->open (handle);