@@ -92,11 +92,11 @@ addToLibrary({
9292        node . node_ops  =  MEMFS . ops_table . chrdev . node ; 
9393        node . stream_ops  =  MEMFS . ops_table . chrdev . stream ; 
9494      } 
95-       node . timestamp  =  Date . now ( ) ; 
95+       node . atime   =   node . mtime   =   node . ctime  =  Date . now ( ) ; 
9696      // add the new node to the parent 
9797      if  ( parent )  { 
9898        parent . contents [ name ]  =  node ; 
99-         parent . timestamp  =  node . timestamp ; 
99+         parent . atime  =  parent . mtime   =   parent . ctime   =   node . atime ; 
100100      } 
101101      return  node ; 
102102    } , 
@@ -161,21 +161,20 @@ addToLibrary({
161161        }  else  { 
162162          attr . size  =  0 ; 
163163        } 
164-         attr . atime  =  new  Date ( node . timestamp ) ; 
165-         attr . mtime  =  new  Date ( node . timestamp ) ; 
166-         attr . ctime  =  new  Date ( node . timestamp ) ; 
164+         attr . atime  =  new  Date ( node . atime ) ; 
165+         attr . mtime  =  new  Date ( node . mtime ) ; 
166+         attr . ctime  =  new  Date ( node . ctime ) ; 
167167        // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), 
168168        //       but this is not required by the standard. 
169169        attr . blksize  =  4096 ; 
170170        attr . blocks  =  Math . ceil ( attr . size  /  attr . blksize ) ; 
171171        return  attr ; 
172172      } , 
173173      setattr ( node ,  attr )  { 
174-         if  ( attr . mode  !==  undefined )  { 
175-           node . mode  =  attr . mode ; 
176-         } 
177-         if  ( attr . timestamp  !==  undefined )  { 
178-           node . timestamp  =  attr . timestamp ; 
174+         for  ( const  key  of  [ "mode" ,  "atime" ,  "mtime" ,  "ctime" ] )  { 
175+           if  ( attr [ key ] )  { 
176+             node [ key ]  =  attr [ key ] ; 
177+           } 
179178        } 
180179        if  ( attr . size  !==  undefined )  { 
181180          MEMFS . resizeFileStorage ( node ,  attr . size ) ; 
@@ -207,22 +206,21 @@ addToLibrary({
207206        } 
208207        // do the internal rewiring 
209208        delete  old_node . parent . contents [ old_node . name ] ; 
210-         old_node . parent . timestamp  =  Date . now ( ) 
211-         old_node . name  =  new_name ; 
212209        new_dir . contents [ new_name ]  =  old_node ; 
213-         new_dir . timestamp  =  old_node . parent . timestamp ; 
210+         old_node . name  =  new_name ; 
211+         new_dir . ctime  =  new_dir . mtime  =  old_node . parent . ctime  =  old_node . parent . mtime  =  Date . now ( ) ; 
214212      } , 
215213      unlink ( parent ,  name )  { 
216214        delete  parent . contents [ name ] ; 
217-         parent . timestamp  =  Date . now ( ) ; 
215+         parent . ctime   =   parent . mtime  =  Date . now ( ) ; 
218216      } , 
219217      rmdir ( parent ,  name )  { 
220218        var  node  =  FS . lookupNode ( parent ,  name ) ; 
221219        for  ( var  i  in  node . contents )  { 
222220          throw  new  FS . ErrnoError ( { { {  cDefs . ENOTEMPTY  } } } ) ; 
223221        } 
224222        delete  parent . contents [ name ] ; 
225-         parent . timestamp  =  Date . now ( ) ; 
223+         parent . ctime   =   parent . mtime  =  Date . now ( ) ; 
226224      } , 
227225      readdir ( node )  { 
228226        var  entries  =  [ '.' ,  '..' ] ; 
@@ -282,7 +280,7 @@ addToLibrary({
282280
283281        if  ( ! length )  return  0 ; 
284282        var  node  =  stream . node ; 
285-         node . timestamp  =  Date . now ( ) ; 
283+         node . mtime   =   node . ctime  =  Date . now ( ) ; 
286284
287285        if  ( buffer . subarray  &&  ( ! node . contents  ||  node . contents . subarray ) )  {  // This write is from a typed array to a typed array? 
288286          if  ( canOwn )  { 
0 commit comments