@@ -32,147 +32,153 @@ size_t PrintObj(const uint8_t* d, size_t shift, size_t len, int skip);
3232
3333void Byte2Hex (uint8_t ch )
3434{
35- static const uint8_t cnv []= {'0' ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'A' ,'B' ,'C' ,'D' ,'E' ,'F' };
36- write (stdout ,cnv + ((ch & (15 <<4 ))>>4 ),1 );
37- write (stdout ,cnv + (ch & 15 ),1 );
35+ static const uint8_t cnv []= {'0' ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'A' ,'B' ,'C' ,'D' ,'E' ,'F' };
36+ write (stdout ,cnv + ((ch & (15 <<4 ))>>4 ),1 );
37+ write (stdout ,cnv + (ch & 15 ),1 );
3838}
3939
4040void PrintSpc (int num )
4141{
42- int i ;
43- for (i = 0 ;i < num ;i ++ ) write (stdout ,& sp ,1 );
42+ int i ;
43+ for (i = 0 ; i < num ; i ++ ) write (stdout ,& sp ,1 );
4444}
4545
4646enum obj_type DetType (const uint8_t * d , size_t shift )
4747{
4848// write(2,d+shift,1);
49- if (d [shift ]== 'i' ) return OBJ_INT ;
50- if (d [shift ]== 'l' ) return OBJ_LST ;
51- if (d [shift ]== 'd' ) return OBJ_DCT ;
52- if (d [shift ]>=49 && d [shift ]<=57 ) return OBJ_STR ;
53- return OBJ_NUL ;
49+ if (d [shift ]== 'i' ) return OBJ_INT ;
50+ if (d [shift ]== 'l' ) return OBJ_LST ;
51+ if (d [shift ]== 'd' ) return OBJ_DCT ;
52+ if (d [shift ]>=49 && d [shift ]<=57 ) return OBJ_STR ;
53+ return OBJ_NUL ;
5454}
5555
5656size_t FindSym (const uint8_t * d , uint8_t s , size_t shift , size_t len )
5757{
58- size_t i ;
59-
60- for (i = shift ;i < len ;i ++ ) if (d [i ]== s ) return i ;
61- exit (2 );
58+ size_t i ;
59+
60+ for (i = shift ; i < len ; i ++ ) if (d [i ]== s ) return i ;
61+ exit (2 );
6262}
6363
6464size_t PrintObj (const uint8_t * d , size_t shift , size_t len , int skip )
6565{
66- switch (DetType (d ,shift ))
67- {
68- case (OBJ_NUL ): exit (2 );
69- case (OBJ_INT ): return PrintInt (d ,shift ,len );
70- case (OBJ_STR ): return PrintStr (d ,shift ,len );
71- case (OBJ_LST ): return PrintLst (d ,shift ,len ,skip );
72- case (OBJ_DCT ): return PrintDct (d ,shift ,len ,skip );
73- }
74- exit (2 );
66+ switch (DetType (d ,shift ))
67+ {
68+ case (OBJ_NUL ):
69+ exit (2 );
70+ case (OBJ_INT ):
71+ return PrintInt (d ,shift ,len );
72+ case (OBJ_STR ):
73+ return PrintStr (d ,shift ,len );
74+ case (OBJ_LST ):
75+ return PrintLst (d ,shift ,len ,skip );
76+ case (OBJ_DCT ):
77+ return PrintDct (d ,shift ,len ,skip );
78+ }
79+ exit (2 );
7580}
7681
7782size_t PrintInt (const uint8_t * d , size_t shift , size_t len )
7883{
79- size_t e = FindSym (d ,'e' ,shift ,len );
80- write (stdout ,d + shift + 1 ,e - shift - 1 );
81- return e + 1 ;
84+ size_t e = FindSym (d ,'e' ,shift ,len );
85+ write (stdout ,d + shift + 1 ,e - shift - 1 );
86+ return e + 1 ;
8287}
8388
8489size_t PrintStr (const uint8_t * d , size_t shift , size_t len )
8590{
86- size_t e = FindSym (d ,':' ,shift ,len );
87- int l = atoi ((const char * )(d + shift ));
88- if (e + l >=len ) exit (2 );
89- size_t p ;
90-
91- write (stdout ,& quo ,1 );
92- for (p = e + 1 ;p <=e + l ;p ++ )
93- {
94- if (d [p ]== 127 || d [p ]< 32 )
95- {
96- write (stdout ,& scr ,1 );
97- write (stdout ,& hxp ,1 );
98- Byte2Hex (d [p ]);
99- }
100- else if (d [p ]== '\\' )
101- {
102- write (stdout ,& scr ,1 );
103- write (stdout ,& scr ,1 );
104- }
105- else if (d [p ]== '\"' )
106- {
107- write (stdout ,& scr ,1 );
108- write (stdout ,& quo ,1 );
109- }
110- else write (stdout ,d + p ,1 );
111- }
112-
113- write (stdout ,& quo ,1 );
114- return e + l + 1 ;
91+ size_t e = FindSym (d ,':' ,shift ,len );
92+ int l = atoi ((const char * )(d + shift ));
93+ if (e + l >=len ) exit (2 );
94+ size_t p ;
95+
96+ write (stdout ,& quo ,1 );
97+ for (p = e + 1 ; p <=e + l ; p ++ )
98+ {
99+ if (d [p ]== 127 || d [p ]< 32 )
100+ {
101+ write (stdout ,& scr ,1 );
102+ write (stdout ,& hxp ,1 );
103+ Byte2Hex (d [p ]);
104+ }
105+ else if (d [p ]== '\\' )
106+ {
107+ write (stdout ,& scr ,1 );
108+ write (stdout ,& scr ,1 );
109+ }
110+ else if (d [p ]== '\"' )
111+ {
112+ write (stdout ,& scr ,1 );
113+ write (stdout ,& quo ,1 );
114+ }
115+ else write (stdout ,d + p ,1 );
116+ }
117+
118+ write (stdout ,& quo ,1 );
119+ return e + l + 1 ;
115120}
116121
117122size_t PrintLst (const uint8_t * d , size_t shift , size_t len , int skip )
118123{
119- size_t ishift = shift + 1 ;
120-
121- write (stdout ,& blst ,1 );
122- write (stdout ,& ret ,1 );
123-
124- while (d [ishift ]!= 'e' )
125- {
126- PrintSpc (skip + 1 );
127- ishift = PrintObj (d ,ishift ,len ,skip + 1 );
128- write (stdout ,& ret ,1 );
129- if (ishift >=len ) exit (2 );
130- }
131- PrintSpc (skip );
132- write (stdout ,& elst ,1 );
133- return ishift + 1 ;
124+ size_t ishift = shift + 1 ;
125+
126+ write (stdout ,& blst ,1 );
127+ write (stdout ,& ret ,1 );
128+
129+ while (d [ishift ]!= 'e' )
130+ {
131+ PrintSpc (skip + 1 );
132+ ishift = PrintObj (d ,ishift ,len ,skip + 1 );
133+ write (stdout ,& ret ,1 );
134+ if (ishift >=len ) exit (2 );
135+ }
136+ PrintSpc (skip );
137+ write (stdout ,& elst ,1 );
138+ return ishift + 1 ;
134139}
135140
136141size_t PrintDct (const uint8_t * d , size_t shift , size_t len , int skip )
137142{
138- size_t ishift = shift + 1 ;
139-
140- write (stdout ,& bdct ,1 );
141- write (stdout ,& ret ,1 );
142-
143- while (d [ishift ]!= 'e' )
144- {
145- PrintSpc (skip + 1 );
146- if (DetType (d ,ishift )!= OBJ_STR ) exit (2 );
147- ishift = PrintStr (d ,ishift ,len );
148- write (stdout ,& sp ,1 );
149- write (stdout ,& eqv ,1 );
150- write (stdout ,& sp ,1 );
151- ishift = PrintObj (d ,ishift ,len ,skip + 1 );
152- write (stdout ,& ret ,1 );
153- if (ishift >=len ) exit (2 );
154- }
155- PrintSpc (skip );
156- write (stdout ,& edct ,1 );
157- return ishift + 1 ;
143+ size_t ishift = shift + 1 ;
144+
145+ write (stdout ,& bdct ,1 );
146+ write (stdout ,& ret ,1 );
147+
148+ while (d [ishift ]!= 'e' )
149+ {
150+ PrintSpc (skip + 1 );
151+ if (DetType (d ,ishift )!= OBJ_STR ) exit (2 );
152+ ishift = PrintStr (d ,ishift ,len );
153+ write (stdout ,& sp ,1 );
154+ write (stdout ,& eqv ,1 );
155+ write (stdout ,& sp ,1 );
156+ ishift = PrintObj (d ,ishift ,len ,skip + 1 );
157+ write (stdout ,& ret ,1 );
158+ if (ishift >=len ) exit (2 );
159+ }
160+ PrintSpc (skip );
161+ write (stdout ,& edct ,1 );
162+ return ishift + 1 ;
158163}
159164
160165int main (int argc , char * * argv )
161166{
162- if (argc != 2 ) return 1 ;
163-
164- int fd ;
165- struct stat st ;
166- uint8_t * pdata ;
167-
168- fd = open (argv [1 ],O_RDONLY ); if (fd == -1 ) return 1 ;
169- if (fstat (fd ,& st )!= 0 ) return 1 ;
170- if (st .st_size == 0 ) return 1 ;
171- pdata = (uint8_t * ) mmap (0 ,st .st_size ,PROT_READ ,MAP_SHARED ,fd ,0 );
172- PrintDct (pdata ,0 ,st .st_size ,0 );
173- write (stdout ,& ret ,1 );
174- munmap (pdata ,st .st_size );
175- close (fd );
176-
177- return 0 ;
167+ if (argc != 2 ) return 1 ;
168+
169+ int fd ;
170+ struct stat st ;
171+ uint8_t * pdata ;
172+
173+ fd = open (argv [1 ],O_RDONLY );
174+ if (fd == -1 ) return 1 ;
175+ if (fstat (fd ,& st )!= 0 ) return 1 ;
176+ if (st .st_size == 0 ) return 1 ;
177+ pdata = (uint8_t * ) mmap (0 ,st .st_size ,PROT_READ ,MAP_SHARED ,fd ,0 );
178+ PrintDct (pdata ,0 ,st .st_size ,0 );
179+ write (stdout ,& ret ,1 );
180+ munmap (pdata ,st .st_size );
181+ close (fd );
182+
183+ return 0 ;
178184}
0 commit comments