@@ -21,38 +21,124 @@ void report_mcheck_fail(enum mcheck_status s)
2121}
2222#endif
2323
24- int main (int argc , char * * argv ) {
2524
26- fprintf (stderr , "pid: %d\n" , getpid ());
25+ #define MAX_PTR_NUM 20;
26+
27+ char * * ptrArray ;
28+
29+ int main (int argc , char * * argv ) {
30+ int num ;
31+ int ptrNumber = -1 ;
32+ int maxPtr = MAX_PTR_NUM ;
33+ int sizeArg ;
34+ char sizeTable [maxPtr ];
2735
2836 char buffer [1000 ];
37+ char cmd [1000 ];
38+ char arg1 [100 ];
39+ char arg2 [100 ];
40+
41+ memset (sizeTable , 0 , maxPtr );
42+ memset (cmd , 0 , 1000 );
43+ memset (arg1 , 0 , 100 );
44+ memset (arg2 , 0 , 100 );
45+
46+ fprintf (stderr , "pid: %d\n" , getpid ());
47+ ptrArray = malloc (sizeof (char * ) * 20 );
48+ for (int i = 0 ; i < maxPtr ; i ++ ){
49+ ptrArray [i ] = 0 ;
50+ }
2951 while (1 ) {
3052 fprintf (stderr , "> " );
3153 fgets (buffer , sizeof (buffer ), stdin );
32- char cmd [1000 ];
33- intptr_t arg1 , arg2 ;
34- int num = sscanf (buffer , "%s %" SCNiPTR " %" SCNiPTR , cmd , & arg1 , & arg2 );
54+ num = sscanf (buffer , "%s %s %s\n" , cmd , arg1 , arg2 );
3555 if (strcmp (cmd , "malloc" ) == 0 ) {
36- void * result = malloc (arg1 );
37- fprintf (stderr , "==> %p\n" , result );
56+ if (ptrNumber < maxPtr ){
57+ sizeArg = atoi ((const char * ) & arg1 );
58+ void * result = malloc (sizeArg );
59+ ptrNumber ++ ;
60+ sizeTable [ptrNumber ] = sizeArg ;
61+ ptrArray [ptrNumber ] = result ;
62+ strcpy (result , "none" );
63+ fprintf (stderr , "==> OK, %p\n" , result );
64+ }
65+ else {
66+ printf ("Max pointer reached, free or restart" );
67+ }
3868 } else if (strcmp (cmd , "free" ) == 0 ) {
39- free ((void * ) arg1 );
40- fprintf (stderr , "==> ok\n" );
41- } else if (strcmp (cmd , "show" ) == 0 ) {
42- if (num == 2 ) {
43- arg2 = 1 ;
69+ if (ptrNumber > -1 ){
70+ if (num == 1 ){
71+ free ((void * ) ptrArray [ptrNumber ]);
72+ ptrArray [ptrNumber ] = 0 ;
73+ sizeTable [ptrNumber ] = 0 ;
74+ fprintf (stderr , "==> ok\n" );
75+ ptrNumber -= 1 ;
76+ }
77+ else if (num == 2 ){
78+ int tmpArg = atoi ((const char * ) & arg1 );
79+ ptrArray [tmpArg ] = 0 ;
80+ sizeTable [tmpArg ] = 0 ;
81+ free ((void * ) ptrArray [tmpArg ]);
82+ ptrNumber -= 1 ;
83+ fprintf (stderr , "==> ok\n" );
84+ }
85+ }
86+ else {
87+ fprintf (stderr , "==> list empty :/\n" );
88+
89+ }
90+ } else if (strcmp (cmd , "write" ) == 0 ) {
91+ if (num == 1 ){
92+ printf ("write: write value [pointer index]\n" );
93+ }
94+ else if (num == 2 ){
95+ int len = strlen ((const char * ) & arg1 );
96+ strcpy (ptrArray [ptrNumber ], (const char * ) & arg1 );
97+ fprintf (stderr , "==> ok, wrote %s\n" , ptrArray [ptrNumber ]);
98+ }
99+ else if (num == 3 ){
100+ int len = strlen ((const char * ) & arg1 );
101+ int tmpArg2 = atoi ((const char * ) & arg2 );
102+ //if (tmpArg2 > ptrNumber){
103+ strcpy (ptrArray [tmpArg2 ], (const char * ) & arg1 );
104+ fprintf (stderr , "==> ok, wrote %s\n" , ptrArray [tmpArg2 ]);
105+ //}
106+ //else{
107+ // printf("Invalid Index\n");
108+ //}
44109 }
45- long * src = (long * ) arg1 ;
46- for (int i = 0 ; i < arg2 ; i ++ ) {
47- fprintf (stderr , "%p: %#16.0lx\n" , & src [i ], src [i ]);
110+ } else if (strcmp (cmd , "listp" ) == 0 ) {
111+ printf ("\n" );
112+ for (int i = 0 ; i < 20 ; i ++ ){
113+ if (ptrArray [i ]){
114+ printf ("%d - %p - %s - %d\n" , i , ptrArray [i ], ptrArray [i ], sizeTable [i ]);
115+ }
48116 }
117+ fprintf (stderr , "==> ok\n" );
118+ } else if (strcmp (cmd , "listpall" ) == 0 ) {
119+ int tmpIndex = 0 ;
120+ printf ("\n" );
121+ for (int i = 0 ; i < maxPtr ; i ++ ){
122+ printf ("%d - %p - %s - %d\n" , tmpIndex , ptrArray [tmpIndex ], ptrArray [tmpIndex ], sizeTable [i ]);
123+ tmpIndex ++ ;
124+ }
125+ fprintf (stderr , "==> ok\n" );
126+ } else if (strcmp (cmd , "clearlist" ) == 0 ) {
127+ ptrNumber = -1 ;
128+ for (int i = 0 ; i < maxPtr ; i ++ ){
129+ free (ptrArray [i ]);
130+ ptrArray [i ] = 0 ;
131+ memset (sizeTable , 0 , maxPtr );
132+ }
133+ fprintf (stderr , "==> ok, array cleared\n" );
49134#ifdef __GLIBC__
50135 } else if (strcmp (cmd , "usable" ) == 0 ) {
51136 fprintf (stderr , "usable size: %zu\n" , malloc_usable_size ((void * ) arg1 ));
52137 } else if (strcmp (cmd , "stats" ) == 0 ) {
53138 malloc_stats ();
54139 } else if (strcmp (cmd , "info" ) == 0 ) {
55140 malloc_info (0 , stdout );
141+ printf ("Ptrptr %d\n" , ptrNumber );
56142 } else if (strcmp (cmd , "mcheck" ) == 0 ) {
57143 fprintf (stderr , "==> %s\n" , mcheck (report_mcheck_fail ) == 0 ? "OK" : "ERROR" );
58144 } else if (strcmp (cmd , "mcheck_pedantic" ) == 0 ) {
@@ -66,7 +152,8 @@ int main(int argc, char ** argv) {
66152 }
67153#endif
68154 } else {
69- puts ("Commands: malloc n, free p, show p [n], usable p, stats, info, mprobe [p], mcheck, mcheck_pedantic" );
155+ puts ("Commands: malloc n, free p, usable p, stats, info, mprobe [p], mcheck, mcheck_pedantic, " );
156+ puts ("Commands: [BETA] write str, listp, listpall, clearlist\n" );
70157 }
71158 }
72- }
159+ }
0 commit comments