Index: soft/giet_vm/giet_fat32/fat32.c
===================================================================
--- soft/giet_vm/giet_fat32/fat32.c	(revision 616)
+++ soft/giet_vm/giet_fat32/fat32.c	(revision 617)
@@ -2243,5 +2243,5 @@
     parent     = _fat.inode_tree_root;   // Inode-Tree root 
     
-    while ( last == 0 )
+    while ( !last )
     {
         // get searched file/dir name
@@ -2259,24 +2259,42 @@
 #endif
 
-        // get child inode from parent directory
-        code = _get_child_from_parent( parent,
-                                       name,
-                                       &child );
-
-        // we  need to find the child inode for all non terminal names
-        if ( (code == 2) || ((code == 1 ) && (last == 0)) )
-        {
-
-#if (GIET_DEBUG_FAT & 1)
-if ( _get_proctime() > GIET_DEBUG_FAT )
-_printf("\n[DEBUG FAT] _get_inode_from_path() : neither parent, nor child found for <%s>\n", 
-        pathname );
-#endif
-            return 2;  // error : parent inode not found
-        }
-        
+        if ( _strncmp( name, "..", _strlen( name ) + 1 ) == 0)
+        {
+            // found special name "..", try to go up
+            code = 0;
+            if ( parent->parent )
+                child = parent->parent;
+            else
+                child = parent;
+        }
+        else if ( _strncmp( name, ".", _strlen( name ) + 1 ) == 0 )
+        {
+            // found special name ".", stay on the same level
+            code = 0;
+            child = parent;
+        }
+        else
+        {
+            // get child inode from parent directory
+            code = _get_child_from_parent( parent,
+                                           name,
+                                           &child );
+
+            // we need to find the child inode for all non terminal names
+            if ( (code == 2) || ((code == 1 ) && !last) )
+            {
+
+    #if (GIET_DEBUG_FAT & 1)
+    if ( _get_proctime() > GIET_DEBUG_FAT )
+    _printf("\n[DEBUG FAT] _get_inode_from_path() : neither parent, nor child found for <%s>\n",
+            pathname );
+    #endif
+                return 2;  // error : parent inode not found
+            }
+        }
+
         // update parent if not the last iteration
-        if ( last == 0 ) parent = child;
-
+        if ( !last )
+            parent = child;
     } // end while
 
