diff --git a/src/fileio.c b/src/fileio.c
index 1c81682d..080f69ba 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1135,6 +1135,13 @@ static int fileio_imm(struct fioparms * fio,
         rc = loc;
       }
       break;
+
+    case FIO_WRITE:
+      avrdude_message(MSG_INFO,
+                      "%s: Invalid file format 'immediate' for output\n",
+                      progname);
+      return -1;
+
     default:
       avrdude_message(MSG_INFO, "%s: fileio: invalid operation=%d\n",
               progname, fio->op);
@@ -1248,27 +1255,32 @@ static int fileio_num(struct fioparms * fio,
 	       FILEFMT fmt)
 {
   const char *prefix;
+  const char *name;
   char cbuf[20];
   int base, i, num;
 
   switch (fmt) {
     case FMT_HEX:
+      name = "hex";
       prefix = "0x";
       base = 16;
       break;
 
     default:
     case FMT_DEC:
+      name = "decimal";
       prefix = "";
       base = 10;
       break;
 
     case FMT_OCT:
+      name = "octal";
       prefix = "0";
       base = 8;
       break;
 
     case FMT_BIN:
+      name = "binary";
       prefix = "0b";
       base = 2;
       break;
@@ -1278,6 +1290,13 @@ static int fileio_num(struct fioparms * fio,
   switch (fio->op) {
     case FIO_WRITE:
       break;
+
+    case FIO_READ:
+      avrdude_message(MSG_INFO,
+                      "%s: Invalid file format '%s' for input\n",
+                      progname, name);
+      return -1;
+
     default:
       avrdude_message(MSG_INFO, "%s: fileio: invalid operation=%d\n",
               progname, fio->op);
diff --git a/src/update.c b/src/update.c
index 8642f39d..29132724 100644
--- a/src/update.c
+++ b/src/update.c
@@ -238,12 +238,6 @@ int do_op(PROGRAMMER * pgm, struct avrpart * p, UPDATE * upd, enum updateflags f
     /*
      * read out the specified device memory and write it to a file
      */
-    if (upd->format == FMT_IMM) {
-      avrdude_message(MSG_INFO,
-                      "%s: Invalid file format 'immediate' for output\n",
-                      progname, upd->filename);
-      return -1;
-    }
     if (quell_progress < 2) {
       avrdude_message(MSG_INFO, "%s: reading %s%s memory:\n",
             progname, mem->desc, alias_mem_desc);
@@ -278,34 +272,6 @@ int do_op(PROGRAMMER * pgm, struct avrpart * p, UPDATE * upd, enum updateflags f
      * write the selected device memory using data from a file; first
      * read the data from the specified file
      */
-    const char *name = 0;
-    switch (upd->format) {
-    case FMT_HEX:
-      name = "hex";
-      break;
-
-    case FMT_DEC:
-      name = "decimal";
-      break;
-
-    case FMT_OCT:
-      name = "octal";
-      break;
-
-    case FMT_BIN:
-      name = "binary";
-      break;
-
-    default:
-      // no action needed
-      break;
-    }
-    if (name != 0) {
-      avrdude_message(MSG_INFO,
-                      "%s: Invalid file format '%s' for input\n",
-                      progname, name, upd->filename);
-      return -1;
-    }
     if (quell_progress < 2) {
       avrdude_message(MSG_INFO, "%s: reading input file \"%s\"\n",
                       progname,