diff --git a/unix/modos.c b/unix/modos.c
index 580722db7205cb4eda01de8dd5ae31c6a1159683..26ecdd5b13c6710989556c4fbd90d2675b6157de 100644
--- a/unix/modos.c
+++ b/unix/modos.c
@@ -184,7 +184,7 @@ STATIC mp_obj_t listdir_next(mp_obj_t self_in) {
     // DT_UNKNOWN should have 0 value on any reasonable system
     t->items[1] = MP_OBJ_NEW_SMALL_INT(0);
     #endif
-    #if !defined(_DIRENT_HAVE_D_INO) || _DIRENT_HAVE_D_INO
+    #ifdef _DIRENT_HAVE_D_INO
     t->items[2] = MP_OBJ_NEW_SMALL_INT(dirent->d_ino);
     #else
     t->items[2] = MP_OBJ_NEW_SMALL_INT(0);
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index 5fd122e96ed507beafba6361c7875ca314889a74..49f8794048b5c10e4e2a82da2014e53cff0c9d64 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -259,3 +259,8 @@ extern const struct _mp_obj_fun_builtin_t mp_builtin_open_obj;
 #ifndef _DIRENT_HAVE_D_TYPE
 #define _DIRENT_HAVE_D_TYPE (1)
 #endif
+// This macro is not provided by glibc but we need it so ports that don't have
+// dirent->d_ino can disable the use of this field.
+#ifndef _DIRENT_HAVE_D_INO
+#define _DIRENT_HAVE_D_INO (1)
+#endif
diff --git a/unix/mpconfigport_freedos.h b/unix/mpconfigport_freedos.h
index 780911fd610894122a843830597b272a0fdc49ac..772a92a62befb20767213d5d6af59512d3de2df7 100644
--- a/unix/mpconfigport_freedos.h
+++ b/unix/mpconfigport_freedos.h
@@ -35,4 +35,4 @@
 #define MICROPY_PY_SYS_PLATFORM "freedos"
 
 // djgpp dirent struct does not have d_ino field
-#define _DIRENT_HAVE_D_INO (0)
+#undef _DIRENT_HAVE_D_INO