AmigaDOS Error Codes¶
dos.library functions report errors via IoErr() (also stored in pr_Result2 of the Process structure). This article is a complete reference to the error codes with their numeric values and meanings. Source: Ralph Babel's The Amiga Guru Book (1993, Ch. 18).
Note: Codes marked † are obsolete or never generated under Kickstart 2.0+. The
+marker indicates codes introduced or made functional in V36+. Constants are defined indos/dos.h.
Argument errors (103-122)¶
| Code | Constant | Meaning |
|---|---|---|
| 103 | ERROR_NO_FREE_STORE |
Not enough memory (fragmentation possible) |
| 105 † | ERROR_TASK_TABLE_FULL |
Process table full (obsolete; V2.0 unlimited CLIs) |
| 114 + | ERROR_BAD_TEMPLATE |
Invalid ReadArgs() template or ParsePattern() pattern |
| 115 + | ERROR_BAD_NUMBER |
Malformed /N argument or out-of-range parameter |
| 116 + | ERROR_REQUIRED_ARG_MISSING |
Missing required /A argument |
| 117 + | ERROR_KEY_NEEDS_ARG |
Value missing after a template keyword |
| 118 + | ERROR_TOO_MANY_ARGS |
Wrong number of arguments (no /M template) |
| 119 + | ERROR_UNMATCHED_QUOTES |
Unmatched quotation marks (actually returns 120) |
| 120 + | ERROR_LINE_TOO_LONG |
Argument line invalid or too long |
| 121 † | ERROR_FILE_NOT_OBJECT |
File not a load module (V2.0 uses 212/235 instead) |
| 122 † | ERROR_INVALID_RESIDENT_LIBRARY |
Invalid resident library (V2.0 returns 235 instead) |
Object and device errors (201-226)¶
| Code | Constant | Meaning |
|---|---|---|
| 201 † | ERROR_NO_DEFAULT_DIR |
No default directory (presumably a Tripos relic; never generated) |
| 202 | ERROR_OBJECT_IN_USE |
Object is being accessed; cannot delete/modify |
| 203 | ERROR_OBJECT_EXISTS |
Object already exists (e.g. rename destination) |
| 204 | ERROR_DIR_NOT_FOUND |
Directory not found (used by Dir command, not OS) |
| 205 | ERROR_OBJECT_NOT_FOUND |
File or directory does not exist |
| 206 | ERROR_BAD_STREAM_NAME |
Invalid console/window name (stream handler) |
| 207 | ERROR_OBJECT_TOO_LARGE |
File or directory too large (no inherent limit in native FS) |
| 209 | ERROR_ACTION_NOT_KNOWN |
Packet/handler operation not implemented |
| 210 | ERROR_INVALID_COMPONENT_NAME |
Invalid path name (empty, contains colon/control chars) |
| 211 | ERROR_INVALID_LOCK |
Bad lock pointer, wrong handler, or already freed |
| 212 | ERROR_OBJECT_WRONG_TYPE |
Wrong object type (e.g. Open() on a directory) |
| 213 | ERROR_DISK_NOT_VALIDATED |
Disk not validated yet; wait or check ID_VALIDATED |
| 214 | ERROR_DISK_WRITE_PROTECTED |
Volume is write-protected |
| 215 | ERROR_RENAME_ACROSS_DEVICES |
Cannot rename across different filesystems |
| 216 | ERROR_DIRECTORY_NOT_EMPTY |
Directory still contains entries |
| 217 | ERROR_TOO_MANY_LEVELS |
Too many symlink indirections (soft-link loop) |
| 218 | ERROR_DEVICE_NOT_MOUNTED |
Device not mounted |
| 219 | ERROR_SEEK_ERROR |
Seek beyond file bounds or other seek failure |
| 220 | ERROR_COMMENT_TOO_BIG |
Comment exceeds 79 characters |
| 221 | ERROR_DISK_FULL |
Partition full |
| 222 | ERROR_DELETE_PROTECTED |
Object has delete protection set |
| 223 | ERROR_WRITE_PROTECTED |
Object has write protection set (FFS/ROM filesystem) |
| 224 | ERROR_READ_PROTECTED |
Object has read protection set (FFS only) |
| 225 | ERROR_NOT_A_DOS_DISK |
Not an AmigaDOS disk (wrong format) |
| 226 | ERROR_NO_DISK |
No disk in drive |
System and loader errors (232-305)¶
| Code | Constant | Meaning |
|---|---|---|
| 232 | ERROR_NO_MORE_ENTRIES |
ExNext() has reached the end of the directory |
| 234 | ERROR_OBJECT_LINKED |
Object is a link (circular reference) |
| 235 | ERROR_BAD_HUNK |
Load module is ill-formed (bad hunk type; see Hunk Binary Format) |
| 236 | ERROR_NOT_IMPLEMENTED |
Function not implemented |
| 241 | ERROR_LOCK_COLLISION |
Lock collision (deadlock avoidance) |
| 242 | ERROR_LOCK_TIMEOUT |
Lock timed out |
| 243 | ERROR_UNLOCK_ERROR |
Error during UnLock() |
| 303 | ERROR_BUFFER_OVERFLOW |
Buffer too small for result |
| 304 | ERROR_BREAK |
User break (Ctrl-C / SIGBREAKF_CTRL_C) |
| 305 | ERROR_NOT_EXECUTABLE |
File is not executable (no E flag or not a load module) |
Using error codes¶
LONG err = IoErr();
if (err) {
PrintFault(err, "MyProgram"); /* prints "MyProgram: <error text>" */
}
Fault() converts a code to a human-readable string. SetIoErr() sets the return value for the next IoErr() call (useful for custom handlers). The Why CLI command prints the textual description of the last error.
Obsolescence note: Some codes (105, 121, 122, 201) were never generated under V36+ or were replaced by newer codes. They are retained for compatibility.
See Also¶
Sources: Ralph Babel, "The Amiga Guru Book" (Taunusstein, 1993), Chapter 18 — AmigaDOS Error Codes.
Raw: raw/rkm/guru-book.md
Updated: 2026-08-08