3
3
using Hexa . NET . Utilities ;
4
4
using System ;
5
5
using System . Collections . Generic ;
6
+ using System . Diagnostics ;
7
+ using System . Diagnostics . CodeAnalysis ;
6
8
using System . IO ;
9
+ using System . Reflection ;
7
10
using System . Runtime . CompilerServices ;
8
11
using System . Runtime . InteropServices ;
9
12
using System . Text ;
13
+ using static System . Runtime . InteropServices . JavaScript . JSType ;
10
14
using Utils = HexaGen . Runtime . Utils ;
11
15
12
16
public static unsafe partial class FileUtilities
@@ -124,6 +128,7 @@ private static nint StartSearch(StdWString st, out WIN32_FIND_DATA data)
124
128
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
125
129
private static FileMetadata Convert ( WIN32_FIND_DATA data , StdWString path )
126
130
{
131
+ Dump ( & data ) ;
127
132
FileMetadata metadata = new ( ) ;
128
133
int length = StrLen ( data . cFileName ) ;
129
134
StdWString str = new ( length + path . Size + 1 ) ;
@@ -534,6 +539,7 @@ private static bool TryReadDir(nint dirHandle, out DirEnt dirEnt)
534
539
535
540
private static FileMetadata Convert ( DirEnt entry , StdString path )
536
541
{
542
+ Dump ( & entry ) ;
537
543
int length = NET . Utilities . Utils . StrLen ( entry . d_name ) ;
538
544
StdWString str = new ( path . Size + length ) ;
539
545
str . Append ( path ) ;
@@ -551,6 +557,56 @@ private static FileMetadata Convert(DirEnt entry, StdString path)
551
557
return meta ;
552
558
}
553
559
560
+ [ RequiresDynamicCode ( "" ) ]
561
+ public static void Dump < [ DynamicallyAccessedMembers ( DynamicallyAccessedMemberTypes . PublicFields | DynamicallyAccessedMemberTypes . NonPublicFields ) ] T > ( T * ptr ) where T : unmanaged
562
+ {
563
+ byte * p = ( byte * ) ptr ;
564
+ int sizeInBytes = sizeof ( T ) ;
565
+ Type type = typeof ( T ) ;
566
+ FieldInfo [ ] fields = type . GetFields ( BindingFlags . Public | BindingFlags . NonPublic | BindingFlags . Instance ) ;
567
+ ( FieldInfo info , int offset , int size ) [ ] offsetData = new ( FieldInfo info , int offset , int size ) [ fields . Length ] ;
568
+
569
+ int currentOffset = 0 ;
570
+ for ( int j = 0 ; j < fields . Length ; j ++ )
571
+ {
572
+ FieldInfo field = fields [ j ] ;
573
+ int size = Marshal . SizeOf ( field . FieldType ) ;
574
+ offsetData [ j ] = ( field , currentOffset , size ) ;
575
+ Console . WriteLine ( $ "Field: { field . Name } , Offset: { currentOffset : X8} , Size: { size } , Type: { field . FieldType } ") ;
576
+ currentOffset += size ;
577
+
578
+ }
579
+
580
+ int startInfo = 0 ;
581
+ for ( int i = 0 ; i < sizeInBytes ; i ++ )
582
+ {
583
+ ( FieldInfo info , int offset , int size ) ? info = default ;
584
+ for ( int k = startInfo ; k < offsetData . Length ; k ++ )
585
+ {
586
+ var x = offsetData [ k ] ;
587
+ if ( x . offset == i )
588
+ {
589
+ startInfo = k ;
590
+ info = x ;
591
+ break ;
592
+ }
593
+ if ( x . offset > i )
594
+ {
595
+ break ;
596
+ }
597
+ }
598
+ if ( info . HasValue )
599
+ {
600
+ Console . WriteLine ( $ "{ ( ( nint ) p + i ) : X8} : { p [ i ] : X} : { info . Value . info . Name } { info . Value . size } ") ;
601
+ }
602
+ else
603
+ {
604
+ Console . WriteLine ( $ "{ ( ( nint ) p + i ) : X8} : { p [ i ] : X} ") ;
605
+ }
606
+
607
+ }
608
+ }
609
+
554
610
private static void FileStat ( StdWString str , out Stat stat )
555
611
{
556
612
int strSize0 = Encoding . UTF8 . GetByteCount ( str . Data , str . Size ) ;
0 commit comments