CMGDK r49-rc2
|
00001 / * C o p y r i g h t ( C ) 2 0 0 0 M y S Q L A B 00002 00003 T h i s p r o g r a m i s f r e e s o f t w a r e ; y o u c a n r e d i s t r i b u t e i t a n d / o r m o d i f y 00004 00005 i t u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e a s p u b l i s h e d b y 00006 00007 t h e F r e e S o f t w a r e F o u n d a t i o n ; v e r s i o n 2 o f t h e L i c e n s e . 00008 00009 T h i s p r o g r a m i s d i s t r i b u t e d i n t h e h o p e t h a t i t w i l l b e u s e f u l , 00010 00011 b u t W I T H O U T A N Y W A R R A N T Y ; w i t h o u t e v e n t h e i m p l i e d w a r r a n t y o f 00012 00013 M E R C H A N T A B I L I T Y o r F I T N E S S F O R A P A R T I C U L A R P U R P O S E . S e e t h e 00014 00015 G N U G e n e r a l P u b l i c L i c e n s e f o r m o r e d e t a i l s . 00016 00017 Y o u s h o u l d h a v e r e c e i v e d a c o p y o f t h e G N U G e n e r a l P u b l i c L i c e n s e 00018 00019 a l o n g w i t h t h i s p r o g r a m ; i f n o t , w r i t e t o t h e F r e e S o f t w a r e 00020 00021 F o u n d a t i o n , I n c . , 5 9 T e m p l e P l a c e , S u i t e 3 3 0 , B o s t o n , M A 0 2 1 1 1 - 1 3 0 7 U S A * / 00022 00023 / * T h e r e m a y b e p r o l e m s i n c l u d e a l l o f t h e e s e . T r y t o t e s t i n 00024 00025 c o n f i g u r e w i t h o n e s a r e n e e d e d ? * / 00026 00027 / * T h i s i s n e e d e d f o r t h e d e f i n i t i o n s o f s t r c h r . . . o n s o l a r i s * / 00028 00029 # i f n d e f _ m _ s t r i n g _ h 00030 00031 # d e f i n e _ m _ s t r i n g _ h 00032 00033 # i f n d e f _ _ U S E _ G N U 00034 00035 # d e f i n e _ _ U S E _ G N U / * W e w a n t t o u s e s t p c p y * / 00036 00037 # e n d i f 00038 00039 # i f d e f i n e d ( H A V E _ S T R I N G S _ H ) 00040 00041 # i n c l u d e < s t r i n g s . h > 00042 00043 # e n d i f 00044 00045 # i f d e f i n e d ( H A V E _ S T R I N G _ H ) 00046 00047 # i n c l u d e < s t r i n g . h > 00048 00049 # e n d i f 00050 00051 / * n e e d b y m y _ v s n p r i n t f * / 00052 00053 # i n c l u d e < s t d a r g . h > 00054 00055 # i f d e f _ A I X 00056 00057 # u n d e f H A V E _ B C M P 00058 00059 # e n d i f 00060 00061 / * T h i s i s n e e d e d f o r t h e d e f i n i t i o n s o f b z e r o . . . o n s o l a r i s * / 00062 00063 # i f d e f i n e d ( H A V E _ S T R I N G S _ H ) 00064 00065 # i n c l u d e < s t r i n g s . h > 00066 00067 # e n d i f 00068 00069 / * T h i s i s n e e d e d f o r t h e d e f i n i t i o n s o f m e m c p y . . . o n s o l a r i s * / 00070 00071 # i f d e f i n e d ( H A V E _ M E M O R Y _ H ) & & ! d e f i n e d ( _ _ c p l u s p l u s ) 00072 00073 # i n c l u d e < m e m o r y . h > 00074 00075 # e n d i f 00076 00077 # i f ! d e f i n e d ( H A V E _ M E M C P Y ) & & ! d e f i n e d ( H A V E _ M E M M O V E ) 00078 00079 # d e f i n e m e m c p y ( d , s , n ) b c o p y ( ( s ) , ( d ) , ( n ) ) 00080 00081 # d e f i n e m e m s e t ( A , C , B ) b f i l l ( ( A ) , ( B ) , ( C ) ) 00082 00083 # d e f i n e m e m m o v e ( d , s , n ) b m o v e ( ( d ) , ( s ) , ( n ) ) 00084 00085 # e l i f d e f i n e d ( H A V E _ M E M M O V E ) 00086 00087 # d e f i n e b m o v e ( d , s , n ) m e m m o v e ( ( d ) , ( s ) , ( n ) ) 00088 00089 # e l s e 00090 00091 # d e f i n e m e m m o v e ( d , s , n ) b m o v e ( ( d ) , ( s ) , ( n ) ) / * o u r b m o v e * / 00092 00093 # e n d i f 00094 00095 / * U n i x w a r e 7 * / 00096 00097 # i f ! d e f i n e d ( H A V E _ B F I L L ) 00098 00099 # d e f i n e b f i l l ( A , B , C ) m e m s e t ( ( A ) , ( C ) , ( B ) ) 00100 00101 # d e f i n e b m o v e _ a l i g n ( A , B , C ) m e m c p y ( ( A ) , ( B ) , ( C ) ) 00102 00103 # e n d i f 00104 00105 # i f ! d e f i n e d ( H A V E _ B C M P ) 00106 00107 # d e f i n e b c o p y ( s , d , n ) m e m c p y ( ( d ) , ( s ) , ( n ) ) 00108 00109 # d e f i n e b c m p ( A , B , C ) m e m c m p ( ( A ) , ( B ) , ( C ) ) 00110 00111 # d e f i n e b z e r o ( A , B ) m e m s e t ( ( A ) , 0 , ( B ) ) 00112 00113 # d e f i n e b m o v e _ a l i g n ( A , B , C ) m e m c p y ( ( A ) , ( B ) , ( C ) ) 00114 00115 # e n d i f 00116 00117 # i f d e f i n e d ( _ _ c p l u s p l u s ) 00118 00119 e x t e r n " C " { 00120 00121 # e n d i f 00122 00123 / * 00124 00125 m y _ s t r _ m a l l o c ( ) a n d m y _ s t r _ f r e e ( ) a r e a s s i g n e d t o i m p l e m e n t a t i o n s i n 00126 00127 s t r i n g s / a l l o c . c , b u t c a n b e o v e r r i d d e n i n t h e c a l l i n g p r o g r a m . 00128 00129 * / 00130 00131 e x t e r n v o i d * ( * m y _ s t r _ m a l l o c ) ( s i z e _ t ) ; 00132 00133 e x t e r n v o i d ( * m y _ s t r _ f r e e ) ( v o i d * ) ; 00134 00135 # i f d e f i n e d ( H A V E _ S T P C P Y ) 00136 00137 # d e f i n e s t r m o v ( A , B ) s t p c p y ( ( A ) , ( B ) ) 00138 00139 # i f n d e f s t p c p y 00140 00141 e x t e r n c h a r * s t p c p y ( c h a r * , c o n s t c h a r * ) ; / * F o r A I X w i t h g c c 2 . 9 5 . 3 * / 00142 00143 # e n d i f 00144 00145 # e n d i f 00146 00147 / * D e c l a r e d i n i n t 2 s t r ( ) * / 00148 00149 e x t e r n c h a r N E A R _ d i g _ v e c _ u p p e r [ ] ; 00150 00151 e x t e r n c h a r N E A R _ d i g _ v e c _ l o w e r [ ] ; 00152 00153 # i f d e f B A D _ S T R I N G _ C O M P I L E R 00154 00155 # d e f i n e s t r m o v ( A , B ) ( m e m c c p y ( A , B , 0 , I N T _ M A X ) - 1 ) 00156 00157 # e l s e 00158 00159 # d e f i n e s t r m o v _ o v e r l a p p ( A , B ) s t r m o v ( A , B ) 00160 00161 # d e f i n e s t r m a k e _ o v e r l a p p ( A , B , C ) s t r m a k e ( A , B , C ) 00162 00163 # e n d i f 00164 00165 # i f d e f B A D _ M E M C P Y / * P r o b l e m w i t h g c c o n A l p h a * / 00166 00167 # d e f i n e m e m c p y _ f i x e d ( A , B , C ) b m o v e ( ( A ) , ( B ) , ( C ) ) 00168 00169 # e l s e 00170 00171 # d e f i n e m e m c p y _ f i x e d ( A , B , C ) m e m c p y ( ( A ) , ( B ) , ( C ) ) 00172 00173 # e n d i f 00174 00175 # i f ( ! d e f i n e d ( U S E _ B M O V E 5 1 2 ) | | d e f i n e d ( H A V E _ p u r i f y ) ) & & ! d e f i n e d ( b m o v e 5 1 2 ) 00176 00177 # d e f i n e b m o v e 5 1 2 ( A , B , C ) m e m c p y ( A , B , C ) 00178 00179 # e n d i f 00180 00181 / * P r o t o t y p e s f o r s t r i n g f u n c t i o n s * / 00182 00183 # i f ! d e f i n e d ( b f i l l ) & & ! d e f i n e d ( H A V E _ B F I L L ) 00184 00185 e x t e r n v o i d b f i l l ( u c h a r * d s t , s i z e _ t l e n , p c h a r f i l l ) ; 00186 00187 # e n d i f 00188 00189 # i f ! d e f i n e d ( b z e r o ) & & ! d e f i n e d ( H A V E _ B Z E R O ) 00190 00191 e x t e r n v o i d b z e r o ( u c h a r * d s t , s i z e _ t l e n ) ; 00192 00193 # e n d i f 00194 00195 # i f ! d e f i n e d ( b c m p ) & & ! d e f i n e d ( H A V E _ B C M P ) 00196 00197 e x t e r n s i z e _ t b c m p ( c o n s t u c h a r * s 1 , c o n s t u c h a r * s 2 , s i z e _ t l e n ) ; 00198 00199 # e n d i f 00200 00201 # i f d e f H A V E _ p u r i f y 00202 00203 e x t e r n s i z e _ t m y _ b c m p ( c o n s t u c h a r * s 1 , c o n s t u c h a r * s 2 , s i z e _ t l e n ) ; 00204 00205 # u n d e f b c m p 00206 00207 # d e f i n e b c m p ( A , B , C ) m y _ b c m p ( ( A ) , ( B ) , ( C ) ) 00208 00209 # d e f i n e b z e r o _ i f _ p u r i f y ( A , B ) b z e r o ( A , B ) 00210 00211 # e l s e 00212 00213 # d e f i n e b z e r o _ i f _ p u r i f y ( A , B ) 00214 00215 # e n d i f / * H A V E _ p u r i f y * / 00216 00217 # i f d e f i n e d ( _ l i n t ) | | d e f i n e d ( F O R C E _ I N I T _ O F _ V A R S ) 00218 00219 # d e f i n e L I N T _ I N I T _ S T R U C T ( v a r ) b z e r o ( & v a r , s i z e o f ( v a r ) ) / * N o u n i n i t i a l i z e - w a r n i n g * / 00220 00221 # e l s e 00222 00223 # d e f i n e L I N T _ I N I T _ S T R U C T ( v a r ) 00224 00225 # e n d i f 00226 00227 # i f n d e f b m o v e 5 1 2 00228 00229 e x t e r n v o i d b m o v e 5 1 2 ( u c h a r * d s t , c o n s t u c h a r * s r c , s i z e _ t l e n ) ; 00230 00231 # e n d i f 00232 00233 # i f ! d e f i n e d ( H A V E _ B M O V E ) & & ! d e f i n e d ( b m o v e ) 00234 00235 e x t e r n v o i d b m o v e ( u u c h a r * d s t , c o n s t u c h a r * s r c , s i z e _ t l e n ) ; 00236 00237 # e n d i f 00238 00239 e x t e r n v o i d b m o v e _ u p p ( u c h a r * d s t , c o n s t u c h a r * s r c , s i z e _ t l e n ) ; 00240 00241 e x t e r n v o i d b c h a n g e ( u c h a r * d s t , s i z e _ t o l d _ l e n , c o n s t u c h a r * s r c , 00242 00243 s i z e _ t n e w _ l e n , s i z e _ t t o t _ l e n ) ; 00244 00245 e x t e r n v o i d s t r a p p e n d ( c h a r * s , s i z e _ t l e n , p c h a r f i l l ) ; 00246 00247 e x t e r n c h a r * s t r e n d ( c o n s t c h a r * s ) ; 00248 00249 e x t e r n c h a r * s t r c e n d ( c o n s t c h a r * , p c h a r ) ; 00250 00251 e x t e r n c h a r * s t r f i e l d ( c h a r * s r c , i n t f i e l d s , i n t c h a r s , i n t b l a n k s , 00252 00253 i n t t a b c h ) ; 00254 00255 e x t e r n c h a r * s t r f i l l ( c h a r * s , s i z e _ t l e n , p c h a r f i l l ) ; 00256 00257 e x t e r n s i z e _ t s t r i n s t r ( c o n s t c h a r * s t r , c o n s t c h a r * s e a r c h ) ; 00258 00259 e x t e r n s i z e _ t r _ s t r i n s t r ( c o n s t c h a r * s t r , s i z e _ t f r o m , c o n s t c h a r * s e a r c h ) ; 00260 00261 e x t e r n c h a r * s t r k e y ( c h a r * d s t , c h a r * h e a d , c h a r * t a i l , c h a r * f l a g s ) ; 00262 00263 e x t e r n c h a r * s t r m a k e ( c h a r * d s t , c o n s t c h a r * s r c , s i z e _ t l e n g t h ) ; 00264 00265 # i f n d e f s t r m a k e _ o v e r l a p p 00266 00267 e x t e r n c h a r * s t r m a k e _ o v e r l a p p ( c h a r * d s t , c o n s t c h a r * s r c , s i z e _ t l e n g t h ) ; 00268 00269 # e n d i f 00270 00271 # i f n d e f s t r m o v 00272 00273 e x t e r n c h a r * s t r m o v ( c h a r * d s t , c o n s t c h a r * s r c ) ; 00274 00275 # e n d i f 00276 00277 e x t e r n c h a r * s t r n m o v ( c h a r * d s t , c o n s t c h a r * s r c , s i z e _ t n ) ; 00278 00279 e x t e r n c h a r * s t r s u f f ( c o n s t c h a r * s r c , c o n s t c h a r * s u f f i x ) ; 00280 00281 e x t e r n c h a r * s t r c o n t ( c o n s t c h a r * s r c , c o n s t c h a r * s e t ) ; 00282 00283 e x t e r n c h a r * s t r x c a t _ V A R A R G S ( ( c h a r * d s t , c o n s t c h a r * s r c , . . . ) ) ; 00284 00285 e x t e r n c h a r * s t r x m o v _ V A R A R G S ( ( c h a r * d s t , c o n s t c h a r * s r c , . . . ) ) ; 00286 00287 e x t e r n c h a r * s t r x c p y _ V A R A R G S ( ( c h a r * d s t , c o n s t c h a r * s r c , . . . ) ) ; 00288 00289 e x t e r n c h a r * s t r x n c a t _ V A R A R G S ( ( c h a r * d s t , s i z e _ t l e n , c o n s t c h a r * s r c , . . . ) ) ; 00290 00291 e x t e r n c h a r * s t r x n m o v _ V A R A R G S ( ( c h a r * d s t , s i z e _ t l e n , c o n s t c h a r * s r c , . . . ) ) ; 00292 00293 e x t e r n c h a r * s t r x n c p y _ V A R A R G S ( ( c h a r * d s t , s i z e _ t l e n , c o n s t c h a r * s r c , . . . ) ) ; 00294 00295 / * P r o t o t y p e s o f n o r m a l s t r i n g f u n c t i o n s ( w i t h m a y o u r s ) * / 00296 00297 # i f d e f W A N T _ S T R I N G _ P R O T O T Y P E S 00298 00299 e x t e r n c h a r * s t r c a t ( c h a r * , c o n s t c h a r * ) ; 00300 00301 e x t e r n c h a r * s t r c h r ( c o n s t c h a r * , p c h a r ) ; 00302 00303 e x t e r n c h a r * s t r r c h r ( c o n s t c h a r * , p c h a r ) ; 00304 00305 e x t e r n c h a r * s t r c p y ( c h a r * , c o n s t c h a r * ) ; 00306 00307 e x t e r n i n t s t r c m p ( c o n s t c h a r * , c o n s t c h a r * ) ; 00308 00309 # i f n d e f _ _ G N U C _ _ 00310 00311 e x t e r n s i z e _ t s t r l e n ( c o n s t c h a r * ) ; 00312 00313 # e n d i f 00314 00315 # e n d i f 00316 00317 # i f n d e f H A V E _ S T R N L E N 00318 00319 e x t e r n s i z e _ t s t r n l e n ( c o n s t c h a r * s , s i z e _ t n ) ; 00320 00321 # e n d i f 00322 00323 # i f ! d e f i n e d ( _ _ c p l u s p l u s ) 00324 00325 # i f n d e f H A V E _ S T R P B R K 00326 00327 e x t e r n c h a r * s t r p b r k ( c o n s t c h a r * , c o n s t c h a r * ) ; 00328 00329 # e n d i f 00330 00331 # i f n d e f H A V E _ S T R S T R 00332 00333 e x t e r n c h a r * s t r s t r ( c o n s t c h a r * , c o n s t c h a r * ) ; 00334 00335 # e n d i f 00336 00337 # e n d i f 00338 00339 e x t e r n i n t i s _ p r e f i x ( c o n s t c h a r * , c o n s t c h a r * ) ; 00340 00341 / * C o n v e r s i o n r o u t i n e s * / 00342 00343 t y p e d e f e n u m { 00344 00345 M Y _ G C V T _ A R G _ F L O A T , 00346 00347 M Y _ G C V T _ A R G _ D O U B L E 00348 00349 } m y _ g c v t _ a r g _ t y p e ; 00350 00351 d o u b l e m y _ s t r t o d ( c o n s t c h a r * s t r , c h a r * * e n d , i n t * e r r o r ) ; 00352 00353 d o u b l e m y _ a t o f ( c o n s t c h a r * n p t r ) ; 00354 00355 s i z e _ t m y _ f c v t ( d o u b l e x , i n t p r e c i s i o n , c h a r * t o , m y _ b o o l * e r r o r ) ; 00356 00357 s i z e _ t m y _ g c v t ( d o u b l e x , m y _ g c v t _ a r g _ t y p e t y p e , i n t w i d t h , c h a r * t o , 00358 00359 m y _ b o o l * e r r o r ) ; 00360 00361 # d e f i n e N O T _ F I X E D _ D E C 3 1 00362 00363 / * 00364 00365 T h e l o n g e s t s t r i n g m y _ f c v t c a n r e t u r n i s 3 1 1 + " p r e c i s i o n " b y t e s . 00366 00367 H e r e w e a s s u m e t h a t w e n e v e r c a l m y _ f c v t ( ) w i t h p r e c i s i o n > = N O T _ F I X E D _ D E C 00368 00369 ( + 1 b y t e f o r t h e t e r m i n a t i n g ' \ 0 ' ) . 00370 00371 * / 00372 00373 # d e f i n e F L O A T I N G _ P O I N T _ B U F F E R ( 3 1 1 + N O T _ F I X E D _ D E C ) 00374 00375 / * 00376 00377 W e w a n t t o u s e t h e ' e ' f o r m a t i n s o m e c a s e s e v e n i f w e h a v e e n o u g h s p a c e 00378 00379 f o r t h e ' f ' o n e j u s t t o m i m i c s p r i n t f ( " % . 1 5 g " ) b e h a v i o r f o r l a r g e i n t e g e r s , 00380 00381 a n d t o i m p r o v e i t f o r n u m b e r s < 1 0 ^ ( - 4 ) . 00382 00383 T h a t i s , f o r | x | < 1 w e r e q u i r e | x | > = 1 0 ^ ( - 1 5 ) , a n d f o r | x | > 1 w e r e q u i r e 00384 00385 i t t o b e i n t e g e r a n d b e < = 1 0 ^ D B L _ D I G f o r t h e ' f ' f o r m a t t o b e u s e d . 00386 00387 W e d o n ' t l o s e p r e c i s i o n , b u t m a k e c a s e s l i k e " 1 e 2 0 0 " o r " 0 . 0 0 0 0 1 " l o o k n i c e r . 00388 00389 * / 00390 00391 # d e f i n e M A X _ D E C P T _ F O R _ F _ F O R M A T D B L _ D I G 00392 00393 / * 00394 00395 T h e m a x i m u m p o s s i b l e f i e l d w i d t h f o r m y _ g c v t ( ) c o n v e r s i o n . 00396 00397 ( D B L _ D I G + 2 ) s i g n i f i c a n t d i g i t s + s i g n + " . " + ( " e - N N N " o r 00398 00399 M A X _ D E C P T _ F O R _ F _ F O R M A T z e r o s f o r c a s e s w h e n | x | < 1 a n d t h e ' f ' f o r m a t i s u s e d ) . 00400 00401 * / 00402 00403 # d e f i n e M Y _ G C V T _ M A X _ F I E L D _ W I D T H ( D B L _ D I G + 4 + m a x ( 5 , M A X _ D E C P T _ F O R _ F _ F O R M A T ) ) 00404 00405 00406 00407 e x t e r n c h a r * l l s t r ( l o n g l o n g v a l u e , c h a r * b u f f ) ; 00408 00409 e x t e r n c h a r * u l l s t r ( l o n g l o n g v a l u e , c h a r * b u f f ) ; 00410 00411 # i f n d e f H A V E _ S T R T O U L 00412 00413 e x t e r n l o n g s t r t o l ( c o n s t c h a r * s t r , c h a r * * p t r , i n t b a s e ) ; 00414 00415 e x t e r n u l o n g s t r t o u l ( c o n s t c h a r * s t r , c h a r * * p t r , i n t b a s e ) ; 00416 00417 # e n d i f 00418 00419 e x t e r n c h a r * i n t 2 s t r ( l o n g v a l , c h a r * d s t , i n t r a d i x , i n t u p c a s e ) ; 00420 00421 e x t e r n c h a r * i n t 1 0 _ t o _ s t r ( l o n g v a l , c h a r * d s t , i n t r a d i x ) ; 00422 00423 e x t e r n c h a r * s t r 2 i n t ( c o n s t c h a r * s r c , i n t r a d i x , l o n g l o w e r , l o n g u p p e r , 00424 00425 l o n g * v a l ) ; 00426 00427 l o n g l o n g m y _ s t r t o l l 1 0 ( c o n s t c h a r * n p t r , c h a r * * e n d p t r , i n t * e r r o r ) ; 00428 00429 # i f S I Z E O F _ L O N G = = S I Z E O F _ L O N G _ L O N G 00430 00431 # d e f i n e l l 2 s t r ( A , B , C , D ) i n t 2 s t r ( ( A ) , ( B ) , ( C ) , ( D ) ) 00432 00433 # d e f i n e l o n g l o n g 2 s t r ( A , B , C ) i n t 2 s t r ( ( A ) , ( B ) , ( C ) , 1 ) 00434 00435 # d e f i n e l o n g l o n g 1 0 _ t o _ s t r ( A , B , C ) i n t 1 0 _ t o _ s t r ( ( A ) , ( B ) , ( C ) ) 00436 00437 # u n d e f s t r t o l l 00438 00439 # d e f i n e s t r t o l l ( A , B , C ) s t r t o l ( ( A ) , ( B ) , ( C ) ) 00440 00441 # d e f i n e s t r t o u l l ( A , B , C ) s t r t o u l ( ( A ) , ( B ) , ( C ) ) 00442 00443 # i f n d e f H A V E _ S T R T O U L L 00444 00445 # d e f i n e H A V E _ S T R T O U L L 00446 00447 # e n d i f 00448 00449 # i f n d e f H A V E _ S T R T O L L 00450 00451 # d e f i n e H A V E _ S T R T O L L 00452 00453 # e n d i f 00454 00455 # e l s e 00456 00457 # i f d e f H A V E _ L O N G _ L O N G 00458 00459 e x t e r n c h a r * l l 2 s t r ( l o n g l o n g v a l , c h a r * d s t , i n t r a d i x , i n t u p c a s e ) ; 00460 00461 # d e f i n e l o n g l o n g 2 s t r ( A , B , C ) l l 2 s t r ( ( A ) , ( B ) , ( C ) , 1 ) 00462 00463 e x t e r n c h a r * l o n g l o n g 1 0 _ t o _ s t r ( l o n g l o n g v a l , c h a r * d s t , i n t r a d i x ) ; 00464 00465 # i f ( ! d e f i n e d ( H A V E _ S T R T O U L L ) | | d e f i n e d ( N O _ S T R T O L L _ P R O T O ) ) 00466 00467 e x t e r n l o n g l o n g s t r t o l l ( c o n s t c h a r * s t r , c h a r * * p t r , i n t b a s e ) ; 00468 00469 e x t e r n u l o n g l o n g s t r t o u l l ( c o n s t c h a r * s t r , c h a r * * p t r , i n t b a s e ) ; 00470 00471 # e n d i f 00472 00473 # e n d i f 00474 00475 # e n d i f 00476 00477 / * m y _ v s n p r i n t f . c * / 00478 00479 e x t e r n s i z e _ t m y _ v s n p r i n t f ( c h a r * s t r , s i z e _ t n , 00480 00481 c o n s t c h a r * f o r m a t , v a _ l i s t a p ) ; 00482 00483 e x t e r n s i z e _ t m y _ s n p r i n t f ( c h a r * t o , s i z e _ t n , c o n s t c h a r * f m t , . . . ) 00484 00485 A T T R I B U T E _ F O R M A T ( p r i n t f , 3 , 4 ) ; 00486 00487 # i f d e f i n e d ( _ _ c p l u s p l u s ) 00488 00489 } 00490 00491 # e n d i f 00492 00493 / * 00494 00495 L E X _ S T R I N G - - a p a i r o f a C - s t r i n g a n d i t s l e n g t h . 00496 00497 ( i t ' s p a r t o f t h e p l u g i n A P I a s a M Y S Q L _ L E X _ S T R I N G ) 00498 00499 * / 00500 00501 t y p e d e f s t r u c t s t _ m y s q l _ l e x _ s t r i n g L E X _ S T R I N G ; 00502 00503 # d e f i n e S T R I N G _ W I T H _ L E N ( X ) ( X ) , ( ( s i z e _ t ) ( s i z e o f ( X ) - 1 ) ) 00504 00505 # d e f i n e U S T R I N G _ W I T H _ L E N ( X ) ( ( u c h a r * ) X ) , ( ( s i z e _ t ) ( s i z e o f ( X ) - 1 ) ) 00506 00507 # d e f i n e C _ S T R I N G _ W I T H _ L E N ( X ) ( ( c h a r * ) ( X ) ) , ( ( s i z e _ t ) ( s i z e o f ( X ) - 1 ) ) 00508 00509 / * A v a r i a n t w i t h c o n s t * / 00510 00511 s t r u c t s t _ m y s q l _ c o n s t _ l e x _ s t r i n g 00512 00513 { 00514 00515 c o n s t c h a r * s t r ; 00516 00517 s i z e _ t l e n g t h ; 00518 00519 } ; 00520 00521 t y p e d e f s t r u c t s t _ m y s q l _ c o n s t _ l e x _ s t r i n g L E X _ C S T R I N G ; 00522 00523 / * A v a r i a n t w i t h c o n s t a n d u n s i g n e d * / 00524 00525 s t r u c t s t _ m y s q l _ c o n s t _ u n s i g n e d _ l e x _ s t r i n g 00526 00527 { 00528 00529 c o n s t u c h a r * s t r ; 00530 00531 s i z e _ t l e n g t h ; 00532 00533 } ; 00534 00535 t y p e d e f s t r u c t s t _ m y s q l _ c o n s t _ u n s i g n e d _ l e x _ s t r i n g L E X _ C U S T R I N G ; 00536 00537 / * S P A C E _ I N T i s a w o r d t h a t c o n t a i n s o n l y s p a c e s * / 00538 00539 # i f S I Z E O F _ I N T = = 4 00540 00541 # d e f i n e S P A C E _ I N T 0 x 2 0 2 0 2 0 2 0 00542 00543 # e l i f S I Z E O F _ I N T = = 8 00544 00545 # d e f i n e S P A C E _ I N T 0 x 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 00546 00547 # e l s e 00548 00549 # e r r o r d e f i n e t h e a p p r o p r i a t e c o n s t a n t f o r a w o r d f u l l o f s p a c e s 00550 00551 # e n d i f 00552 00553 / * * 00554 00555 S k i p t r a i l i n g s p a c e . 00556 00557 O n m o s t s y s t e m s r e a d i n g m e m o r y i n l a r g e r c h u n k s ( i d e a l l y e q u a l t o t h e s i z e o f 00558 00559 t h e c h i n k s t h a t t h e m a c h i n e p h y s i c a l l y r e a d s f r o m m e m o r y ) c a u s e s f e w e r m e m o r y 00560 00561 a c c e s s l o o p s a n d h e n c e i n c r e a s e d p e r f o r m a n c e . 00562 00563 T h i s i s w h y t h e ' i n t ' t y p e i s u s e d : i t ' s c l o s e s t t o t h a t ( a c c o r d i n g t o h o w 00564 00565 i t ' s d e f i n e d i n C ) . 00566 00567 S o w h e n w e d e t e r m i n e t h e a m o u n t o f w h i t e s p a c e a t t h e e n d o f a s t r i n g w e d o 00568 00569 t h e f o l l o w i n g : 00570 00571 1 . W e d i v i d e t h e s t r i n g i n t o 3 z o n e s : 00572 00573 a ) f r o m t h e s t a r t o f t h e s t r i n g ( _ _ s t a r t ) t o t h e f i r s t m u l t i p l e 00574 00575 o f s i z e o f ( i n t ) ( _ _ s t a r t _ w o r d s ) 00576 00577 b ) f r o m t h e e n d o f t h e s t r i n g ( _ _ e n d ) t o t h e l a s t m u l t i p l e o f s i z e o f ( i n t ) 00578 00579 ( _ _ e n d _ w o r d s ) 00580 00581 c ) a z o n e t h a t i s a l i g n e d t o s i z e o f ( i n t ) a n d c a n b e s a f e l y a c c e s s e d 00582 00583 t h r o u g h a n i n t * 00584 00585 2 . W e s t a r t c o m p a r i n g b a c k w a r d s f r o m ( c ) c h a r - b y - c h a r . I f a l l w e f i n d i s 00586 00587 s p a c e t h e n w e c o n t i n u e 00588 00589 3 . I f t h e r e a r e e l e m e n t s i n z o n e ( b ) w e c o m p a r e t h e m a s u n s i g n e d i n t s t o a 00590 00591 i n t m a s k ( S P A C E _ I N T ) c o n s i s t i n g o f a l l s p a c e s 00592 00593 4 . F i n a l l y w e c o m p a r e t h e r e m a i n i n g p a r t ( a ) o f t h e s t r i n g c h a r b y c h a r . 00594 00595 T h i s c o v e r s f o r t h e l a s t n o n - s p a c e u n s i g n e d i n t f r o m 3 . ( i f a n y ) 00596 00597 T h i s a l g o r i t h m w o r k s w e l l f o r r e l a t i v e l y l a r g e r s t r i n g s , b u t i t w i l l s l o w 00598 00599 t h e t h i n g s d o w n f o r s m a l l e r s t r i n g s ( b e c a u s e o f t h e a d d i t i o n a l c a l c u l a t i o n s 00600 00601 a n d c h e c k s c o m p a r e d t o t h e n a i v e m e t h o d ) . T h u s t h e b a r r i e r o f l e n g t h 2 0 00602 00603 i s a d d e d . 00604 00605 @ p a r a m p t r p o i n t e r t o t h e i n p u t s t r i n g 00606 00607 @ p a r a m l e n t h e l e n g t h o f t h e s t r i n g 00608 00609 @ r e t u r n t h e l a s t n o n - s p a c e c h a r a c t e r 00610 00611 * / 00612 00613 s t a t i c i n l i n e c o n s t u c h a r * s k i p _ t r a i l i n g _ s p a c e ( c o n s t u c h a r * p t r , s i z e _ t l e n ) 00614 00615 { 00616 00617 c o n s t u c h a r * e n d = p t r + l e n ; 00618 00619 i f ( l e n > 2 0 ) 00620 00621 { 00622 00623 c o n s t u c h a r * e n d _ w o r d s = ( c o n s t u c h a r * ) ( i n t p t r ) 00624 00625 ( ( ( u l o n g l o n g ) ( i n t p t r ) e n d ) / S I Z E O F _ I N T * S I Z E O F _ I N T ) ; 00626 00627 c o n s t u c h a r * s t a r t _ w o r d s = ( c o n s t u c h a r * ) ( i n t p t r ) 00628 00629 ( ( ( ( u l o n g l o n g ) ( i n t p t r ) p t r ) + S I Z E O F _ I N T - 1 ) / S I Z E O F _ I N T * S I Z E O F _ I N T ) ; 00630 00631 D B U G _ A S S E R T ( ( ( u l o n g l o n g ) ( i n t p t r ) p t r ) > = S I Z E O F _ I N T ) ; 00632 00633 i f ( e n d _ w o r d s > p t r ) 00634 00635 { 00636 00637 w h i l e ( e n d > e n d _ w o r d s & & e n d [ - 1 ] = = 0 x 2 0 ) 00638 00639 e n d - - ; 00640 00641 i f ( e n d [ - 1 ] = = 0 x 2 0 & & s t a r t _ w o r d s < e n d _ w o r d s ) 00642 00643 w h i l e ( e n d > s t a r t _ w o r d s & & ( ( u n s i g n e d * ) e n d ) [ - 1 ] = = S P A C E _ I N T ) 00644 00645 e n d - = S I Z E O F _ I N T ; 00646 00647 } 00648 00649 } 00650 00651 w h i l e ( e n d > p t r & & e n d [ - 1 ] = = 0 x 2 0 ) 00652 00653 e n d - - ; 00654 00655 r e t u r n ( e n d ) ; 00656 00657 } 00658 00659 # i f d e f S A F E M A L L O C 00660 00661 # d e f i n e T R A S H ( A , B ) b f i l l ( A , B , 0 x 8 F ) 00662 00663 # e l s e 00664 00665 # d e f i n e T R A S H ( A , B ) / * n o t h i n g * / 00666 00667 # e n d i f / * S A F E M A L L O C * / 00668 00669 # e n d i f / * _ m _ s t r i n g _ h * / 00670 00671