/ Hex Artifact Content
Login

Artifact eca1a6289fa6e2ea71a45174d5c8bc862e5fb0fb:


0000: 2f 2a 0a 2a 2a 20 54 68 65 20 22 70 72 69 6e 74  /*.** The "print
0010: 66 22 20 63 6f 64 65 20 74 68 61 74 20 66 6f 6c  f" code that fol
0020: 6c 6f 77 73 20 64 61 74 65 73 20 66 72 6f 6d 20  lows dates from 
0030: 74 68 65 20 31 39 38 30 27 73 2e 20 20 49 74 20  the 1980's.  It 
0040: 69 73 20 69 6e 0a 2a 2a 20 74 68 65 20 70 75 62  is in.** the pub
0050: 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65  lic domain.  The
0060: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 65 6e   original commen
0070: 74 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ts are included 
0080: 68 65 72 65 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  here for.** comp
0090: 6c 65 74 65 6e 65 73 73 2e 20 20 54 68 65 79 20  leteness.  They 
00a0: 61 72 65 20 76 65 72 79 20 6f 75 74 2d 6f 66 2d  are very out-of-
00b0: 64 61 74 65 20 62 75 74 20 6d 69 67 68 74 20 62  date but might b
00c0: 65 20 75 73 65 66 75 6c 20 61 73 0a 2a 2a 20 61  e useful as.** a
00d0: 6e 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 66  n historical ref
00e0: 65 72 65 6e 63 65 2e 20 20 4d 6f 73 74 20 6f 66  erence.  Most of
00f0: 20 74 68 65 20 22 65 6e 68 61 6e 63 65 6d 65 6e   the "enhancemen
0100: 74 73 22 20 68 61 76 65 20 62 65 65 6e 20 62 61  ts" have been ba
0110: 63 6b 65 64 0a 2a 2a 20 6f 75 74 20 73 6f 20 74  cked.** out so t
0120: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  hat the function
0130: 61 6c 69 74 79 20 69 73 20 6e 6f 77 20 74 68 65  ality is now the
0140: 20 73 61 6d 65 20 61 73 20 73 74 61 6e 64 61 72   same as standar
0150: 64 20 70 72 69 6e 74 66 28 29 2e 0a 2a 2a 0a 2a  d printf()..**.*
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20  *********.**.** 
01b0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 6f  The following mo
01c0: 64 75 6c 65 73 20 69 73 20 61 6e 20 65 6e 68 61  dules is an enha
01d0: 6e 63 65 64 20 72 65 70 6c 61 63 65 6d 65 6e 74  nced replacement
01e0: 20 66 6f 72 20 74 68 65 20 22 70 72 69 6e 74 66   for the "printf
01f0: 22 20 73 75 62 72 6f 75 74 69 6e 65 73 0a 2a 2a  " subroutines.**
0200: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 73 74   found in the st
0210: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
0220: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
0230: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 61 72   enhancements ar
0240: 65 0a 2a 2a 20 73 75 70 70 6f 72 74 65 64 3a 0a  e.** supported:.
0250: 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20 20 41 64  **.**      +  Ad
0260: 64 69 74 69 6f 6e 61 6c 20 66 75 6e 63 74 69 6f  ditional functio
0270: 6e 73 2e 20 20 54 68 65 20 73 74 61 6e 64 61 72  ns.  The standar
0280: 64 20 73 65 74 20 6f 66 20 22 70 72 69 6e 74 66  d set of "printf
0290: 22 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  " functions.**  
02a0: 20 20 20 20 20 20 20 69 6e 63 6c 75 64 65 73 20         includes 
02b0: 70 72 69 6e 74 66 2c 20 66 70 72 69 6e 74 66 2c  printf, fprintf,
02c0: 20 73 70 72 69 6e 74 66 2c 20 76 70 72 69 6e 74   sprintf, vprint
02d0: 66 2c 20 76 66 70 72 69 6e 74 66 2c 20 61 6e 64  f, vfprintf, and
02e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 76 73 70 72  .**         vspr
02f0: 69 6e 74 66 2e 20 20 54 68 69 73 20 6d 6f 64 75  intf.  This modu
0300: 6c 65 20 61 64 64 73 20 74 68 65 20 66 6f 6c 6c  le adds the foll
0310: 6f 77 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  owing:.**.**    
0320: 20 20 20 20 20 20 20 2a 20 20 73 6e 70 72 69 6e         *  snprin
0330: 74 66 20 2d 2d 20 57 6f 72 6b 73 20 6c 69 6b 65  tf -- Works like
0340: 20 73 70 72 69 6e 74 66 2c 20 62 75 74 20 68 61   sprintf, but ha
0350: 73 20 61 6e 20 65 78 74 72 61 20 61 72 67 75 6d  s an extra argum
0360: 65 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ent.**          
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
0390: 65 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20  e of the buffer 
03a0: 77 72 69 74 74 65 6e 20 74 6f 2e 0a 2a 2a 0a 2a  written to..**.*
03b0: 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20 6d  *           *  m
03c0: 70 72 69 6e 74 66 20 2d 2d 20 20 53 69 6d 69 6c  printf --  Simil
03d0: 61 72 20 74 6f 20 73 70 72 69 6e 74 66 2e 20 20  ar to sprintf.  
03e0: 57 72 69 74 65 73 20 6f 75 74 70 75 74 20 74 6f  Writes output to
03f0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 6f 62 74 61 69 6e 65 64 20 66 72 6f      obtained fro
0420: 6d 20 6d 61 6c 6c 6f 63 2e 0a 2a 2a 0a 2a 2a 20  m malloc..**.** 
0430: 20 20 20 20 20 20 20 20 20 20 2a 20 20 78 70 72            *  xpr
0440: 69 6e 74 66 20 2d 2d 20 20 43 61 6c 6c 73 20 61  intf --  Calls a
0450: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64 69 73   function to dis
0460: 70 6f 73 65 20 6f 66 20 6f 75 74 70 75 74 2e 0a  pose of output..
0470: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  **.**           
0480: 2a 20 20 6e 70 72 69 6e 74 66 20 2d 2d 20 20 4e  *  nprintf --  N
0490: 6f 20 6f 75 74 70 75 74 2c 20 62 75 74 20 72 65  o output, but re
04a0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
04b0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 0a 2a   of characters.*
04c0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 61 74 20             that 
04e0: 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
04f0: 6f 75 74 70 75 74 20 62 79 20 70 72 69 6e 74 66  output by printf
0500: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
0510: 20 20 2a 20 20 41 20 76 2d 20 76 65 72 73 69 6f    *  A v- versio
0520: 6e 20 28 65 78 3a 20 76 73 6e 70 72 69 6e 74 66  n (ex: vsnprintf
0530: 29 20 6f 66 20 65 76 65 72 79 20 66 75 6e 63 74  ) of every funct
0540: 69 6f 6e 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 20  ion is also.**  
0550: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 70 70              supp
0560: 6c 69 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  lied..**.**     
0570: 20 2b 20 20 41 20 66 65 77 20 65 78 74 65 6e 73   +  A few extens
0580: 69 6f 6e 73 20 74 6f 20 74 68 65 20 66 6f 72 6d  ions to the form
0590: 61 74 74 69 6e 67 20 6e 6f 74 61 74 69 6f 6e 20  atting notation 
05a0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 3a 0a 2a  are supported:.*
05b0: 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a  *.**           *
05c0: 20 20 54 68 65 20 22 3d 22 20 66 6c 61 67 20 28    The "=" flag (
05d0: 73 69 6d 69 6c 61 72 20 74 6f 20 22 2d 22 29 20  similar to "-") 
05e0: 63 61 75 73 65 73 20 74 68 65 20 6f 75 74 70 75  causes the outpu
05f0: 74 20 74 6f 20 62 65 0a 2a 2a 20 20 20 20 20 20  t to be.**      
0600: 20 20 20 20 20 20 20 20 62 65 20 63 65 6e 74 65          be cente
0610: 72 65 64 20 69 6e 20 74 68 65 20 61 70 70 72 6f  red in the appro
0620: 70 72 69 61 74 65 6c 79 20 73 69 7a 65 64 20 66  priately sized f
0630: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ield..**.**     
0640: 20 20 20 20 20 20 2a 20 20 54 68 65 20 25 62 20        *  The %b 
0650: 66 69 65 6c 64 20 6f 75 74 70 75 74 73 20 61 6e  field outputs an
0660: 20 69 6e 74 65 67 65 72 20 69 6e 20 62 69 6e 61   integer in bina
0670: 72 79 20 6e 6f 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  ry notation..**.
0680: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20  **           *  
0690: 54 68 65 20 25 63 20 66 69 65 6c 64 20 6e 6f 77  The %c field now
06a0: 20 61 63 63 65 70 74 73 20 61 20 70 72 65 63 69   accepts a preci
06b0: 73 69 6f 6e 2e 20 20 54 68 65 20 63 68 61 72 61  sion.  The chara
06c0: 63 74 65 72 20 6f 75 74 70 75 74 0a 2a 2a 20 20  cter output.**  
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 72              is r
06e0: 65 70 65 61 74 65 64 20 62 79 20 74 68 65 20 6e  epeated by the n
06f0: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74  umber of times t
0700: 68 65 20 70 72 65 63 69 73 69 6f 6e 20 73 70 65  he precision spe
0710: 63 69 66 69 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  cifies..**.**   
0720: 20 20 20 20 20 20 20 20 2a 20 20 54 68 65 20 25          *  The %
0730: 27 20 66 69 65 6c 64 20 77 6f 72 6b 73 20 6c 69  ' field works li
0740: 6b 65 20 25 63 2c 20 62 75 74 20 74 61 6b 65 73  ke %c, but takes
0750: 20 61 73 20 69 74 73 20 63 68 61 72 61 63 74 65   as its characte
0760: 72 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 20  r the.**        
0770: 20 20 20 20 20 20 6e 65 78 74 20 63 68 61 72 61        next chara
0780: 63 74 65 72 20 6f 66 20 74 68 65 20 66 6f 72 6d  cter of the form
0790: 61 74 20 73 74 72 69 6e 67 2c 20 69 6e 73 74 65  at string, inste
07a0: 61 64 20 6f 66 20 74 68 65 20 6e 65 78 74 0a 2a  ad of the next.*
07b0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
07c0: 72 67 75 6d 65 6e 74 2e 20 20 46 6f 72 20 65 78  rgument.  For ex
07d0: 61 6d 70 6c 65 2c 20 20 70 72 69 6e 74 66 28 22  ample,  printf("
07e0: 25 2e 37 38 27 2d 22 29 20 20 70 72 69 6e 74 73  %.78'-")  prints
07f0: 20 37 38 20 6d 69 6e 75 73 0a 2a 2a 20 20 20 20   78 minus.**    
0800: 20 20 20 20 20 20 20 20 20 20 73 69 67 6e 73 2c            signs,
0810: 20 74 68 65 20 73 61 6d 65 20 61 73 20 20 70 72   the same as  pr
0820: 69 6e 74 66 28 22 25 2e 37 38 63 22 2c 27 2d 27  intf("%.78c",'-'
0830: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20  )..**.**      + 
0840: 20 57 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 75   When compiled u
0850: 73 69 6e 67 20 47 43 43 20 6f 6e 20 61 20 53 50  sing GCC on a SP
0860: 41 52 43 2c 20 74 68 69 73 20 76 65 72 73 69 6f  ARC, this versio
0870: 6e 20 6f 66 20 70 72 69 6e 74 66 20 69 73 0a 2a  n of printf is.*
0880: 2a 20 20 20 20 20 20 20 20 20 66 61 73 74 65 72  *         faster
0890: 20 74 68 61 6e 20 74 68 65 20 6c 69 62 72 61 72   than the librar
08a0: 79 20 70 72 69 6e 74 66 20 66 6f 72 20 53 55 4e  y printf for SUN
08b0: 20 4f 53 20 34 2e 31 2e 0a 2a 2a 0a 2a 2a 20 20   OS 4.1..**.**  
08c0: 20 20 20 20 2b 20 20 41 6c 6c 20 66 75 6e 63 74      +  All funct
08d0: 69 6f 6e 73 20 61 72 65 20 66 75 6c 6c 79 20 72  ions are fully r
08e0: 65 65 6e 74 72 61 6e 74 2e 0a 2a 2a 0a 2a 2f 0a  eentrant..**.*/.
08f0: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0900: 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 43 6f  Int.h"../*.** Co
0910: 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66  nversion types f
0920: 61 6c 6c 20 69 6e 74 6f 20 76 61 72 69 6f 75 73  all into various
0930: 20 63 61 74 65 67 6f 72 69 65 73 20 61 73 20 64   categories as d
0940: 65 66 69 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a  efined by the.**
0950: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 75 6d 65   following enume
0960: 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  ration..*/.#defi
0970: 6e 65 20 65 74 52 41 44 49 58 20 20 20 20 20 20  ne etRADIX      
0980: 20 31 20 2f 2a 20 49 6e 74 65 67 65 72 20 74 79   1 /* Integer ty
0990: 70 65 73 2e 20 20 25 64 2c 20 25 78 2c 20 25 6f  pes.  %d, %x, %o
09a0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 2a  , and so forth *
09b0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 46 4c 4f 41  /.#define etFLOA
09c0: 54 20 20 20 20 20 20 20 32 20 2f 2a 20 46 6c 6f  T       2 /* Flo
09d0: 61 74 69 6e 67 20 70 6f 69 6e 74 2e 20 20 25 66  ating point.  %f
09e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 58   */.#define etEX
09f0: 50 20 20 20 20 20 20 20 20 20 33 20 2f 2a 20 45  P         3 /* E
0a00: 78 70 6f 6e 65 6e 74 69 6f 6e 61 6c 20 6e 6f 74  xponentional not
0a10: 61 74 69 6f 6e 2e 20 25 65 20 61 6e 64 20 25 45  ation. %e and %E
0a20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 47 45   */.#define etGE
0a30: 4e 45 52 49 43 20 20 20 20 20 34 20 2f 2a 20 46  NERIC     4 /* F
0a40: 6c 6f 61 74 69 6e 67 20 6f 72 20 65 78 70 6f 6e  loating or expon
0a50: 65 6e 74 69 61 6c 2c 20 64 65 70 65 6e 64 69 6e  ential, dependin
0a60: 67 20 6f 6e 20 65 78 70 6f 6e 65 6e 74 2e 20 25  g on exponent. %
0a70: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53  g */.#define etS
0a80: 49 5a 45 20 20 20 20 20 20 20 20 35 20 2f 2a 20  IZE        5 /* 
0a90: 52 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  Return number of
0aa0: 20 63 68 61 72 61 63 74 65 72 73 20 70 72 6f 63   characters proc
0ab0: 65 73 73 65 64 20 73 6f 20 66 61 72 2e 20 25 6e  essed so far. %n
0ac0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 54   */.#define etST
0ad0: 52 49 4e 47 20 20 20 20 20 20 36 20 2f 2a 20 53  RING      6 /* S
0ae0: 74 72 69 6e 67 73 2e 20 25 73 20 2a 2f 0a 23 64  trings. %s */.#d
0af0: 65 66 69 6e 65 20 65 74 44 59 4e 53 54 52 49 4e  efine etDYNSTRIN
0b00: 47 20 20 20 37 20 2f 2a 20 44 79 6e 61 6d 69 63  G   7 /* Dynamic
0b10: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
0b20: 74 72 69 6e 67 73 2e 20 25 7a 20 2a 2f 0a 23 64  trings. %z */.#d
0b30: 65 66 69 6e 65 20 65 74 50 45 52 43 45 4e 54 20  efine etPERCENT 
0b40: 20 20 20 20 38 20 2f 2a 20 50 65 72 63 65 6e 74      8 /* Percent
0b50: 20 73 79 6d 62 6f 6c 2e 20 25 25 20 2a 2f 0a 23   symbol. %% */.#
0b60: 64 65 66 69 6e 65 20 65 74 43 48 41 52 58 20 20  define etCHARX  
0b70: 20 20 20 20 20 39 20 2f 2a 20 43 68 61 72 61 63       9 /* Charac
0b80: 74 65 72 73 2e 20 25 63 20 2a 2f 0a 2f 2a 20 54  ters. %c */./* T
0b90: 68 65 20 72 65 73 74 20 61 72 65 20 65 78 74 65  he rest are exte
0ba0: 6e 73 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d  nsions, not norm
0bb0: 61 6c 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72  ally found in pr
0bc0: 69 6e 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  intf() */.#defin
0bd0: 65 20 65 74 53 51 4c 45 53 43 41 50 45 20 20 31  e etSQLESCAPE  1
0be0: 30 20 2f 2a 20 53 74 72 69 6e 67 73 20 77 69 74  0 /* Strings wit
0bf0: 68 20 27 5c 27 27 20 64 6f 75 62 6c 65 64 2e 20  h '\'' doubled. 
0c00: 20 25 71 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %q */.#define e
0c10: 74 53 51 4c 45 53 43 41 50 45 32 20 31 31 20 2f  tSQLESCAPE2 11 /
0c20: 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27  * Strings with '
0c30: 5c 27 27 20 64 6f 75 62 6c 65 64 20 61 6e 64 20  \'' doubled and 
0c40: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 27 27 2c 0a  enclosed in '',.
0c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c60: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 70            NULL p
0c70: 6f 69 6e 74 65 72 73 20 72 65 70 6c 61 63 65 64  ointers replaced
0c80: 20 62 79 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 25   by SQL NULL.  %
0c90: 51 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 54  Q */.#define etT
0ca0: 4f 4b 45 4e 20 20 20 20 20 20 31 32 20 2f 2a 20  OKEN      12 /* 
0cb0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 54  a pointer to a T
0cc0: 6f 6b 65 6e 20 73 74 72 75 63 74 75 72 65 20 2a  oken structure *
0cd0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 52 43 4c  /.#define etSRCL
0ce0: 49 53 54 20 20 20 20 31 33 20 2f 2a 20 61 20 70  IST    13 /* a p
0cf0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 53 72 63 4c  ointer to a SrcL
0d00: 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ist */.#define e
0d10: 74 50 4f 49 4e 54 45 52 20 20 20 20 31 34 20 2f  tPOINTER    14 /
0d20: 2a 20 54 68 65 20 25 70 20 63 6f 6e 76 65 72 73  * The %p convers
0d30: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ion */.#define e
0d40: 74 53 51 4c 45 53 43 41 50 45 33 20 31 35 20 2f  tSQLESCAPE3 15 /
0d50: 2a 20 25 77 20 2d 3e 20 53 74 72 69 6e 67 73 20  * %w -> Strings 
0d60: 77 69 74 68 20 27 5c 22 27 20 64 6f 75 62 6c 65  with '\"' double
0d70: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 4f  d */.#define etO
0d80: 52 44 49 4e 41 4c 20 20 20 20 31 36 20 2f 2a 20  RDINAL    16 /* 
0d90: 25 72 20 2d 3e 20 31 73 74 2c 20 32 6e 64 2c 20  %r -> 1st, 2nd, 
0da0: 33 72 64 2c 20 34 74 68 2c 20 65 74 63 2e 20 20  3rd, 4th, etc.  
0db0: 45 6e 67 6c 69 73 68 20 6f 6e 6c 79 20 2a 2f 0a  English only */.
0dc0: 0a 23 64 65 66 69 6e 65 20 65 74 49 4e 56 41 4c  .#define etINVAL
0dd0: 49 44 20 20 20 20 20 30 20 2f 2a 20 41 6e 79 20  ID     0 /* Any 
0de0: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f 6e  unrecognized con
0df0: 76 65 72 73 69 6f 6e 20 74 79 70 65 20 2a 2f 0a  version type */.
0e00: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 79  ../*.** An "etBy
0e10: 74 65 22 20 69 73 20 61 6e 20 38 2d 62 69 74 20  te" is an 8-bit 
0e20: 75 6e 73 69 67 6e 65 64 20 76 61 6c 75 65 2e 0a  unsigned value..
0e30: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
0e40: 6e 65 64 20 63 68 61 72 20 65 74 42 79 74 65 3b  ned char etByte;
0e50: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 62 75 69  ../*.** Each bui
0e60: 6c 74 69 6e 20 63 6f 6e 76 65 72 73 69 6f 6e 20  ltin conversion 
0e70: 63 68 61 72 61 63 74 65 72 20 28 65 78 3a 20 74  character (ex: t
0e80: 68 65 20 27 64 27 20 69 6e 20 22 25 64 22 29 20  he 'd' in "%d") 
0e90: 69 73 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  is described.** 
0ea0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
0eb0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0ec0: 73 74 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70  structure.*/.typ
0ed0: 65 64 65 66 20 73 74 72 75 63 74 20 65 74 5f 69  edef struct et_i
0ee0: 6e 66 6f 20 7b 20 20 20 2f 2a 20 49 6e 66 6f 72  nfo {   /* Infor
0ef0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
0f00: 68 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 2a  h format field *
0f10: 2f 0a 20 20 63 68 61 72 20 66 6d 74 74 79 70 65  /.  char fmttype
0f20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
0f30: 54 68 65 20 66 6f 72 6d 61 74 20 66 69 65 6c 64  The format field
0f40: 20 63 6f 64 65 20 6c 65 74 74 65 72 20 2a 2f 0a   code letter */.
0f50: 20 20 65 74 42 79 74 65 20 62 61 73 65 3b 20 20    etByte base;  
0f60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0f70: 65 20 62 61 73 65 20 66 6f 72 20 72 61 64 69 78  e base for radix
0f80: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 20   conversion */. 
0f90: 20 65 74 42 79 74 65 20 66 6c 61 67 73 3b 20 20   etByte flags;  
0fa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
0fb0: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 46 4c 41 47   or more of FLAG
0fc0: 5f 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  _ constants belo
0fd0: 77 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 74 79  w */.  etByte ty
0fe0: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
0ff0: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61  /* Conversion pa
1000: 72 61 64 69 67 6d 20 2a 2f 0a 20 20 65 74 42 79  radigm */.  etBy
1010: 74 65 20 63 68 61 72 73 65 74 3b 20 20 20 20 20  te charset;     
1020: 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
1030: 6e 74 6f 20 61 44 69 67 69 74 73 5b 5d 20 6f 66  nto aDigits[] of
1040: 20 74 68 65 20 64 69 67 69 74 73 20 73 74 72 69   the digits stri
1050: 6e 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 70  ng */.  etByte p
1060: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
1070: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
1080: 61 50 72 65 66 69 78 5b 5d 20 6f 66 20 74 68 65  aPrefix[] of the
1090: 20 70 72 65 66 69 78 20 73 74 72 69 6e 67 20 2a   prefix string *
10a0: 2f 0a 7d 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f 2a  /.} et_info;../*
10b0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
10c0: 65 73 20 66 6f 72 20 65 74 5f 69 6e 66 6f 2e 66  es for et_info.f
10d0: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
10e0: 46 4c 41 47 5f 53 49 47 4e 45 44 20 20 31 20 20  FLAG_SIGNED  1  
10f0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1100: 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65  e value to conve
1110: 72 74 20 69 73 20 73 69 67 6e 65 64 20 2a 2f 0a  rt is signed */.
1120: 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 49 4e 54  #define FLAG_INT
1130: 45 52 4e 20 20 32 20 20 20 20 20 2f 2a 20 54 72  ERN  2     /* Tr
1140: 75 65 20 69 66 20 66 6f 72 20 69 6e 74 65 72 6e  ue if for intern
1150: 61 6c 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 23  al use only */.#
1160: 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 54 52 49  define FLAG_STRI
1170: 4e 47 20 20 34 20 20 20 20 20 2f 2a 20 41 6c 6c  NG  4     /* All
1180: 6f 77 20 69 6e 66 69 6e 69 74 79 20 70 72 65 63  ow infinity prec
1190: 69 73 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ision */.../*.**
11a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
11b0: 61 62 6c 65 20 69 73 20 73 65 61 72 63 68 65 64  able is searched
11c0: 20 6c 69 6e 65 61 72 6c 79 2c 20 73 6f 20 69 74   linearly, so it
11d0: 20 69 73 20 67 6f 6f 64 20 74 6f 20 70 75 74 20   is good to put 
11e0: 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 66 72 65 71  the.** most freq
11f0: 75 65 6e 74 6c 79 20 75 73 65 64 20 63 6f 6e 76  uently used conv
1200: 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66 69 72  ersion types fir
1210: 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  st..*/.static co
1220: 6e 73 74 20 63 68 61 72 20 61 44 69 67 69 74 73  nst char aDigits
1230: 5b 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39  [] = "0123456789
1240: 41 42 43 44 45 46 30 31 32 33 34 35 36 37 38 39  ABCDEF0123456789
1250: 61 62 63 64 65 66 22 3b 0a 73 74 61 74 69 63 20  abcdef";.static 
1260: 63 6f 6e 73 74 20 63 68 61 72 20 61 50 72 65 66  const char aPref
1270: 69 78 5b 5d 20 3d 20 22 2d 78 30 5c 30 30 30 58  ix[] = "-x0\000X
1280: 30 22 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  0";.static const
1290: 20 65 74 5f 69 6e 66 6f 20 66 6d 74 69 6e 66 6f   et_info fmtinfo
12a0: 5b 5d 20 3d 20 7b 0a 20 20 7b 20 20 27 64 27 2c  [] = {.  {  'd',
12b0: 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c   10, 1, etRADIX,
12c0: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
12d0: 20 7b 20 20 27 73 27 2c 20 20 30 2c 20 34 2c 20   {  's',  0, 4, 
12e0: 65 74 53 54 52 49 4e 47 2c 20 20 20 20 20 30 2c  etSTRING,     0,
12f0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 67 27 2c    0 },.  {  'g',
1300: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
1310: 43 2c 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20  C,    30, 0 },. 
1320: 20 7b 20 20 27 7a 27 2c 20 20 30 2c 20 34 2c 20   {  'z',  0, 4, 
1330: 65 74 44 59 4e 53 54 52 49 4e 47 2c 20 20 30 2c  etDYNSTRING,  0,
1340: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 71 27 2c    0 },.  {  'q',
1350: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
1360: 41 50 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20  APE,  0,  0 },. 
1370: 20 7b 20 20 27 51 27 2c 20 20 30 2c 20 34 2c 20   {  'Q',  0, 4, 
1380: 65 74 53 51 4c 45 53 43 41 50 45 32 2c 20 30 2c  etSQLESCAPE2, 0,
1390: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 77 27 2c    0 },.  {  'w',
13a0: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
13b0: 41 50 45 33 2c 20 30 2c 20 20 30 20 7d 2c 0a 20  APE3, 0,  0 },. 
13c0: 20 7b 20 20 27 63 27 2c 20 20 30 2c 20 30 2c 20   {  'c',  0, 0, 
13d0: 65 74 43 48 41 52 58 2c 20 20 20 20 20 20 30 2c  etCHARX,      0,
13e0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6f 27 2c    0 },.  {  'o',
13f0: 20 20 38 2c 20 30 2c 20 65 74 52 41 44 49 58 2c    8, 0, etRADIX,
1400: 20 20 20 20 20 20 30 2c 20 20 32 20 7d 2c 0a 20        0,  2 },. 
1410: 20 7b 20 20 27 75 27 2c 20 31 30 2c 20 30 2c 20   {  'u', 10, 0, 
1420: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
1430: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 78 27 2c    0 },.  {  'x',
1440: 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   16, 0, etRADIX,
1450: 20 20 20 20 20 20 31 36 2c 20 31 20 7d 2c 0a 20        16, 1 },. 
1460: 20 7b 20 20 27 58 27 2c 20 31 36 2c 20 30 2c 20   {  'X', 16, 0, 
1470: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
1480: 20 20 34 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53    4 },.#ifndef S
1490: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
14a0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7b 20 20 27  ING_POINT.  {  '
14b0: 66 27 2c 20 20 30 2c 20 31 2c 20 65 74 46 4c 4f  f',  0, 1, etFLO
14c0: 41 54 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d  AT,      0,  0 }
14d0: 2c 0a 20 20 7b 20 20 27 65 27 2c 20 20 30 2c 20  ,.  {  'e',  0, 
14e0: 31 2c 20 65 74 45 58 50 2c 20 20 20 20 20 20 20  1, etEXP,       
14f0: 20 33 30 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27   30, 0 },.  {  '
1500: 45 27 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 50  E',  0, 1, etEXP
1510: 2c 20 20 20 20 20 20 20 20 31 34 2c 20 30 20 7d  ,        14, 0 }
1520: 2c 0a 20 20 7b 20 20 27 47 27 2c 20 20 30 2c 20  ,.  {  'G',  0, 
1530: 31 2c 20 65 74 47 45 4e 45 52 49 43 2c 20 20 20  1, etGENERIC,   
1540: 20 31 34 2c 20 30 20 7d 2c 0a 23 65 6e 64 69 66   14, 0 },.#endif
1550: 0a 20 20 7b 20 20 27 69 27 2c 20 31 30 2c 20 31  .  {  'i', 10, 1
1560: 2c 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20  , etRADIX,      
1570: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6e  0,  0 },.  {  'n
1580: 27 2c 20 20 30 2c 20 30 2c 20 65 74 53 49 5a 45  ',  0, 0, etSIZE
1590: 2c 20 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c  ,       0,  0 },
15a0: 0a 20 20 7b 20 20 27 25 27 2c 20 20 30 2c 20 30  .  {  '%',  0, 0
15b0: 2c 20 65 74 50 45 52 43 45 4e 54 2c 20 20 20 20  , etPERCENT,    
15c0: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 70  0,  0 },.  {  'p
15d0: 27 2c 20 31 36 2c 20 30 2c 20 65 74 50 4f 49 4e  ', 16, 0, etPOIN
15e0: 54 45 52 2c 20 20 20 20 30 2c 20 20 31 20 7d 2c  TER,    0,  1 },
15f0: 0a 0a 2f 2a 20 41 6c 6c 20 74 68 65 20 72 65 73  ../* All the res
1600: 74 20 68 61 76 65 20 74 68 65 20 46 4c 41 47 5f  t have the FLAG_
1610: 49 4e 54 45 52 4e 20 62 69 74 20 73 65 74 20 61  INTERN bit set a
1620: 6e 64 20 61 72 65 20 74 68 75 73 20 66 6f 72 20  nd are thus for 
1630: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 75 73 65 20  internal.** use 
1640: 6f 6e 6c 79 20 2a 2f 0a 20 20 7b 20 20 27 54 27  only */.  {  'T'
1650: 2c 20 20 30 2c 20 32 2c 20 65 74 54 4f 4b 45 4e  ,  0, 2, etTOKEN
1660: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
1670: 20 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 32 2c    {  'S',  0, 2,
1680: 20 65 74 53 52 43 4c 49 53 54 2c 20 20 20 20 30   etSRCLIST,    0
1690: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 72 27  ,  0 },.  {  'r'
16a0: 2c 20 31 30 2c 20 33 2c 20 65 74 4f 52 44 49 4e  , 10, 3, etORDIN
16b0: 41 4c 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  AL,    0,  0 },.
16c0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  };../*.** If SQL
16d0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
16e0: 47 5f 50 4f 49 4e 54 20 69 73 20 64 65 66 69 6e  G_POINT is defin
16f0: 65 64 2c 20 74 68 65 6e 20 6e 6f 6e 65 20 6f 66  ed, then none of
1700: 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f   the floating po
1710: 69 6e 74 0a 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  int.** conversio
1720: 6e 73 20 77 69 6c 6c 20 77 6f 72 6b 2e 0a 2a 2f  ns will work..*/
1730: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1740: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
1750: 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 2a 76 61 6c 22  INT./*.** "*val"
1760: 20 69 73 20 61 20 64 6f 75 62 6c 65 20 73 75 63   is a double suc
1770: 68 20 74 68 61 74 20 30 2e 31 20 3c 3d 20 2a 76  h that 0.1 <= *v
1780: 61 6c 20 3c 20 31 30 2e 30 0a 2a 2a 20 52 65 74  al < 10.0.** Ret
1790: 75 72 6e 20 74 68 65 20 61 73 63 69 69 20 63 6f  urn the ascii co
17a0: 64 65 20 66 6f 72 20 74 68 65 20 6c 65 61 64 69  de for the leadi
17b0: 6e 67 20 64 69 67 69 74 20 6f 66 20 2a 76 61 6c  ng digit of *val
17c0: 2c 20 74 68 65 6e 0a 2a 2a 20 6d 75 6c 74 69 70  , then.** multip
17d0: 6c 79 20 22 2a 76 61 6c 22 20 62 79 20 31 30 2e  ly "*val" by 10.
17e0: 30 20 74 6f 20 72 65 6e 6f 72 6d 61 6c 69 7a 65  0 to renormalize
17f0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 3a  ..**.** Example:
1800: 0a 2a 2a 20 20 20 20 20 69 6e 70 75 74 3a 20 20  .**     input:  
1810: 20 20 20 2a 76 61 6c 20 3d 20 33 2e 31 34 31 35     *val = 3.1415
1820: 39 0a 2a 2a 20 20 20 20 20 6f 75 74 70 75 74 3a  9.**     output:
1830: 20 20 20 20 2a 76 61 6c 20 3d 20 31 2e 34 31 35      *val = 1.415
1840: 39 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65  9    function re
1850: 74 75 72 6e 20 3d 20 27 33 27 0a 2a 2a 0a 2a 2a  turn = '3'.**.**
1860: 20 54 68 65 20 63 6f 75 6e 74 65 72 20 2a 63 6e   The counter *cn
1870: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
1880: 20 65 61 63 68 20 74 69 6d 65 2e 20 20 41 66 74   each time.  Aft
1890: 65 72 20 63 6f 75 6e 74 65 72 20 65 78 63 65 65  er counter excee
18a0: 64 73 0a 2a 2a 20 31 36 20 28 74 68 65 20 6e 75  ds.** 16 (the nu
18b0: 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63  mber of signific
18c0: 61 6e 74 20 64 69 67 69 74 73 20 69 6e 20 61 20  ant digits in a 
18d0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 29 20 27 30  64-bit float) '0
18e0: 27 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 72  ' is.** always r
18f0: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
1900: 69 63 20 63 68 61 72 20 65 74 5f 67 65 74 64 69  ic char et_getdi
1910: 67 69 74 28 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  git(LONGDOUBLE_T
1920: 59 50 45 20 2a 76 61 6c 2c 20 69 6e 74 20 2a 63  YPE *val, int *c
1930: 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69 74  nt){.  int digit
1940: 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ;.  LONGDOUBLE_T
1950: 59 50 45 20 64 3b 0a 20 20 69 66 28 20 28 2a 63  YPE d;.  if( (*c
1960: 6e 74 29 2b 2b 20 3e 3d 20 31 36 20 29 20 72 65  nt)++ >= 16 ) re
1970: 74 75 72 6e 20 27 30 27 3b 0a 20 20 64 69 67 69  turn '0';.  digi
1980: 74 20 3d 20 28 69 6e 74 29 2a 76 61 6c 3b 0a 20  t = (int)*val;. 
1990: 20 64 20 3d 20 64 69 67 69 74 3b 0a 20 20 64 69   d = digit;.  di
19a0: 67 69 74 20 2b 3d 20 27 30 27 3b 0a 20 20 2a 76  git += '0';.  *v
19b0: 61 6c 20 3d 20 28 2a 76 61 6c 20 2d 20 64 29 2a  al = (*val - d)*
19c0: 31 30 2e 30 3b 0a 20 20 72 65 74 75 72 6e 20 28  10.0;.  return (
19d0: 63 68 61 72 29 64 69 67 69 74 3b 0a 7d 0a 23 65  char)digit;.}.#e
19e0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
19f0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1a00: 4e 54 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 70 70  NT */../*.** App
1a10: 65 6e 64 20 4e 20 73 70 61 63 65 20 63 68 61 72  end N space char
1a20: 61 63 74 65 72 73 20 74 6f 20 74 68 65 20 67 69  acters to the gi
1a30: 76 65 6e 20 73 74 72 69 6e 67 20 62 75 66 66 65  ven string buffe
1a40: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  r..*/.static voi
1a50: 64 20 61 70 70 65 6e 64 53 70 61 63 65 28 53 74  d appendSpace(St
1a60: 72 41 63 63 75 6d 20 2a 70 41 63 63 75 6d 2c 20  rAccum *pAccum, 
1a70: 69 6e 74 20 4e 29 7b 0a 20 20 73 74 61 74 69 63  int N){.  static
1a80: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 53 70 61   const char zSpa
1a90: 63 65 73 5b 5d 20 3d 20 22 20 20 20 20 20 20 20  ces[] = "       
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab0: 20 20 20 20 20 20 22 3b 0a 20 20 77 68 69 6c 65        ";.  while
1ac0: 28 20 4e 3e 3d 28 69 6e 74 29 73 69 7a 65 6f 66  ( N>=(int)sizeof
1ad0: 28 7a 53 70 61 63 65 73 29 2d 31 20 29 7b 0a 20  (zSpaces)-1 ){. 
1ae0: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
1af0: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
1b00: 20 7a 53 70 61 63 65 73 2c 20 73 69 7a 65 6f 66   zSpaces, sizeof
1b10: 28 7a 53 70 61 63 65 73 29 2d 31 29 3b 0a 20 20  (zSpaces)-1);.  
1b20: 20 20 4e 20 2d 3d 20 73 69 7a 65 6f 66 28 7a 53    N -= sizeof(zS
1b30: 70 61 63 65 73 29 2d 31 3b 0a 20 20 7d 0a 20 20  paces)-1;.  }.  
1b40: 69 66 28 20 4e 3e 30 20 29 7b 0a 20 20 20 20 73  if( N>0 ){.    s
1b50: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
1b60: 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 7a 53 70  pend(pAccum, zSp
1b70: 61 63 65 73 2c 20 4e 29 3b 0a 20 20 7d 0a 7d 0a  aces, N);.  }.}.
1b80: 0a 2f 2a 0a 2a 2a 20 4f 6e 20 6d 61 63 68 69 6e  ./*.** On machin
1b90: 65 73 20 77 69 74 68 20 61 20 73 6d 61 6c 6c 20  es with a small 
1ba0: 73 74 61 63 6b 20 73 69 7a 65 2c 20 79 6f 75 20  stack size, you 
1bb0: 63 61 6e 20 72 65 64 65 66 69 6e 65 20 74 68 65  can redefine the
1bc0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  .** SQLITE_PRINT
1bd0: 5f 42 55 46 5f 53 49 5a 45 20 74 6f 20 62 65 20  _BUF_SIZE to be 
1be0: 6c 65 73 73 20 74 68 61 6e 20 33 35 30 2e 0a 2a  less than 350..*
1bf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
1c00: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20  _PRINT_BUF_SIZE 
1c10: 32 30 30 30 0a 23 69 66 6e 64 65 66 20 53 51 4c  2000.#ifndef SQL
1c20: 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49  ITE_PRINT_BUF_SI
1c30: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
1c40: 53 51 4c 49 54 45 5f 53 4d 41 4c 4c 5f 53 54 41  SQLITE_SMALL_STA
1c50: 43 4b 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  CK).#   define S
1c60: 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f  QLITE_PRINT_BUF_
1c70: 53 49 5a 45 20 35 30 0a 23 20 65 6c 73 65 0a 23  SIZE 50.# else.#
1c80: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
1c90: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20  _PRINT_BUF_SIZE 
1ca0: 33 35 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  350.# endif.#end
1cb0: 69 66 0a 23 64 65 66 69 6e 65 20 65 74 42 55 46  if.#define etBUF
1cc0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 50 52 49 4e  SIZE SQLITE_PRIN
1cd0: 54 5f 42 55 46 5f 53 49 5a 45 20 20 2f 2a 20 53  T_BUF_SIZE  /* S
1ce0: 69 7a 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  ize of the outpu
1cf0: 74 20 62 75 66 66 65 72 20 2a 2f 0a 0a 2f 2a 0a  t buffer */../*.
1d00: 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 72 6f 67  ** The root prog
1d10: 72 61 6d 2e 20 20 41 6c 6c 20 76 61 72 69 61 74  ram.  All variat
1d20: 69 6f 6e 73 20 63 61 6c 6c 20 74 68 69 73 20 63  ions call this c
1d30: 6f 72 65 2e 0a 2a 2a 0a 2a 2a 20 49 4e 50 55 54  ore..**.** INPUT
1d40: 53 3a 0a 2a 2a 20 20 20 66 75 6e 63 20 20 20 54  S:.**   func   T
1d50: 68 69 73 20 69 73 20 61 20 70 6f 69 6e 74 65 72  his is a pointer
1d60: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
1d70: 61 6b 69 6e 67 20 74 68 72 65 65 20 61 72 67 75  aking three argu
1d80: 6d 65 6e 74 73 0a 2a 2a 20 20 20 20 20 20 20 20  ments.**        
1d90: 20 20 20 20 31 2e 20 41 20 70 6f 69 6e 74 65 72      1. A pointer
1da0: 20 74 6f 20 61 6e 79 74 68 69 6e 67 2e 20 20 53   to anything.  S
1db0: 61 6d 65 20 61 73 20 74 68 65 20 22 61 72 67 22  ame as the "arg"
1dc0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2a 20 20   parameter..**  
1dd0: 20 20 20 20 20 20 20 20 20 20 32 2e 20 41 20 70            2. A p
1de0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 69  ointer to the li
1df0: 73 74 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  st of characters
1e00: 20 74 6f 20 62 65 20 6f 75 74 70 75 74 0a 2a 2a   to be output.**
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1e20: 4e 6f 74 65 2c 20 74 68 69 73 20 6c 69 73 74 20  Note, this list 
1e30: 69 73 20 4e 4f 54 20 6e 75 6c 6c 20 74 65 72 6d  is NOT null term
1e40: 69 6e 61 74 65 64 2e 29 0a 2a 2a 20 20 20 20 20  inated.).**     
1e50: 20 20 20 20 20 20 20 33 2e 20 41 6e 20 69 6e 74         3. An int
1e60: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 63  eger number of c
1e70: 68 61 72 61 63 74 65 72 73 20 74 6f 20 62 65 20  haracters to be 
1e80: 6f 75 74 70 75 74 2e 0a 2a 2a 20 20 20 20 20 20  output..**      
1e90: 20 20 20 20 20 20 20 20 20 28 4e 6f 74 65 3a 20           (Note: 
1ea0: 54 68 69 73 20 6e 75 6d 62 65 72 20 6d 69 67 68  This number migh
1eb0: 74 20 62 65 20 7a 65 72 6f 2e 29 0a 2a 2a 0a 2a  t be zero.).**.*
1ec0: 2a 20 20 20 61 72 67 20 20 20 20 54 68 69 73 20  *   arg    This 
1ed0: 69 73 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74  is the pointer t
1ee0: 6f 20 61 6e 79 74 68 69 6e 67 20 77 68 69 63 68  o anything which
1ef0: 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20   will be passed 
1f00: 61 73 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20  as the.**       
1f10: 20 20 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e     first argumen
1f20: 74 20 74 6f 20 22 66 75 6e 63 22 2e 20 20 55 73  t to "func".  Us
1f30: 65 20 69 74 20 66 6f 72 20 77 68 61 74 65 76 65  e it for whateve
1f40: 72 20 79 6f 75 20 6c 69 6b 65 2e 0a 2a 2a 0a 2a  r you like..**.*
1f50: 2a 20 20 20 66 6d 74 20 20 20 20 54 68 69 73 20  *   fmt    This 
1f60: 69 73 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74  is the format st
1f70: 72 69 6e 67 2c 20 61 73 20 69 6e 20 74 68 65 20  ring, as in the 
1f80: 75 73 75 61 6c 20 70 72 69 6e 74 2e 0a 2a 2a 0a  usual print..**.
1f90: 2a 2a 20 20 20 61 70 20 20 20 20 20 54 68 69 73  **   ap     This
1fa0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1fb0: 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
1fc0: 65 6e 74 73 2e 20 20 53 61 6d 65 20 61 73 20 69  ents.  Same as i
1fd0: 6e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 76 66  n.**          vf
1fe0: 70 72 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 4f 55 54  print..**.** OUT
1ff0: 50 55 54 53 3a 0a 2a 2a 20 20 20 20 20 20 20 20  PUTS:.**        
2000: 20 20 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c    The return val
2010: 75 65 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ue is the total 
2020: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  number of charac
2030: 74 65 72 73 20 73 65 6e 74 20 74 6f 0a 2a 2a 20  ters sent to.** 
2040: 20 20 20 20 20 20 20 20 20 74 68 65 20 66 75 6e           the fun
2050: 63 74 69 6f 6e 20 22 66 75 6e 63 22 2e 20 20 52  ction "func".  R
2060: 65 74 75 72 6e 73 20 2d 31 20 6f 6e 20 61 20 65  eturns -1 on a e
2070: 72 72 6f 72 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  rror..**.** Note
2080: 20 74 68 61 74 20 74 68 65 20 6f 72 64 65 72 20   that the order 
2090: 69 6e 20 77 68 69 63 68 20 61 75 74 6f 6d 61 74  in which automat
20a0: 69 63 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ic variables are
20b0: 20 64 65 63 6c 61 72 65 64 20 62 65 6c 6f 77 0a   declared below.
20c0: 2a 2a 20 73 65 65 6d 73 20 74 6f 20 6d 61 6b 65  ** seems to make
20d0: 20 61 20 62 69 67 20 64 69 66 66 65 72 65 6e 63   a big differenc
20e0: 65 20 69 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67  e in determining
20f0: 20 68 6f 77 20 66 61 73 74 20 74 68 69 73 20 62   how fast this b
2100: 65 61 73 74 0a 2a 2a 20 77 69 6c 6c 20 72 75 6e  east.** will run
2110: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2120: 33 56 58 50 72 69 6e 74 66 28 0a 20 20 53 74 72  3VXPrintf(.  Str
2130: 41 63 63 75 6d 20 2a 70 41 63 63 75 6d 2c 20 20  Accum *pAccum,  
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 20 72 65  /* Accumulate re
2160: 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 20  sults here */.  
2170: 69 6e 74 20 75 73 65 45 78 74 65 6e 64 65 64 2c  int useExtended,
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 2f 2a 20 41 6c 6c 6f 77 20 65 78 74 65     /* Allow exte
21a0: 6e 64 65 64 20 25 2d 63 6f 6e 76 65 72 73 69 6f  nded %-conversio
21b0: 6e 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ns */.  const ch
21c0: 61 72 20 2a 66 6d 74 2c 20 20 20 20 20 20 20 20  ar *fmt,        
21d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
21e0: 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20  rmat string */. 
21f0: 20 76 61 5f 6c 69 73 74 20 61 70 20 20 20 20 20   va_list ap     
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2210: 20 20 20 20 2f 2a 20 61 72 67 75 6d 65 6e 74 73      /* arguments
2220: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 63 3b 20   */.){.  int c; 
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2240: 20 20 20 20 2f 2a 20 4e 65 78 74 20 63 68 61 72      /* Next char
2250: 61 63 74 65 72 20 69 6e 20 74 68 65 20 66 6f 72  acter in the for
2260: 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20  mat string */.  
2270: 63 68 61 72 20 2a 62 75 66 70 74 3b 20 20 20 20  char *bufpt;    
2280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
2290: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 63 6f 6e  inter to the con
22a0: 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 20 2a  version buffer *
22b0: 2f 0a 20 20 69 6e 74 20 70 72 65 63 69 73 69 6f  /.  int precisio
22c0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
22d0: 2a 20 50 72 65 63 69 73 69 6f 6e 20 6f 66 20 74  * Precision of t
22e0: 68 65 20 63 75 72 72 65 6e 74 20 66 69 65 6c 64  he current field
22f0: 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 67 74 68   */.  int length
2300: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2310: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
2320: 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74  e field */.  int
2330: 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 20   idx;           
2340: 20 20 20 20 20 20 20 20 2f 2a 20 41 20 67 65 6e          /* A gen
2350: 65 72 61 6c 20 70 75 72 70 6f 73 65 20 6c 6f 6f  eral purpose loo
2360: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2370: 6e 74 20 77 69 64 74 68 3b 20 20 20 20 20 20 20  nt width;       
2380: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 64            /* Wid
2390: 74 68 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  th of the curren
23a0: 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 65 74 42  t field */.  etB
23b0: 79 74 65 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73  yte flag_leftjus
23c0: 74 69 66 79 3b 20 20 20 2f 2a 20 54 72 75 65 20  tify;   /* True 
23d0: 69 66 20 22 2d 22 20 66 6c 61 67 20 69 73 20 70  if "-" flag is p
23e0: 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79  resent */.  etBy
23f0: 74 65 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e  te flag_plussign
2400: 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
2410: 66 20 22 2b 22 20 66 6c 61 67 20 69 73 20 70 72  f "+" flag is pr
2420: 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74  esent */.  etByt
2430: 65 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e  e flag_blanksign
2440: 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
2450: 20 22 20 22 20 66 6c 61 67 20 69 73 20 70 72 65   " " flag is pre
2460: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65  sent */.  etByte
2470: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
2480: 6f 72 6d 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  orm; /* True if 
2490: 22 23 22 20 66 6c 61 67 20 69 73 20 70 72 65 73  "#" flag is pres
24a0: 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ent */.  etByte 
24b0: 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 20 20  flag_altform2;  
24c0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
24d0: 21 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65  !" flag is prese
24e0: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  nt */.  etByte f
24f0: 6c 61 67 5f 7a 65 72 6f 70 61 64 3b 20 20 20 20  lag_zeropad;    
2500: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66 69     /* True if fi
2510: 65 6c 64 20 77 69 64 74 68 20 63 6f 6e 73 74 61  eld width consta
2520: 6e 74 20 73 74 61 72 74 73 20 77 69 74 68 20 7a  nt starts with z
2530: 65 72 6f 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ero */.  etByte 
2540: 66 6c 61 67 5f 6c 6f 6e 67 3b 20 20 20 20 20 20  flag_long;      
2550: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
2560: 6c 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65  l" flag is prese
2570: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  nt */.  etByte f
2580: 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 3b 20 20 20  lag_longlong;   
2590: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
25a0: 65 20 22 6c 6c 22 20 66 6c 61 67 20 69 73 20 70  e "ll" flag is p
25b0: 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79  resent */.  etBy
25c0: 74 65 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20  te done;        
25d0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 74         /* Loop t
25e0: 65 72 6d 69 6e 61 74 69 6f 6e 20 66 6c 61 67 20  ermination flag 
25f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e 74  */.  sqlite_uint
2600: 36 34 20 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20  64 longvalue;   
2610: 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20 69 6e 74  /* Value for int
2620: 65 67 65 72 20 74 79 70 65 73 20 2a 2f 0a 20 20  eger types */.  
2630: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
2640: 72 65 61 6c 76 61 6c 75 65 3b 20 2f 2a 20 56 61  realvalue; /* Va
2650: 6c 75 65 20 66 6f 72 20 72 65 61 6c 20 74 79 70  lue for real typ
2660: 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74  es */.  const et
2670: 5f 69 6e 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20  _info *infop;   
2680: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
2690: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
26a0: 20 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20   info structure 
26b0: 2a 2f 0a 20 20 63 68 61 72 20 62 75 66 5b 65 74  */.  char buf[et
26c0: 42 55 46 53 49 5a 45 5d 3b 20 20 20 20 20 20 20  BUFSIZE];       
26d0: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 62 75  /* Conversion bu
26e0: 66 66 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 70  ffer */.  char p
26f0: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
2700: 20 20 20 20 20 2f 2a 20 50 72 65 66 69 78 20 63       /* Prefix c
2710: 68 61 72 61 63 74 65 72 2e 20 20 22 2b 22 20 6f  haracter.  "+" o
2720: 72 20 22 2d 22 20 6f 72 20 22 20 22 20 6f 72 20  r "-" or " " or 
2730: 27 5c 30 27 2e 20 2a 2f 0a 20 20 65 74 42 79 74  '\0'. */.  etByt
2740: 65 20 78 74 79 70 65 20 3d 20 30 3b 20 20 20 20  e xtype = 0;    
2750: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73        /* Convers
2760: 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f 0a  ion paradigm */.
2770: 20 20 63 68 61 72 20 2a 7a 45 78 74 72 61 3b 20    char *zExtra; 
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2790: 45 78 74 72 61 20 6d 65 6d 6f 72 79 20 75 73 65  Extra memory use
27a0: 64 20 66 6f 72 20 65 74 54 43 4c 45 53 43 41 50  d for etTCLESCAP
27b0: 45 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 2a 2f  E conversions */
27c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27d0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
27e0: 49 4e 54 0a 20 20 69 6e 74 20 20 65 78 70 2c 20  INT.  int  exp, 
27f0: 65 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  e2;             
2800: 20 2f 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20   /* exponent of 
2810: 72 65 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a  real numbers */.
2820: 20 20 64 6f 75 62 6c 65 20 72 6f 75 6e 64 65 72    double rounder
2830: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
2840: 55 73 65 64 20 66 6f 72 20 72 6f 75 6e 64 69 6e  Used for roundin
2850: 67 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  g floating point
2860: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 65 74 42   values */.  etB
2870: 79 74 65 20 66 6c 61 67 5f 64 70 3b 20 20 20 20  yte flag_dp;    
2880: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
2890: 69 66 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  if decimal point
28a0: 20 73 68 6f 75 6c 64 20 62 65 20 73 68 6f 77 6e   should be shown
28b0: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
28c0: 67 5f 72 74 7a 3b 20 20 20 20 20 20 20 20 20 20  g_rtz;          
28d0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 72 61 69   /* True if trai
28e0: 6c 69 6e 67 20 7a 65 72 6f 73 20 73 68 6f 75 6c  ling zeros shoul
28f0: 64 20 62 65 20 72 65 6d 6f 76 65 64 20 2a 2f 0a  d be removed */.
2900: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 65 78    etByte flag_ex
2910: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
2920: 54 72 75 65 20 74 6f 20 66 6f 72 63 65 20 64 69  True to force di
2930: 73 70 6c 61 79 20 6f 66 20 74 68 65 20 65 78 70  splay of the exp
2940: 6f 6e 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  onent */.  int n
2950: 73 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sd;             
2960: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2970: 6f 66 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64  of significant d
2980: 69 67 69 74 73 20 72 65 74 75 72 6e 65 64 20 2a  igits returned *
2990: 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 6c 65 6e 67  /.#endif..  leng
29a0: 74 68 20 3d 20 30 3b 0a 20 20 62 75 66 70 74 20  th = 0;.  bufpt 
29b0: 3d 20 30 3b 0a 20 20 66 6f 72 28 3b 20 28 63 3d  = 0;.  for(; (c=
29c0: 28 2a 66 6d 74 29 29 21 3d 30 3b 20 2b 2b 66 6d  (*fmt))!=0; ++fm
29d0: 74 29 7b 0a 20 20 20 20 69 66 28 20 63 21 3d 27  t){.    if( c!='
29e0: 25 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  %' ){.      int 
29f0: 61 6d 74 3b 0a 20 20 20 20 20 20 62 75 66 70 74  amt;.      bufpt
2a00: 20 3d 20 28 63 68 61 72 20 2a 29 66 6d 74 3b 0a   = (char *)fmt;.
2a10: 20 20 20 20 20 20 61 6d 74 20 3d 20 31 3b 0a 20        amt = 1;. 
2a20: 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d 28       while( (c=(
2a30: 2a 2b 2b 66 6d 74 29 29 21 3d 27 25 27 20 26 26  *++fmt))!='%' &&
2a40: 20 63 21 3d 30 20 29 20 61 6d 74 2b 2b 3b 0a 20   c!=0 ) amt++;. 
2a50: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
2a60: 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75  ccumAppend(pAccu
2a70: 6d 2c 20 62 75 66 70 74 2c 20 61 6d 74 29 3b 0a  m, bufpt, amt);.
2a80: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29        if( c==0 )
2a90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2aa0: 20 20 69 66 28 20 28 63 3d 28 2a 2b 2b 66 6d 74    if( (c=(*++fmt
2ab0: 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ))==0 ){.      s
2ac0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
2ad0: 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 22 25 22  pend(pAccum, "%"
2ae0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 1);.      brea
2af0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20  k;.    }.    /* 
2b00: 46 69 6e 64 20 6f 75 74 20 77 68 61 74 20 66 6c  Find out what fl
2b10: 61 67 73 20 61 72 65 20 70 72 65 73 65 6e 74 20  ags are present 
2b20: 2a 2f 0a 20 20 20 20 66 6c 61 67 5f 6c 65 66 74  */.    flag_left
2b30: 6a 75 73 74 69 66 79 20 3d 20 66 6c 61 67 5f 70  justify = flag_p
2b40: 6c 75 73 73 69 67 6e 20 3d 20 66 6c 61 67 5f 62  lussign = flag_b
2b50: 6c 61 6e 6b 73 69 67 6e 20 3d 20 0a 20 20 20 20  lanksign = .    
2b60: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
2b70: 6f 72 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f  orm = flag_altfo
2b80: 72 6d 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70  rm2 = flag_zerop
2b90: 61 64 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65  ad = 0;.    done
2ba0: 20 3d 20 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20   = 0;.    do{.  
2bb0: 20 20 20 20 73 77 69 74 63 68 28 20 63 20 29 7b      switch( c ){
2bc0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27 2d  .        case '-
2bd0: 27 3a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75  ':   flag_leftju
2be0: 73 74 69 66 79 20 3d 20 31 3b 20 20 20 20 20 62  stify = 1;     b
2bf0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
2c00: 73 65 20 27 2b 27 3a 20 20 20 66 6c 61 67 5f 70  se '+':   flag_p
2c10: 6c 75 73 73 69 67 6e 20 3d 20 31 3b 20 20 20 20  lussign = 1;    
2c20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2c30: 20 20 20 63 61 73 65 20 27 20 27 3a 20 20 20 66     case ' ':   f
2c40: 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20  lag_blanksign = 
2c50: 31 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;       break;.
2c60: 20 20 20 20 20 20 20 20 63 61 73 65 20 27 23 27          case '#'
2c70: 3a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61  :   flag_alterna
2c80: 74 65 66 6f 72 6d 20 3d 20 31 3b 20 20 20 62 72  teform = 1;   br
2c90: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
2ca0: 65 20 27 21 27 3a 20 20 20 66 6c 61 67 5f 61 6c  e '!':   flag_al
2cb0: 74 66 6f 72 6d 32 20 3d 20 31 3b 20 20 20 20 20  tform2 = 1;     
2cc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2cd0: 20 20 63 61 73 65 20 27 30 27 3a 20 20 20 66 6c    case '0':   fl
2ce0: 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 31 3b 20  ag_zeropad = 1; 
2cf0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2d00: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20         default: 
2d10: 20 20 20 64 6f 6e 65 20 3d 20 31 3b 20 20 20 20     done = 1;    
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
2d30: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
2d40: 7d 77 68 69 6c 65 28 20 21 64 6f 6e 65 20 26 26  }while( !done &&
2d50: 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 30   (c=(*++fmt))!=0
2d60: 20 29 3b 0a 20 20 20 20 2f 2a 20 47 65 74 20 74   );.    /* Get t
2d70: 68 65 20 66 69 65 6c 64 20 77 69 64 74 68 20 2a  he field width *
2d80: 2f 0a 20 20 20 20 77 69 64 74 68 20 3d 20 30 3b  /.    width = 0;
2d90: 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20  .    if( c=='*' 
2da0: 29 7b 0a 20 20 20 20 20 20 77 69 64 74 68 20 3d  ){.      width =
2db0: 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b   va_arg(ap,int);
2dc0: 0a 20 20 20 20 20 20 69 66 28 20 77 69 64 74 68  .      if( width
2dd0: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6c  <0 ){.        fl
2de0: 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 3d  ag_leftjustify =
2df0: 20 31 3b 0a 20 20 20 20 20 20 20 20 77 69 64 74   1;.        widt
2e00: 68 20 3d 20 2d 77 69 64 74 68 3b 0a 20 20 20 20  h = -width;.    
2e10: 20 20 7d 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b    }.      c = *+
2e20: 2b 66 6d 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  +fmt;.    }else{
2e30: 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 3e  .      while( c>
2e40: 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29  ='0' && c<='9' )
2e50: 7b 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20  {.        width 
2e60: 3d 20 77 69 64 74 68 2a 31 30 20 2b 20 63 20 2d  = width*10 + c -
2e70: 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 63 20   '0';.        c 
2e80: 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20  = *++fmt;.      
2e90: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
2ea0: 77 69 64 74 68 20 3e 20 65 74 42 55 46 53 49 5a  width > etBUFSIZ
2eb0: 45 2d 31 30 20 29 7b 0a 20 20 20 20 20 20 77 69  E-10 ){.      wi
2ec0: 64 74 68 20 3d 20 65 74 42 55 46 53 49 5a 45 2d  dth = etBUFSIZE-
2ed0: 31 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a  10;.    }.    /*
2ee0: 20 47 65 74 20 74 68 65 20 70 72 65 63 69 73 69   Get the precisi
2ef0: 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d  on */.    if( c=
2f00: 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 70 72  ='.' ){.      pr
2f10: 65 63 69 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20  ecision = 0;.   
2f20: 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20     c = *++fmt;. 
2f30: 20 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20       if( c=='*' 
2f40: 29 7b 0a 20 20 20 20 20 20 20 20 70 72 65 63 69  ){.        preci
2f50: 73 69 6f 6e 20 3d 20 76 61 5f 61 72 67 28 61 70  sion = va_arg(ap
2f60: 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  ,int);.        i
2f70: 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30 20 29  f( precision<0 )
2f80: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 70 72   precision = -pr
2f90: 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20  ecision;.       
2fa0: 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20   c = *++fmt;.   
2fb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2fc0: 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27 20    while( c>='0' 
2fd0: 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20  && c<='9' ){.   
2fe0: 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e         precision
2ff0: 20 3d 20 70 72 65 63 69 73 69 6f 6e 2a 31 30 20   = precision*10 
3000: 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20  + c - '0';.     
3010: 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b       c = *++fmt;
3020: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
3030: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
3040: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
3050: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a  -1;.    }.    /*
3060: 20 47 65 74 20 74 68 65 20 63 6f 6e 76 65 72 73   Get the convers
3070: 69 6f 6e 20 74 79 70 65 20 6d 6f 64 69 66 69 65  ion type modifie
3080: 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d  r */.    if( c==
3090: 27 6c 27 20 29 7b 0a 20 20 20 20 20 20 66 6c 61  'l' ){.      fla
30a0: 67 5f 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20  g_long = 1;.    
30b0: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
30c0: 20 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 29      if( c=='l' )
30d0: 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c  {.        flag_l
30e0: 6f 6e 67 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20  onglong = 1;.   
30f0: 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b       c = *++fmt;
3100: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
3110: 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c        flag_longl
3120: 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ong = 0;.      }
3130: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3140: 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c    flag_long = fl
3150: 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b  ag_longlong = 0;
3160: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 65  .    }.    /* Fe
3170: 74 63 68 20 74 68 65 20 69 6e 66 6f 20 65 6e 74  tch the info ent
3180: 72 79 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ry for the field
3190: 20 2a 2f 0a 20 20 20 20 69 6e 66 6f 70 20 3d 20   */.    infop = 
31a0: 26 66 6d 74 69 6e 66 6f 5b 30 5d 3b 0a 20 20 20  &fmtinfo[0];.   
31b0: 20 78 74 79 70 65 20 3d 20 65 74 49 4e 56 41 4c   xtype = etINVAL
31c0: 49 44 3b 0a 20 20 20 20 66 6f 72 28 69 64 78 3d  ID;.    for(idx=
31d0: 30 3b 20 69 64 78 3c 41 72 72 61 79 53 69 7a 65  0; idx<ArraySize
31e0: 28 66 6d 74 69 6e 66 6f 29 3b 20 69 64 78 2b 2b  (fmtinfo); idx++
31f0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  ){.      if( c==
3200: 66 6d 74 69 6e 66 6f 5b 69 64 78 5d 2e 66 6d 74  fmtinfo[idx].fmt
3210: 74 79 70 65 20 29 7b 0a 20 20 20 20 20 20 20 20  type ){.        
3220: 69 6e 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f  infop = &fmtinfo
3230: 5b 69 64 78 5d 3b 0a 20 20 20 20 20 20 20 20 69  [idx];.        i
3240: 66 28 20 75 73 65 45 78 74 65 6e 64 65 64 20 7c  f( useExtended |
3250: 7c 20 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20  | (infop->flags 
3260: 26 20 46 4c 41 47 5f 49 4e 54 45 52 4e 29 3d 3d  & FLAG_INTERN)==
3270: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78  0 ){.          x
3280: 74 79 70 65 20 3d 20 69 6e 66 6f 70 2d 3e 74 79  type = infop->ty
3290: 70 65 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  pe;.        }els
32a0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  e{.          ret
32b0: 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
32c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
32d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
32e0: 7a 45 78 74 72 61 20 3d 20 30 3b 0a 0a 0a 20 20  zExtra = 0;...  
32f0: 20 20 2f 2a 20 4c 69 6d 69 74 20 74 68 65 20 70    /* Limit the p
3300: 72 65 63 69 73 69 6f 6e 20 74 6f 20 70 72 65 76  recision to prev
3310: 65 6e 74 20 6f 76 65 72 66 6c 6f 77 69 6e 67 20  ent overflowing 
3320: 62 75 66 5b 5d 20 64 75 72 69 6e 67 20 63 6f 6e  buf[] during con
3330: 76 65 72 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  version */.    i
3340: 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 65 74 42  f( precision>etB
3350: 55 46 53 49 5a 45 2d 34 30 20 26 26 20 28 69 6e  UFSIZE-40 && (in
3360: 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41  fop->flags & FLA
3370: 47 5f 53 54 52 49 4e 47 29 3d 3d 30 20 29 7b 0a  G_STRING)==0 ){.
3380: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
3390: 3d 20 65 74 42 55 46 53 49 5a 45 2d 34 30 3b 0a  = etBUFSIZE-40;.
33a0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20      }..    /*.  
33b0: 20 20 2a 2a 20 41 74 20 74 68 69 73 20 70 6f 69    ** At this poi
33c0: 6e 74 2c 20 76 61 72 69 61 62 6c 65 73 20 61 72  nt, variables ar
33d0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73  e initialized as
33e0: 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a   follows:.    **
33f0: 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61  .    **   flag_a
3400: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 20 20 20  lternateform    
3410: 20 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20        TRUE if a 
3420: 27 23 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a  '#' is present..
3430: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c      **   flag_al
3440: 74 66 6f 72 6d 32 20 20 20 20 20 20 20 20 20 20  tform2          
3450: 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27       TRUE if a '
3460: 21 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20  !' is present.. 
3470: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 70 6c 75     **   flag_plu
3480: 73 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20  ssign           
3490: 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27 2b      TRUE if a '+
34a0: 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20  ' is present..  
34b0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 65 66 74    **   flag_left
34c0: 6a 75 73 74 69 66 79 20 20 20 20 20 20 20 20 20  justify         
34d0: 20 20 20 54 52 55 45 20 69 66 20 61 20 27 2d 27     TRUE if a '-'
34e0: 20 69 73 20 70 72 65 73 65 6e 74 20 6f 72 20 69   is present or i
34f0: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 20 20 20  f the.    **    
3500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3510: 20 20 20 20 20 20 20 20 20 20 20 66 69 65 6c 64             field
3520: 20 77 69 64 74 68 20 77 61 73 20 6e 65 67 61 74   width was negat
3530: 69 76 65 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c  ive..    **   fl
3540: 61 67 5f 7a 65 72 6f 70 61 64 20 20 20 20 20 20  ag_zeropad      
3550: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69            TRUE i
3560: 66 20 74 68 65 20 77 69 64 74 68 20 62 65 67 61  f the width bega
3570: 6e 20 77 69 74 68 20 30 2e 0a 20 20 20 20 2a 2a  n with 0..    **
3580: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 20 20 20     flag_long    
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
35a0: 52 55 45 20 69 66 20 74 68 65 20 6c 65 74 74 65  RUE if the lette
35b0: 72 20 27 6c 27 20 28 65 6c 6c 29 20 70 72 65 66  r 'l' (ell) pref
35c0: 69 78 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20  ixed.    **     
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6f            the co
35f0: 6e 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74  nversion charact
3600: 65 72 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  er..    **   fla
3610: 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 20 20 20 20 20  g_longlong      
3620: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
3630: 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c 6c 27   the letter 'll'
3640: 20 28 65 6c 6c 20 65 6c 6c 29 20 70 72 65 66 69   (ell ell) prefi
3650: 78 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  xed.    **      
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3670: 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e           the con
3680: 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65  version characte
3690: 72 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67  r..    **   flag
36a0: 5f 62 6c 61 6e 6b 73 69 67 6e 20 20 20 20 20 20  _blanksign      
36b0: 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20          TRUE if 
36c0: 61 20 27 20 27 20 69 73 20 70 72 65 73 65 6e 74  a ' ' is present
36d0: 2e 0a 20 20 20 20 2a 2a 20 20 20 77 69 64 74 68  ..    **   width
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f0: 20 20 20 20 20 20 20 54 68 65 20 73 70 65 63 69         The speci
3700: 66 69 65 64 20 66 69 65 6c 64 20 77 69 64 74 68  fied field width
3710: 2e 20 20 54 68 69 73 20 69 73 0a 20 20 20 20 2a  .  This is.    *
3720: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3740: 61 6c 77 61 79 73 20 6e 6f 6e 2d 6e 65 67 61 74  always non-negat
3750: 69 76 65 2e 20 20 5a 65 72 6f 20 69 73 20 74 68  ive.  Zero is th
3760: 65 20 64 65 66 61 75 6c 74 2e 0a 20 20 20 20 2a  e default..    *
3770: 2a 20 20 20 70 72 65 63 69 73 69 6f 6e 20 20 20  *   precision   
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3790: 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 72  The specified pr
37a0: 65 63 69 73 69 6f 6e 2e 20 20 54 68 65 20 64 65  ecision.  The de
37b0: 66 61 75 6c 74 0a 20 20 20 20 2a 2a 20 20 20 20  fault.    **    
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d0: 20 20 20 20 20 20 20 20 20 20 20 69 73 20 2d 31             is -1
37e0: 2e 0a 20 20 20 20 2a 2a 20 20 20 78 74 79 70 65  ..    **   xtype
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 20 20 20 20 20 20 20 54 68 65 20 63 6c 61 73 73         The class
3810: 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   of the conversi
3820: 6f 6e 2e 0a 20 20 20 20 2a 2a 20 20 20 69 6e 66  on..    **   inf
3830: 6f 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  op              
3840: 20 20 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72           Pointer
3850: 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69   to the appropri
3860: 61 74 65 20 69 6e 66 6f 20 73 74 72 75 63 74 2e  ate info struct.
3870: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 77 69 74  .    */.    swit
3880: 63 68 28 20 78 74 79 70 65 20 29 7b 0a 20 20 20  ch( xtype ){.   
3890: 20 20 20 63 61 73 65 20 65 74 50 4f 49 4e 54 45     case etPOINTE
38a0: 52 3a 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  R:.        flag_
38b0: 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f  longlong = sizeo
38c0: 66 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66  f(char*)==sizeof
38d0: 28 69 36 34 29 3b 0a 20 20 20 20 20 20 20 20 66  (i64);.        f
38e0: 6c 61 67 5f 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f  lag_long = sizeo
38f0: 66 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66  f(char*)==sizeof
3900: 28 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20  (long int);.    
3910: 20 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f      /* Fall thro
3920: 75 67 68 20 69 6e 74 6f 20 74 68 65 20 6e 65 78  ugh into the nex
3930: 74 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  t case */.      
3940: 63 61 73 65 20 65 74 4f 52 44 49 4e 41 4c 3a 0a  case etORDINAL:.
3950: 20 20 20 20 20 20 63 61 73 65 20 65 74 52 41 44        case etRAD
3960: 49 58 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20  IX:.        if( 
3970: 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46  infop->flags & F
3980: 4c 41 47 5f 53 49 47 4e 45 44 20 29 7b 0a 20 20  LAG_SIGNED ){.  
3990: 20 20 20 20 20 20 20 20 69 36 34 20 76 3b 0a 20          i64 v;. 
39a0: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
39b0: 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a 20 20  g_longlong ){.  
39c0: 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61            v = va
39d0: 5f 61 72 67 28 61 70 2c 69 36 34 29 3b 0a 20 20  _arg(ap,i64);.  
39e0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
39f0: 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 7b 0a 20  ( flag_long ){. 
3a00: 20 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76             v = v
3a10: 61 5f 61 72 67 28 61 70 2c 6c 6f 6e 67 20 69 6e  a_arg(ap,long in
3a20: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  t);.          }e
3a30: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
3a40: 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69   v = va_arg(ap,i
3a50: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  nt);.          }
3a60: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76  .          if( v
3a70: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
3a80: 20 20 69 66 28 20 76 3d 3d 53 4d 41 4c 4c 45 53    if( v==SMALLES
3a90: 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20 20 20  T_INT64 ){.     
3aa0: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
3ab0: 75 65 20 3d 20 28 28 75 36 34 29 31 29 3c 3c 36  ue = ((u64)1)<<6
3ac0: 33 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  3;.            }
3ad0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
3ae0: 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20      longvalue = 
3af0: 2d 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  -v;.            
3b00: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  }.            pr
3b10: 65 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20  efix = '-';.    
3b20: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3b30: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
3b40: 75 65 20 3d 20 76 3b 0a 20 20 20 20 20 20 20 20  ue = v;.        
3b50: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 70 6c 75      if( flag_plu
3b60: 73 73 69 67 6e 20 29 20 20 20 20 20 20 20 20 70  ssign )        p
3b70: 72 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20  refix = '+';.   
3b80: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
3b90: 28 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e  ( flag_blanksign
3ba0: 20 29 20 20 70 72 65 66 69 78 20 3d 20 27 20 27   )  prefix = ' '
3bb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ;.            el
3bc0: 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  se              
3bd0: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
3be0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 0;.          }
3bf0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
3c00: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c            if( fl
3c10: 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a 20  ag_longlong ){. 
3c20: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76             longv
3c30: 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70  alue = va_arg(ap
3c40: 2c 75 36 34 29 3b 0a 20 20 20 20 20 20 20 20 20  ,u64);.         
3c50: 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f   }else if( flag_
3c60: 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20 20 20  long ){.        
3c70: 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20      longvalue = 
3c80: 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 6e  va_arg(ap,unsign
3c90: 65 64 20 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20  ed long int);.  
3ca0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
3cb0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76             longv
3cc0: 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70  alue = va_arg(ap
3cd0: 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a  ,unsigned int);.
3ce0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
3cf0: 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 30        prefix = 0
3d00: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
3d10: 20 20 20 20 69 66 28 20 6c 6f 6e 67 76 61 6c 75      if( longvalu
3d20: 65 3d 3d 30 20 29 20 66 6c 61 67 5f 61 6c 74 65  e==0 ) flag_alte
3d30: 72 6e 61 74 65 66 6f 72 6d 20 3d 20 30 3b 0a 20  rnateform = 0;. 
3d40: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f         if( flag_
3d50: 7a 65 72 6f 70 61 64 20 26 26 20 70 72 65 63 69  zeropad && preci
3d60: 73 69 6f 6e 3c 77 69 64 74 68 2d 28 70 72 65 66  sion<width-(pref
3d70: 69 78 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  ix!=0) ){.      
3d80: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
3d90: 77 69 64 74 68 2d 28 70 72 65 66 69 78 21 3d 30  width-(prefix!=0
3da0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
3db0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 26 62 75       bufpt = &bu
3dc0: 66 5b 65 74 42 55 46 53 49 5a 45 2d 31 5d 3b 0a  f[etBUFSIZE-1];.
3dd0: 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70          if( xtyp
3de0: 65 3d 3d 65 74 4f 52 44 49 4e 41 4c 20 29 7b 0a  e==etORDINAL ){.
3df0: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 69 63            static
3e00: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 4f 72 64   const char zOrd
3e10: 5b 5d 20 3d 20 22 74 68 73 74 6e 64 72 64 22 3b  [] = "thstndrd";
3e20: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 78  .          int x
3e30: 20 3d 20 28 69 6e 74 29 28 6c 6f 6e 67 76 61 6c   = (int)(longval
3e40: 75 65 20 25 20 31 30 29 3b 0a 20 20 20 20 20 20  ue % 10);.      
3e50: 20 20 20 20 69 66 28 20 78 3e 3d 34 20 7c 7c 20      if( x>=4 || 
3e60: 28 6c 6f 6e 67 76 61 6c 75 65 2f 31 30 29 25 31  (longvalue/10)%1
3e70: 30 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20  0==1 ){.        
3e80: 20 20 20 20 78 20 3d 20 30 3b 0a 20 20 20 20 20      x = 0;.     
3e90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
3ea0: 20 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d 33   buf[etBUFSIZE-3
3eb0: 5d 20 3d 20 7a 4f 72 64 5b 78 2a 32 5d 3b 0a 20  ] = zOrd[x*2];. 
3ec0: 20 20 20 20 20 20 20 20 20 62 75 66 5b 65 74 42           buf[etB
3ed0: 55 46 53 49 5a 45 2d 32 5d 20 3d 20 7a 4f 72 64  UFSIZE-2] = zOrd
3ee0: 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20 20 20 20 20  [x*2+1];.       
3ef0: 20 20 20 62 75 66 70 74 20 2d 3d 20 32 3b 0a 20     bufpt -= 2;. 
3f00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3f10: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 67   {.          reg
3f20: 69 73 74 65 72 20 63 6f 6e 73 74 20 63 68 61 72  ister const char
3f30: 20 2a 63 73 65 74 3b 20 20 20 20 20 20 2f 2a 20   *cset;      /* 
3f40: 55 73 65 20 72 65 67 69 73 74 65 72 73 20 66 6f  Use registers fo
3f50: 72 20 73 70 65 65 64 20 2a 2f 0a 20 20 20 20 20  r speed */.     
3f60: 20 20 20 20 20 72 65 67 69 73 74 65 72 20 69 6e       register in
3f70: 74 20 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20  t base;.        
3f80: 20 20 63 73 65 74 20 3d 20 26 61 44 69 67 69 74    cset = &aDigit
3f90: 73 5b 69 6e 66 6f 70 2d 3e 63 68 61 72 73 65 74  s[infop->charset
3fa0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 62 61 73  ];.          bas
3fb0: 65 20 3d 20 69 6e 66 6f 70 2d 3e 62 61 73 65 3b  e = infop->base;
3fc0: 0a 20 20 20 20 20 20 20 20 20 20 64 6f 7b 20 20  .          do{  
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76           /* Conv
4000: 65 72 74 20 74 6f 20 61 73 63 69 69 20 2a 2f 0a  ert to ascii */.
4010: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d              *(--
4020: 62 75 66 70 74 29 20 3d 20 63 73 65 74 5b 6c 6f  bufpt) = cset[lo
4030: 6e 67 76 61 6c 75 65 25 62 61 73 65 5d 3b 0a 20  ngvalue%base];. 
4040: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76             longv
4050: 61 6c 75 65 20 3d 20 6c 6f 6e 67 76 61 6c 75 65  alue = longvalue
4060: 2f 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20 20  /base;.         
4070: 20 7d 77 68 69 6c 65 28 20 6c 6f 6e 67 76 61 6c   }while( longval
4080: 75 65 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  ue>0 );.        
4090: 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68  }.        length
40a0: 20 3d 20 28 69 6e 74 29 28 26 62 75 66 5b 65 74   = (int)(&buf[et
40b0: 42 55 46 53 49 5a 45 2d 31 5d 2d 62 75 66 70 74  BUFSIZE-1]-bufpt
40c0: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  );.        for(i
40d0: 64 78 3d 70 72 65 63 69 73 69 6f 6e 2d 6c 65 6e  dx=precision-len
40e0: 67 74 68 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d  gth; idx>0; idx-
40f0: 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28  -){.          *(
4100: 2d 2d 62 75 66 70 74 29 20 3d 20 27 30 27 3b 20  --bufpt) = '0'; 
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a              /* Z
4130: 65 72 6f 20 70 61 64 20 2a 2f 0a 20 20 20 20 20  ero pad */.     
4140: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
4150: 20 70 72 65 66 69 78 20 29 20 2a 28 2d 2d 62 75   prefix ) *(--bu
4160: 66 70 74 29 20 3d 20 70 72 65 66 69 78 3b 20 20  fpt) = prefix;  
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4180: 41 64 64 20 73 69 67 6e 20 2a 2f 0a 20 20 20 20  Add sign */.    
4190: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 61 6c 74      if( flag_alt
41a0: 65 72 6e 61 74 65 66 6f 72 6d 20 26 26 20 69 6e  ernateform && in
41b0: 66 6f 70 2d 3e 70 72 65 66 69 78 20 29 7b 20 20  fop->prefix ){  
41c0: 20 20 20 20 2f 2a 20 41 64 64 20 22 30 22 20 6f      /* Add "0" o
41d0: 72 20 22 30 78 22 20 2a 2f 0a 20 20 20 20 20 20  r "0x" */.      
41e0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
41f0: 70 72 65 3b 0a 20 20 20 20 20 20 20 20 20 20 63  pre;.          c
4200: 68 61 72 20 78 3b 0a 20 20 20 20 20 20 20 20 20  har x;.         
4210: 20 70 72 65 20 3d 20 26 61 50 72 65 66 69 78 5b   pre = &aPrefix[
4220: 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 5d 3b 0a  infop->prefix];.
4230: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 3b 20            for(; 
4240: 28 78 3d 28 2a 70 72 65 29 29 21 3d 30 3b 20 70  (x=(*pre))!=0; p
4250: 72 65 2b 2b 29 20 2a 28 2d 2d 62 75 66 70 74 29  re++) *(--bufpt)
4260: 20 3d 20 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = x;.        }.
4270: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
4280: 20 28 69 6e 74 29 28 26 62 75 66 5b 65 74 42 55   (int)(&buf[etBU
4290: 46 53 49 5a 45 2d 31 5d 2d 62 75 66 70 74 29 3b  FSIZE-1]-bufpt);
42a0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
42b0: 20 20 20 20 20 20 63 61 73 65 20 65 74 46 4c 4f        case etFLO
42c0: 41 54 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65  AT:.      case e
42d0: 74 45 58 50 3a 0a 20 20 20 20 20 20 63 61 73 65  tEXP:.      case
42e0: 20 65 74 47 45 4e 45 52 49 43 3a 0a 20 20 20 20   etGENERIC:.    
42f0: 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20      realvalue = 
4300: 76 61 5f 61 72 67 28 61 70 2c 64 6f 75 62 6c 65  va_arg(ap,double
4310: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
4320: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4330: 4f 49 4e 54 0a 20 20 20 20 20 20 20 20 6c 65 6e  OINT.        len
4340: 67 74 68 20 3d 20 30 3b 0a 23 65 6c 73 65 0a 20  gth = 0;.#else. 
4350: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
4360: 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69 73 69  sion<0 ) precisi
4370: 6f 6e 20 3d 20 36 3b 20 20 20 20 20 20 20 20 20  on = 6;         
4380: 2f 2a 20 53 65 74 20 64 65 66 61 75 6c 74 20 70  /* Set default p
4390: 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  recision */.    
43a0: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
43b0: 6e 3e 65 74 42 55 46 53 49 5a 45 2f 32 2d 31 30  n>etBUFSIZE/2-10
43c0: 20 29 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 65   ) precision = e
43d0: 74 42 55 46 53 49 5a 45 2f 32 2d 31 30 3b 0a 20  tBUFSIZE/2-10;. 
43e0: 20 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76         if( realv
43f0: 61 6c 75 65 3c 30 2e 30 20 29 7b 0a 20 20 20 20  alue<0.0 ){.    
4400: 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20        realvalue 
4410: 3d 20 2d 72 65 61 6c 76 61 6c 75 65 3b 0a 20 20  = -realvalue;.  
4420: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
4430: 20 27 2d 27 3b 0a 20 20 20 20 20 20 20 20 7d 65   '-';.        }e
4440: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
4450: 66 28 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e  f( flag_plussign
4460: 20 29 20 20 20 20 20 20 20 20 20 20 70 72 65 66   )          pref
4470: 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20  ix = '+';.      
4480: 20 20 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61      else if( fla
4490: 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29 20 20 20  g_blanksign )   
44a0: 20 70 72 65 66 69 78 20 3d 20 27 20 27 3b 0a 20   prefix = ' ';. 
44b0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 20 20           else   
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44d0: 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 30        prefix = 0
44e0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
44f0: 20 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65      if( xtype==e
4500: 74 47 45 4e 45 52 49 43 20 26 26 20 70 72 65 63  tGENERIC && prec
4510: 69 73 69 6f 6e 3e 30 20 29 20 70 72 65 63 69 73  ision>0 ) precis
4520: 69 6f 6e 2d 2d 3b 0a 23 69 66 20 30 0a 20 20 20  ion--;.#if 0.   
4530: 20 20 20 20 20 2f 2a 20 52 6f 75 6e 64 69 6e 67       /* Rounding
4540: 20 77 6f 72 6b 73 20 6c 69 6b 65 20 42 53 44 20   works like BSD 
4550: 77 68 65 6e 20 74 68 65 20 63 6f 6e 73 74 61 6e  when the constan
4560: 74 20 30 2e 34 39 39 39 20 69 73 20 75 73 65 64  t 0.4999 is used
4570: 2e 20 20 57 69 65 72 64 21 20 2a 2f 0a 20 20 20  .  Wierd! */.   
4580: 20 20 20 20 20 66 6f 72 28 69 64 78 3d 70 72 65       for(idx=pre
4590: 63 69 73 69 6f 6e 2c 20 72 6f 75 6e 64 65 72 3d  cision, rounder=
45a0: 30 2e 34 39 39 39 3b 20 69 64 78 3e 30 3b 20 69  0.4999; idx>0; i
45b0: 64 78 2d 2d 2c 20 72 6f 75 6e 64 65 72 2a 3d 30  dx--, rounder*=0
45c0: 2e 31 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20  .1);.#else.     
45d0: 20 20 20 2f 2a 20 49 74 20 6d 61 6b 65 73 20 6d     /* It makes m
45e0: 6f 72 65 20 73 65 6e 73 65 20 74 6f 20 75 73 65  ore sense to use
45f0: 20 30 2e 35 20 2a 2f 0a 20 20 20 20 20 20 20 20   0.5 */.        
4600: 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f  for(idx=precisio
4610: 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 35 3b 20  n, rounder=0.5; 
4620: 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c 20 72 6f  idx>0; idx--, ro
4630: 75 6e 64 65 72 2a 3d 30 2e 31 29 7b 7d 0a 23 65  under*=0.1){}.#e
4640: 6e 64 69 66 0a 20 20 20 20 20 20 20 20 69 66 28  ndif.        if(
4650: 20 78 74 79 70 65 3d 3d 65 74 46 4c 4f 41 54 20   xtype==etFLOAT 
4660: 29 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72  ) realvalue += r
4670: 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20 20 20 20  ounder;.        
4680: 2f 2a 20 4e 6f 72 6d 61 6c 69 7a 65 20 72 65 61  /* Normalize rea
4690: 6c 76 61 6c 75 65 20 74 6f 20 77 69 74 68 69 6e  lvalue to within
46a0: 20 31 30 2e 30 20 3e 20 72 65 61 6c 76 61 6c 75   10.0 > realvalu
46b0: 65 20 3e 3d 20 31 2e 30 20 2a 2f 0a 20 20 20 20  e >= 1.0 */.    
46c0: 20 20 20 20 65 78 70 20 3d 20 30 3b 0a 20 20 20      exp = 0;.   
46d0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
46e0: 49 73 4e 61 4e 28 28 64 6f 75 62 6c 65 29 72 65  IsNaN((double)re
46f0: 61 6c 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20  alvalue) ){.    
4700: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 4e        bufpt = "N
4710: 61 4e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 6c  aN";.          l
4720: 65 6e 67 74 68 20 3d 20 33 3b 0a 20 20 20 20 20  ength = 3;.     
4730: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4740: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
4750: 28 20 72 65 61 6c 76 61 6c 75 65 3e 30 2e 30 20  ( realvalue>0.0 
4760: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  ){.          whi
4770: 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31  le( realvalue>=1
4780: 65 33 32 20 26 26 20 65 78 70 3c 3d 33 35 30 20  e32 && exp<=350 
4790: 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20  ){ realvalue *= 
47a0: 31 65 2d 33 32 3b 20 65 78 70 2b 3d 33 32 3b 20  1e-32; exp+=32; 
47b0: 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  }.          whil
47c0: 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65  e( realvalue>=1e
47d0: 38 20 26 26 20 65 78 70 3c 3d 33 35 30 20 29 7b  8 && exp<=350 ){
47e0: 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31 65   realvalue *= 1e
47f0: 2d 38 3b 20 65 78 70 2b 3d 38 3b 20 7d 0a 20 20  -8; exp+=8; }.  
4800: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72          while( r
4810: 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 20 26  ealvalue>=10.0 &
4820: 26 20 65 78 70 3c 3d 33 35 30 20 29 7b 20 72 65  & exp<=350 ){ re
4830: 61 6c 76 61 6c 75 65 20 2a 3d 20 30 2e 31 3b 20  alvalue *= 0.1; 
4840: 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  exp++; }.       
4850: 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61     while( realva
4860: 6c 75 65 3c 31 65 2d 38 20 29 7b 20 72 65 61 6c  lue<1e-8 ){ real
4870: 76 61 6c 75 65 20 2a 3d 20 31 65 38 3b 20 65 78  value *= 1e8; ex
4880: 70 2d 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20  p-=8; }.        
4890: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
48a0: 75 65 3c 31 2e 30 20 29 7b 20 72 65 61 6c 76 61  ue<1.0 ){ realva
48b0: 6c 75 65 20 2a 3d 20 31 30 2e 30 3b 20 65 78 70  lue *= 10.0; exp
48c0: 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  --; }.          
48d0: 69 66 28 20 65 78 70 3e 33 35 30 20 29 7b 0a 20  if( exp>350 ){. 
48e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70             if( p
48f0: 72 65 66 69 78 3d 3d 27 2d 27 20 29 7b 0a 20 20  refix=='-' ){.  
4900: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 70              bufp
4910: 74 20 3d 20 22 2d 49 6e 66 22 3b 0a 20 20 20 20  t = "-Inf";.    
4920: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
4930: 28 20 70 72 65 66 69 78 3d 3d 27 2b 27 20 29 7b  ( prefix=='+' ){
4940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  .              b
4950: 75 66 70 74 20 3d 20 22 2b 49 6e 66 22 3b 0a 20  ufpt = "+Inf";. 
4960: 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65             }else
4970: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4980: 62 75 66 70 74 20 3d 20 22 49 6e 66 22 3b 0a 20  bufpt = "Inf";. 
4990: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
49a0: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20           length 
49b0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
49c0: 30 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  0(bufpt);.      
49d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
49e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
49f0: 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70 74   }.        bufpt
4a00: 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20   = buf;.        
4a10: 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66  /*.        ** If
4a20: 20 74 68 65 20 66 69 65 6c 64 20 74 79 70 65 20   the field type 
4a30: 69 73 20 65 74 47 45 4e 45 52 49 43 2c 20 74 68  is etGENERIC, th
4a40: 65 6e 20 63 6f 6e 76 65 72 74 20 74 6f 20 65 69  en convert to ei
4a50: 74 68 65 72 20 65 74 45 58 50 0a 20 20 20 20 20  ther etEXP.     
4a60: 20 20 20 2a 2a 20 6f 72 20 65 74 46 4c 4f 41 54     ** or etFLOAT
4a70: 2c 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  , as appropriate
4a80: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
4a90: 20 20 20 20 20 66 6c 61 67 5f 65 78 70 20 3d 20       flag_exp = 
4aa0: 78 74 79 70 65 3d 3d 65 74 45 58 50 3b 0a 20 20  xtype==etEXP;.  
4ab0: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 21        if( xtype!
4ac0: 3d 65 74 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20  =etFLOAT ){.    
4ad0: 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20        realvalue 
4ae0: 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20  += rounder;.    
4af0: 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76 61        if( realva
4b00: 6c 75 65 3e 3d 31 30 2e 30 20 29 7b 20 72 65 61  lue>=10.0 ){ rea
4b10: 6c 76 61 6c 75 65 20 2a 3d 20 30 2e 31 3b 20 65  lvalue *= 0.1; e
4b20: 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20  xp++; }.        
4b30: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74  }.        if( xt
4b40: 79 70 65 3d 3d 65 74 47 45 4e 45 52 49 43 20 29  ype==etGENERIC )
4b50: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  {.          flag
4b60: 5f 72 74 7a 20 3d 20 21 66 6c 61 67 5f 61 6c 74  _rtz = !flag_alt
4b70: 65 72 6e 61 74 65 66 6f 72 6d 3b 0a 20 20 20 20  ernateform;.    
4b80: 20 20 20 20 20 20 69 66 28 20 65 78 70 3c 2d 34        if( exp<-4
4b90: 20 7c 7c 20 65 78 70 3e 70 72 65 63 69 73 69 6f   || exp>precisio
4ba0: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  n ){.           
4bb0: 20 78 74 79 70 65 20 3d 20 65 74 45 58 50 3b 0a   xtype = etEXP;.
4bc0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
4bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65  .            pre
4be0: 63 69 73 69 6f 6e 20 3d 20 70 72 65 63 69 73 69  cision = precisi
4bf0: 6f 6e 20 2d 20 65 78 70 3b 0a 20 20 20 20 20 20  on - exp;.      
4c00: 20 20 20 20 20 20 78 74 79 70 65 20 3d 20 65 74        xtype = et
4c10: 46 4c 4f 41 54 3b 0a 20 20 20 20 20 20 20 20 20  FLOAT;.         
4c20: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
4c30: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  {.          flag
4c40: 5f 72 74 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20  _rtz = 0;.      
4c50: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
4c60: 78 74 79 70 65 3d 3d 65 74 45 58 50 20 29 7b 0a  xtype==etEXP ){.
4c70: 20 20 20 20 20 20 20 20 20 20 65 32 20 3d 20 30            e2 = 0
4c80: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
4c90: 0a 20 20 20 20 20 20 20 20 20 20 65 32 20 3d 20  .          e2 = 
4ca0: 65 78 70 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  exp;.        }. 
4cb0: 20 20 20 20 20 20 20 6e 73 64 20 3d 20 30 3b 0a         nsd = 0;.
4cc0: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 64 70 20          flag_dp 
4cd0: 3d 20 28 70 72 65 63 69 73 69 6f 6e 3e 30 20 3f  = (precision>0 ?
4ce0: 31 3a 30 29 20 7c 20 66 6c 61 67 5f 61 6c 74 65  1:0) | flag_alte
4cf0: 72 6e 61 74 65 66 6f 72 6d 20 7c 20 66 6c 61 67  rnateform | flag
4d00: 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20 20 20 20  _altform2;.     
4d10: 20 20 20 2f 2a 20 54 68 65 20 73 69 67 6e 20 69     /* The sign i
4d20: 6e 20 66 72 6f 6e 74 20 6f 66 20 74 68 65 20 6e  n front of the n
4d30: 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  umber */.       
4d40: 20 69 66 28 20 70 72 65 66 69 78 20 29 7b 0a 20   if( prefix ){. 
4d50: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
4d60: 2b 2b 29 20 3d 20 70 72 65 66 69 78 3b 0a 20 20  ++) = prefix;.  
4d70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4d80: 2f 2a 20 44 69 67 69 74 73 20 70 72 69 6f 72 20  /* Digits prior 
4d90: 74 6f 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  to the decimal p
4da0: 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  oint */.        
4db0: 69 66 28 20 65 32 3c 30 20 29 7b 0a 20 20 20 20  if( e2<0 ){.    
4dc0: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
4dd0: 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   = '0';.        
4de0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4df0: 20 66 6f 72 28 3b 20 65 32 3e 3d 30 3b 20 65 32   for(; e2>=0; e2
4e00: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  --){.           
4e10: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 65 74   *(bufpt++) = et
4e20: 5f 67 65 74 64 69 67 69 74 28 26 72 65 61 6c 76  _getdigit(&realv
4e30: 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20 20  alue,&nsd);.    
4e40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4e50: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  }.        /* The
4e60: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a   decimal point *
4e70: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66 6c  /.        if( fl
4e80: 61 67 5f 64 70 20 29 7b 0a 20 20 20 20 20 20 20  ag_dp ){.       
4e90: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
4ea0: 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  '.';.        }. 
4eb0: 20 20 20 20 20 20 20 2f 2a 20 22 30 22 20 64 69         /* "0" di
4ec0: 67 69 74 73 20 61 66 74 65 72 20 74 68 65 20 64  gits after the d
4ed0: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 62 75 74  ecimal point but
4ee0: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
4ef0: 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 69 67  t.        ** sig
4f00: 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 20 6f  nificant digit o
4f10: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  f the number */.
4f20: 20 20 20 20 20 20 20 20 66 6f 72 28 65 32 2b 2b          for(e2++
4f30: 3b 20 65 32 3c 30 3b 20 70 72 65 63 69 73 69 6f  ; e2<0; precisio
4f40: 6e 2d 2d 2c 20 65 32 2b 2b 29 7b 0a 20 20 20 20  n--, e2++){.    
4f50: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 72        assert( pr
4f60: 65 63 69 73 69 6f 6e 3e 30 20 29 3b 0a 20 20 20  ecision>0 );.   
4f70: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4f80: 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20  ) = '0';.       
4f90: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69   }.        /* Si
4fa0: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
4fb0: 20 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d   after the decim
4fc0: 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20  al point */.    
4fd0: 20 20 20 20 77 68 69 6c 65 28 20 28 70 72 65 63      while( (prec
4fe0: 69 73 69 6f 6e 2d 2d 29 3e 30 20 29 7b 0a 20 20  ision--)>0 ){.  
4ff0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
5000: 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74  +) = et_getdigit
5010: 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64  (&realvalue,&nsd
5020: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
5030: 20 20 20 20 20 2f 2a 20 52 65 6d 6f 76 65 20 74       /* Remove t
5040: 72 61 69 6c 69 6e 67 20 7a 65 72 6f 73 20 61 6e  railing zeros an
5050: 64 20 74 68 65 20 22 2e 22 20 69 66 20 6e 6f 20  d the "." if no 
5060: 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 20 74 68  digits follow th
5070: 65 20 22 2e 22 20 2a 2f 0a 20 20 20 20 20 20 20  e "." */.       
5080: 20 69 66 28 20 66 6c 61 67 5f 72 74 7a 20 26 26   if( flag_rtz &&
5090: 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20   flag_dp ){.    
50a0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 62 75 66        while( buf
50b0: 70 74 5b 2d 31 5d 3d 3d 27 30 27 20 29 20 2a 28  pt[-1]=='0' ) *(
50c0: 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20 20  --bufpt) = 0;.  
50d0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
50e0: 62 75 66 70 74 3e 62 75 66 20 29 3b 0a 20 20 20  bufpt>buf );.   
50f0: 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70 74         if( bufpt
5100: 5b 2d 31 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  [-1]=='.' ){.   
5110: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
5120: 67 5f 61 6c 74 66 6f 72 6d 32 20 29 7b 0a 20 20  g_altform2 ){.  
5130: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
5140: 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20  fpt++) = '0';.  
5150: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
5160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  .              *
5170: 28 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20  (--bufpt) = 0;. 
5180: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5190: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
51a0: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 64   }.        /* Ad
51b0: 64 20 74 68 65 20 22 65 4e 4e 4e 22 20 73 75 66  d the "eNNN" suf
51c0: 66 69 78 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  fix */.        i
51d0: 66 28 20 66 6c 61 67 5f 65 78 70 20 7c 7c 20 78  f( flag_exp || x
51e0: 74 79 70 65 3d 3d 65 74 45 58 50 20 29 7b 0a 20  type==etEXP ){. 
51f0: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
5200: 2b 2b 29 20 3d 20 61 44 69 67 69 74 73 5b 69 6e  ++) = aDigits[in
5210: 66 6f 70 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20  fop->charset];. 
5220: 20 20 20 20 20 20 20 20 20 69 66 28 20 65 78 70           if( exp
5230: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
5240: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27    *(bufpt++) = '
5250: 2d 27 3b 20 65 78 70 20 3d 20 2d 65 78 70 3b 0a  -'; exp = -exp;.
5260: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
5270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62  .            *(b
5280: 75 66 70 74 2b 2b 29 20 3d 20 27 2b 27 3b 0a 20  ufpt++) = '+';. 
5290: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
52a0: 20 20 20 20 20 69 66 28 20 65 78 70 3e 3d 31 30       if( exp>=10
52b0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
52c0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 63   *(bufpt++) = (c
52d0: 68 61 72 29 28 28 65 78 70 2f 31 30 30 29 2b 27  har)((exp/100)+'
52e0: 30 27 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 31  0');        /* 1
52f0: 30 30 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20  00's digit */.  
5300: 20 20 20 20 20 20 20 20 20 20 65 78 70 20 25 3d            exp %=
5310: 20 31 30 30 3b 0a 20 20 20 20 20 20 20 20 20 20   100;.          
5320: 7d 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  }.          *(bu
5330: 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 28  fpt++) = (char)(
5340: 65 78 70 2f 31 30 2b 27 30 27 29 3b 20 20 20 20  exp/10+'0');    
5350: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 30 27 73           /* 10's
5360: 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20   digit */.      
5370: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
5380: 20 28 63 68 61 72 29 28 65 78 70 25 31 30 2b 27   (char)(exp%10+'
5390: 30 27 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  0');            
53a0: 20 2f 2a 20 31 27 73 20 64 69 67 69 74 20 2a 2f   /* 1's digit */
53b0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
53c0: 20 20 20 2a 62 75 66 70 74 20 3d 20 30 3b 0a 0a     *bufpt = 0;..
53d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 63          /* The c
53e0: 6f 6e 76 65 72 74 65 64 20 6e 75 6d 62 65 72 20  onverted number 
53f0: 69 73 20 69 6e 20 62 75 66 5b 5d 20 61 6e 64 20  is in buf[] and 
5400: 7a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 2e  zero terminated.
5410: 20 4f 75 74 70 75 74 20 69 74 2e 0a 20 20 20 20   Output it..    
5420: 20 20 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74      ** Note that
5430: 20 74 68 65 20 6e 75 6d 62 65 72 20 69 73 20 69   the number is i
5440: 6e 20 74 68 65 20 75 73 75 61 6c 20 6f 72 64 65  n the usual orde
5450: 72 2c 20 6e 6f 74 20 72 65 76 65 72 73 65 64 20  r, not reversed 
5460: 61 73 20 77 69 74 68 0a 20 20 20 20 20 20 20 20  as with.        
5470: 2a 2a 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  ** integer conve
5480: 72 73 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20 20 20  rsions. */.     
5490: 20 20 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74     length = (int
54a0: 29 28 62 75 66 70 74 2d 62 75 66 29 3b 0a 20 20  )(bufpt-buf);.  
54b0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
54c0: 66 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  f;..        /* S
54d0: 70 65 63 69 61 6c 20 63 61 73 65 3a 20 20 41 64  pecial case:  Ad
54e0: 64 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73 20  d leading zeros 
54f0: 69 66 20 74 68 65 20 66 6c 61 67 5f 7a 65 72 6f  if the flag_zero
5500: 70 61 64 20 66 6c 61 67 20 69 73 0a 20 20 20 20  pad flag is.    
5510: 20 20 20 20 2a 2a 20 73 65 74 20 61 6e 64 20 77      ** set and w
5520: 65 20 61 72 65 20 6e 6f 74 20 6c 65 66 74 20 6a  e are not left j
5530: 75 73 74 69 66 69 65 64 20 2a 2f 0a 20 20 20 20  ustified */.    
5540: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 7a 65 72      if( flag_zer
5550: 6f 70 61 64 20 26 26 20 21 66 6c 61 67 5f 6c 65  opad && !flag_le
5560: 66 74 6a 75 73 74 69 66 79 20 26 26 20 6c 65 6e  ftjustify && len
5570: 67 74 68 20 3c 20 77 69 64 74 68 29 7b 0a 20 20  gth < width){.  
5580: 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20          int i;. 
5590: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61           int nPa
55a0: 64 20 3d 20 77 69 64 74 68 20 2d 20 6c 65 6e 67  d = width - leng
55b0: 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  th;.          fo
55c0: 72 28 69 3d 77 69 64 74 68 3b 20 69 3e 3d 6e 50  r(i=width; i>=nP
55d0: 61 64 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20  ad; i--){.      
55e0: 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d 20 3d        bufpt[i] =
55f0: 20 62 75 66 70 74 5b 69 2d 6e 50 61 64 5d 3b 0a   bufpt[i-nPad];.
5600: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
5610: 20 20 20 20 20 20 69 20 3d 20 70 72 65 66 69 78        i = prefix
5620: 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 77  !=0;.          w
5630: 68 69 6c 65 28 20 6e 50 61 64 2d 2d 20 29 20 62  hile( nPad-- ) b
5640: 75 66 70 74 5b 69 2b 2b 5d 20 3d 20 27 30 27 3b  ufpt[i++] = '0';
5650: 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74  .          lengt
5660: 68 20 3d 20 77 69 64 74 68 3b 0a 20 20 20 20 20  h = width;.     
5670: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21     }.#endif /* !
5680: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
5690: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
56a0: 4e 54 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 62  NT) */.        b
56b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
56c0: 20 65 74 53 49 5a 45 3a 0a 20 20 20 20 20 20 20   etSIZE:.       
56d0: 20 2a 28 76 61 5f 61 72 67 28 61 70 2c 69 6e 74   *(va_arg(ap,int
56e0: 2a 29 29 20 3d 20 70 41 63 63 75 6d 2d 3e 6e 43  *)) = pAccum->nC
56f0: 68 61 72 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  har;.        len
5700: 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b  gth = width = 0;
5710: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5720: 20 20 20 20 20 20 63 61 73 65 20 65 74 50 45 52        case etPER
5730: 43 45 4e 54 3a 0a 20 20 20 20 20 20 20 20 62 75  CENT:.        bu
5740: 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20  f[0] = '%';.    
5750: 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b      bufpt = buf;
5760: 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20  .        length 
5770: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 1;.        bre
5780: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65  ak;.      case e
5790: 74 43 48 41 52 58 3a 0a 20 20 20 20 20 20 20 20  tCHARX:.        
57a0: 63 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  c = va_arg(ap,in
57b0: 74 29 3b 0a 20 20 20 20 20 20 20 20 62 75 66 5b  t);.        buf[
57c0: 30 5d 20 3d 20 28 63 68 61 72 29 63 3b 0a 20 20  0] = (char)c;.  
57d0: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
57e0: 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  ion>=0 ){.      
57f0: 20 20 20 20 66 6f 72 28 69 64 78 3d 31 3b 20 69      for(idx=1; i
5800: 64 78 3c 70 72 65 63 69 73 69 6f 6e 3b 20 69 64  dx<precision; id
5810: 78 2b 2b 29 20 62 75 66 5b 69 64 78 5d 20 3d 20  x++) buf[idx] = 
5820: 28 63 68 61 72 29 63 3b 0a 20 20 20 20 20 20 20  (char)c;.       
5830: 20 20 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63     length = prec
5840: 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 7d  ision;.        }
5850: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
5860: 6c 65 6e 67 74 68 20 3d 31 3b 0a 20 20 20 20 20  length =1;.     
5870: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66     }.        buf
5880: 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20  pt = buf;.      
5890: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
58a0: 61 73 65 20 65 74 53 54 52 49 4e 47 3a 0a 20 20  ase etSTRING:.  
58b0: 20 20 20 20 63 61 73 65 20 65 74 44 59 4e 53 54      case etDYNST
58c0: 52 49 4e 47 3a 0a 20 20 20 20 20 20 20 20 62 75  RING:.        bu
58d0: 66 70 74 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  fpt = va_arg(ap,
58e0: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
58f0: 69 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a  if( bufpt==0 ){.
5900: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
5910: 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 7d 65  = "";.        }e
5920: 6c 73 65 20 69 66 28 20 78 74 79 70 65 3d 3d 65  lse if( xtype==e
5930: 74 44 59 4e 53 54 52 49 4e 47 20 29 7b 0a 20 20  tDYNSTRING ){.  
5940: 20 20 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d          zExtra =
5950: 20 62 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20   bufpt;.        
5960: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  }.        if( pr
5970: 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20  ecision>=0 ){.  
5980: 20 20 20 20 20 20 20 20 66 6f 72 28 6c 65 6e 67          for(leng
5990: 74 68 3d 30 3b 20 6c 65 6e 67 74 68 3c 70 72 65  th=0; length<pre
59a0: 63 69 73 69 6f 6e 20 26 26 20 62 75 66 70 74 5b  cision && bufpt[
59b0: 6c 65 6e 67 74 68 5d 3b 20 6c 65 6e 67 74 68 2b  length]; length+
59c0: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c  +){}.        }el
59d0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 65  se{.          le
59e0: 6e 67 74 68 20 3d 20 73 71 6c 69 74 65 33 53 74  ngth = sqlite3St
59f0: 72 6c 65 6e 33 30 28 62 75 66 70 74 29 3b 0a 20  rlen30(bufpt);. 
5a00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5a10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
5a20: 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 3a 0a  se etSQLESCAPE:.
5a30: 20 20 20 20 20 20 63 61 73 65 20 65 74 53 51 4c        case etSQL
5a40: 45 53 43 41 50 45 32 3a 0a 20 20 20 20 20 20 63  ESCAPE2:.      c
5a50: 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 33  ase etSQLESCAPE3
5a60: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  : {.        int 
5a70: 69 2c 20 6a 2c 20 6b 2c 20 6e 2c 20 69 73 6e 75  i, j, k, n, isnu
5a80: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ll;.        int 
5a90: 6e 65 65 64 51 75 6f 74 65 3b 0a 20 20 20 20 20  needQuote;.     
5aa0: 20 20 20 63 68 61 72 20 63 68 3b 0a 20 20 20 20     char ch;.    
5ab0: 20 20 20 20 63 68 61 72 20 71 20 3d 20 28 28 78      char q = ((x
5ac0: 74 79 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50  type==etSQLESCAP
5ad0: 45 33 29 3f 27 22 27 3a 27 5c 27 27 29 3b 20 20  E3)?'"':'\'');  
5ae0: 20 2f 2a 20 51 75 6f 74 65 20 63 68 61 72 61 63   /* Quote charac
5af0: 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  ter */.        c
5b00: 68 61 72 20 2a 65 73 63 61 72 67 20 3d 20 76 61  har *escarg = va
5b10: 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a  _arg(ap,char*);.
5b20: 20 20 20 20 20 20 20 20 69 73 6e 75 6c 6c 20 3d          isnull =
5b30: 20 65 73 63 61 72 67 3d 3d 30 3b 0a 20 20 20 20   escarg==0;.    
5b40: 20 20 20 20 69 66 28 20 69 73 6e 75 6c 6c 20 29      if( isnull )
5b50: 20 65 73 63 61 72 67 20 3d 20 28 78 74 79 70 65   escarg = (xtype
5b60: 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 32 20 3f  ==etSQLESCAPE2 ?
5b70: 20 22 4e 55 4c 4c 22 20 3a 20 22 28 4e 55 4c 4c   "NULL" : "(NULL
5b80: 29 22 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  )");.        k =
5b90: 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20   precision;.    
5ba0: 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 6b      for(i=n=0; k
5bb0: 21 3d 30 20 26 26 20 28 63 68 3d 65 73 63 61 72  !=0 && (ch=escar
5bc0: 67 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20 6b  g[i])!=0; i++, k
5bd0: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  --){.          i
5be0: 66 28 20 63 68 3d 3d 71 20 29 20 20 6e 2b 2b 3b  f( ch==q )  n++;
5bf0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5c00: 20 20 20 6e 65 65 64 51 75 6f 74 65 20 3d 20 21     needQuote = !
5c10: 69 73 6e 75 6c 6c 20 26 26 20 78 74 79 70 65 3d  isnull && xtype=
5c20: 3d 65 74 53 51 4c 45 53 43 41 50 45 32 3b 0a 20  =etSQLESCAPE2;. 
5c30: 20 20 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b 20         n += i + 
5c40: 31 20 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32 3b  1 + needQuote*2;
5c50: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 3e 65  .        if( n>e
5c60: 74 42 55 46 53 49 5a 45 20 29 7b 0a 20 20 20 20  tBUFSIZE ){.    
5c70: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 7a 45        bufpt = zE
5c80: 78 74 72 61 20 3d 20 73 71 6c 69 74 65 33 4d 61  xtra = sqlite3Ma
5c90: 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20  lloc( n );.     
5ca0: 20 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d       if( bufpt==
5cb0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
5cc0: 20 70 41 63 63 75 6d 2d 3e 6d 61 6c 6c 6f 63 46   pAccum->mallocF
5cd0: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
5ce0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
5cf0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
5d00: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5d10: 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b      bufpt = buf;
5d20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5d30: 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20     j = 0;.      
5d40: 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20    if( needQuote 
5d50: 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71  ) bufpt[j++] = q
5d60: 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 69 3b  ;.        k = i;
5d70: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30  .        for(i=0
5d80: 3b 20 69 3c 6b 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<k; i++){.   
5d90: 20 20 20 20 20 20 20 62 75 66 70 74 5b 6a 2b 2b         bufpt[j++
5da0: 5d 20 3d 20 63 68 20 3d 20 65 73 63 61 72 67 5b  ] = ch = escarg[
5db0: 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  i];.          if
5dc0: 28 20 63 68 3d 3d 71 20 29 20 62 75 66 70 74 5b  ( ch==q ) bufpt[
5dd0: 6a 2b 2b 5d 20 3d 20 63 68 3b 0a 20 20 20 20 20  j++] = ch;.     
5de0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
5df0: 20 6e 65 65 64 51 75 6f 74 65 20 29 20 62 75 66   needQuote ) buf
5e00: 70 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20  pt[j++] = q;.   
5e10: 20 20 20 20 20 62 75 66 70 74 5b 6a 5d 20 3d 20       bufpt[j] = 
5e20: 30 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  0;.        lengt
5e30: 68 20 3d 20 6a 3b 0a 20 20 20 20 20 20 20 20 2f  h = j;.        /
5e40: 2a 20 54 68 65 20 70 72 65 63 69 73 69 6f 6e 20  * The precision 
5e50: 69 6e 20 25 71 20 61 6e 64 20 25 51 20 6d 65 61  in %q and %Q mea
5e60: 6e 73 20 68 6f 77 20 6d 61 6e 79 20 69 6e 70 75  ns how many inpu
5e70: 74 20 63 68 61 72 61 63 74 65 72 73 20 74 6f 0a  t characters to.
5e80: 20 20 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 75          ** consu
5e90: 6d 65 2c 20 6e 6f 74 20 74 68 65 20 6c 65 6e 67  me, not the leng
5ea0: 74 68 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  th of the output
5eb0: 2e 2e 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  ....        ** i
5ec0: 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20  f( precision>=0 
5ed0: 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 6c 65 6e  && precision<len
5ee0: 67 74 68 20 29 20 6c 65 6e 67 74 68 20 3d 20 70  gth ) length = p
5ef0: 72 65 63 69 73 69 6f 6e 3b 20 2a 2f 0a 20 20 20  recision; */.   
5f00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5f10: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65    }.      case e
5f20: 74 54 4f 4b 45 4e 3a 20 7b 0a 20 20 20 20 20 20  tTOKEN: {.      
5f30: 20 20 54 6f 6b 65 6e 20 2a 70 54 6f 6b 65 6e 20    Token *pToken 
5f40: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 54 6f 6b  = va_arg(ap, Tok
5f50: 65 6e 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 66  en*);.        if
5f60: 28 20 70 54 6f 6b 65 6e 20 29 7b 0a 20 20 20 20  ( pToken ){.    
5f70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72        sqlite3Str
5f80: 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63  AccumAppend(pAcc
5f90: 75 6d 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  um, (const char*
5fa0: 29 70 54 6f 6b 65 6e 2d 3e 7a 2c 20 70 54 6f 6b  )pToken->z, pTok
5fb0: 65 6e 2d 3e 6e 29 3b 0a 20 20 20 20 20 20 20 20  en->n);.        
5fc0: 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68  }.        length
5fd0: 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20   = width = 0;.  
5fe0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5ff0: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
6000: 65 74 53 52 43 4c 49 53 54 3a 20 7b 0a 20 20 20  etSRCLIST: {.   
6010: 20 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53       SrcList *pS
6020: 72 63 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  rc = va_arg(ap, 
6030: 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 20 20 20  SrcList*);.     
6040: 20 20 20 69 6e 74 20 6b 20 3d 20 76 61 5f 61 72     int k = va_ar
6050: 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20  g(ap, int);.    
6060: 20 20 20 20 73 74 72 75 63 74 20 53 72 63 4c 69      struct SrcLi
6070: 73 74 5f 69 74 65 6d 20 2a 70 49 74 65 6d 20 3d  st_item *pItem =
6080: 20 26 70 53 72 63 2d 3e 61 5b 6b 5d 3b 0a 20 20   &pSrc->a[k];.  
6090: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6b 3e        assert( k>
60a0: 3d 30 20 26 26 20 6b 3c 70 53 72 63 2d 3e 6e 53  =0 && k<pSrc->nS
60b0: 72 63 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  rc );.        if
60c0: 28 20 70 49 74 65 6d 2d 3e 7a 44 61 74 61 62 61  ( pItem->zDataba
60d0: 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  se ){.          
60e0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
60f0: 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 70 49  ppend(pAccum, pI
6100: 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65 2c 20  tem->zDatabase, 
6110: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
6120: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
6130: 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 22 2e 22  pend(pAccum, "."
6140: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 1);.        }.
6150: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53          sqlite3S
6160: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41  trAccumAppend(pA
6170: 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e 7a 4e 61  ccum, pItem->zNa
6180: 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20  me, -1);.       
6190: 20 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20   length = width 
61a0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 0;.        bre
61b0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
61c0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
61d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 78 74 79       assert( xty
61e0: 70 65 3d 3d 65 74 49 4e 56 41 4c 49 44 20 29 3b  pe==etINVALID );
61f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b  .        return;
6200: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 2f 2a  .      }.    }/*
6210: 20 45 6e 64 20 73 77 69 74 63 68 20 6f 76 65 72   End switch over
6220: 20 74 68 65 20 66 6f 72 6d 61 74 20 74 79 70 65   the format type
6230: 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a   */.    /*.    *
6240: 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20 74 68  * The text of th
6250: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
6260: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 22 62  pointed to by "b
6270: 75 66 70 74 22 20 61 6e 64 20 69 73 0a 20 20 20  ufpt" and is.   
6280: 20 2a 2a 20 22 6c 65 6e 67 74 68 22 20 63 68 61   ** "length" cha
6290: 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54  racters long.  T
62a0: 68 65 20 66 69 65 6c 64 20 77 69 64 74 68 20 69  he field width i
62b0: 73 20 22 77 69 64 74 68 22 2e 20 20 44 6f 0a 20  s "width".  Do. 
62c0: 20 20 20 2a 2a 20 74 68 65 20 6f 75 74 70 75 74     ** the output
62d0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
62e0: 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69   !flag_leftjusti
62f0: 66 79 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69  fy ){.      regi
6300: 73 74 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b  ster int nspace;
6310: 0a 20 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20  .      nspace = 
6320: 77 69 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20  width-length;.  
6330: 20 20 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30      if( nspace>0
6340: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
6350: 6e 64 53 70 61 63 65 28 70 41 63 63 75 6d 2c 20  ndSpace(pAccum, 
6360: 6e 73 70 61 63 65 29 3b 0a 20 20 20 20 20 20 7d  nspace);.      }
6370: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c  .    }.    if( l
6380: 65 6e 67 74 68 3e 30 20 29 7b 0a 20 20 20 20 20  ength>0 ){.     
6390: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
63a0: 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 62  Append(pAccum, b
63b0: 75 66 70 74 2c 20 6c 65 6e 67 74 68 29 3b 0a 20  ufpt, length);. 
63c0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 66 6c 61     }.    if( fla
63d0: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29 7b  g_leftjustify ){
63e0: 0a 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20  .      register 
63f0: 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20 20 20  int nspace;.    
6400: 20 20 6e 73 70 61 63 65 20 3d 20 77 69 64 74 68    nspace = width
6410: 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 69  -length;.      i
6420: 66 28 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a 20  f( nspace>0 ){. 
6430: 20 20 20 20 20 20 20 61 70 70 65 6e 64 53 70 61         appendSpa
6440: 63 65 28 70 41 63 63 75 6d 2c 20 6e 73 70 61 63  ce(pAccum, nspac
6450: 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
6460: 7d 0a 20 20 20 20 69 66 28 20 7a 45 78 74 72 61  }.    if( zExtra
6470: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
6480: 33 5f 66 72 65 65 28 7a 45 78 74 72 61 29 3b 0a  3_free(zExtra);.
6490: 20 20 20 20 7d 0a 20 20 7d 2f 2a 20 45 6e 64 20      }.  }/* End 
64a0: 66 6f 72 20 6c 6f 6f 70 20 6f 76 65 72 20 74 68  for loop over th
64b0: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
64c0: 2a 2f 0a 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 66  */.} /* End of f
64d0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
64e0: 2a 20 41 70 70 65 6e 64 20 4e 20 62 79 74 65 73  * Append N bytes
64f0: 20 6f 66 20 74 65 78 74 20 66 72 6f 6d 20 7a 20   of text from z 
6500: 74 6f 20 74 68 65 20 53 74 72 41 63 63 75 6d 20  to the StrAccum 
6510: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20  object..*/.void 
6520: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
6530: 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 20 2a  ppend(StrAccum *
6540: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
6550: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 61 73 73 65  , int N){.  asse
6560: 72 74 28 20 7a 21 3d 30 20 7c 7c 20 4e 3d 3d 30  rt( z!=0 || N==0
6570: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 74 6f 6f   );.  if( p->too
6580: 42 69 67 20 7c 20 70 2d 3e 6d 61 6c 6c 6f 63 46  Big | p->mallocF
6590: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 74 65 73  ailed ){.    tes
65a0: 74 63 61 73 65 28 70 2d 3e 74 6f 6f 42 69 67 29  tcase(p->tooBig)
65b0: 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 70  ;.    testcase(p
65c0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 29 3b  ->mallocFailed);
65d0: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
65e0: 0a 20 20 69 66 28 20 4e 3c 30 20 29 7b 0a 20 20  .  if( N<0 ){.  
65f0: 20 20 4e 20 3d 20 73 71 6c 69 74 65 33 53 74 72    N = sqlite3Str
6600: 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 7d 0a 20 20  len30(z);.  }.  
6610: 69 66 28 20 4e 3d 3d 30 20 7c 7c 20 4e 45 56 45  if( N==0 || NEVE
6620: 52 28 7a 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  R(z==0) ){.    r
6630: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28  eturn;.  }.  if(
6640: 20 70 2d 3e 6e 43 68 61 72 2b 4e 20 3e 3d 20 70   p->nChar+N >= p
6650: 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  ->nAlloc ){.    
6660: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20  char *zNew;.    
6670: 69 66 28 20 21 70 2d 3e 75 73 65 4d 61 6c 6c 6f  if( !p->useMallo
6680: 63 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 74 6f  c ){.      p->to
6690: 6f 42 69 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  oBig = 1;.      
66a0: 4e 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2d 20  N = p->nAlloc - 
66b0: 70 2d 3e 6e 43 68 61 72 20 2d 20 31 3b 0a 20 20  p->nChar - 1;.  
66c0: 20 20 20 20 69 66 28 20 4e 3c 3d 30 20 29 7b 0a      if( N<=0 ){.
66d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a          return;.
66e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
66f0: 65 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a  e{.      char *z
6700: 4f 6c 64 20 3d 20 28 70 2d 3e 7a 54 65 78 74 3d  Old = (p->zText=
6710: 3d 70 2d 3e 7a 42 61 73 65 20 3f 20 30 20 3a 20  =p->zBase ? 0 : 
6720: 70 2d 3e 7a 54 65 78 74 29 3b 0a 20 20 20 20 20  p->zText);.     
6730: 20 69 36 34 20 73 7a 4e 65 77 20 3d 20 70 2d 3e   i64 szNew = p->
6740: 6e 43 68 61 72 3b 0a 20 20 20 20 20 20 73 7a 4e  nChar;.      szN
6750: 65 77 20 2b 3d 20 4e 20 2b 20 31 3b 0a 20 20 20  ew += N + 1;.   
6760: 20 20 20 69 66 28 20 73 7a 4e 65 77 20 3e 20 70     if( szNew > p
6770: 2d 3e 6d 78 41 6c 6c 6f 63 20 29 7b 0a 20 20 20  ->mxAlloc ){.   
6780: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
6790: 63 63 75 6d 52 65 73 65 74 28 70 29 3b 0a 20 20  ccumReset(p);.  
67a0: 20 20 20 20 20 20 70 2d 3e 74 6f 6f 42 69 67 20        p->tooBig 
67b0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 65 74  = 1;.        ret
67c0: 75 72 6e 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  urn;.      }else
67d0: 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 6e 41 6c  {.        p->nAl
67e0: 6c 6f 63 20 3d 20 28 69 6e 74 29 73 7a 4e 65 77  loc = (int)szNew
67f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6800: 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63  if( p->useMalloc
6810: 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  ==1 ){.        z
6820: 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 52  New = sqlite3DbR
6830: 65 61 6c 6c 6f 63 28 70 2d 3e 64 62 2c 20 7a 4f  ealloc(p->db, zO
6840: 6c 64 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a  ld, p->nAlloc);.
6850: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
6860: 20 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69       zNew = sqli
6870: 74 65 33 5f 72 65 61 6c 6c 6f 63 28 7a 4f 6c 64  te3_realloc(zOld
6880: 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20  , p->nAlloc);.  
6890: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
68a0: 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  zNew ){.        
68b0: 69 66 28 20 7a 4f 6c 64 3d 3d 30 20 29 20 6d 65  if( zOld==0 ) me
68c0: 6d 63 70 79 28 7a 4e 65 77 2c 20 70 2d 3e 7a 54  mcpy(zNew, p->zT
68d0: 65 78 74 2c 20 70 2d 3e 6e 43 68 61 72 29 3b 0a  ext, p->nChar);.
68e0: 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65 78 74          p->zText
68f0: 20 3d 20 7a 4e 65 77 3b 0a 20 20 20 20 20 20 7d   = zNew;.      }
6900: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
6910: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
6920: 31 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  1;.        sqlit
6930: 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
6940: 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  p);.        retu
6950: 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
6960: 7d 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  }.  }.  memcpy(&
6970: 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61  p->zText[p->nCha
6980: 72 5d 2c 20 7a 2c 20 4e 29 3b 0a 20 20 70 2d 3e  r], z, N);.  p->
6990: 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a 7d 0a 0a 2f  nChar += N;.}../
69a0: 2a 0a 2a 2a 20 46 69 6e 69 73 68 20 6f 66 66 20  *.** Finish off 
69b0: 61 20 73 74 72 69 6e 67 20 62 79 20 6d 61 6b 69  a string by maki
69c0: 6e 67 20 73 75 72 65 20 69 74 20 69 73 20 7a 65  ng sure it is ze
69d0: 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 2e 0a 2a  ro-terminated..*
69e0: 2a 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  * Return a point
69f0: 65 72 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  er to the result
6a00: 69 6e 67 20 73 74 72 69 6e 67 2e 20 20 52 65 74  ing string.  Ret
6a10: 75 72 6e 20 61 20 4e 55 4c 4c 0a 2a 2a 20 70 6f  urn a NULL.** po
6a20: 69 6e 74 65 72 20 69 66 20 61 6e 79 20 6b 69 6e  inter if any kin
6a30: 64 20 6f 66 20 65 72 72 6f 72 20 77 61 73 20 65  d of error was e
6a40: 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2f 0a 63  ncountered..*/.c
6a50: 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
6a60: 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
6a70: 63 75 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  cum *p){.  if( p
6a80: 2d 3e 7a 54 65 78 74 20 29 7b 0a 20 20 20 20 70  ->zText ){.    p
6a90: 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72  ->zText[p->nChar
6aa0: 5d 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  ] = 0;.    if( p
6ab0: 2d 3e 75 73 65 4d 61 6c 6c 6f 63 20 26 26 20 70  ->useMalloc && p
6ac0: 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73  ->zText==p->zBas
6ad0: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  e ){.      if( p
6ae0: 2d 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29  ->useMalloc==1 )
6af0: 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65  {.        p->zTe
6b00: 78 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  xt = sqlite3DbMa
6b10: 6c 6c 6f 63 52 61 77 28 70 2d 3e 64 62 2c 20 70  llocRaw(p->db, p
6b20: 2d 3e 6e 43 68 61 72 2b 31 20 29 3b 0a 20 20 20  ->nChar+1 );.   
6b30: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6b40: 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 73 71 6c    p->zText = sql
6b50: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 70 2d 3e 6e  ite3_malloc(p->n
6b60: 43 68 61 72 2b 31 29 3b 0a 20 20 20 20 20 20 7d  Char+1);.      }
6b70: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 7a 54  .      if( p->zT
6b80: 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ext ){.        m
6b90: 65 6d 63 70 79 28 70 2d 3e 7a 54 65 78 74 2c 20  emcpy(p->zText, 
6ba0: 70 2d 3e 7a 42 61 73 65 2c 20 70 2d 3e 6e 43 68  p->zBase, p->nCh
6bb0: 61 72 2b 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ar+1);.      }el
6bc0: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 6d  se{.        p->m
6bd0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
6be0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
6bf0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a   }.  return p->z
6c00: 54 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  Text;.}../*.** R
6c10: 65 73 65 74 20 61 6e 20 53 74 72 41 63 63 75 6d  eset an StrAccum
6c20: 20 73 74 72 69 6e 67 2e 20 20 52 65 63 6c 61 69   string.  Reclai
6c30: 6d 20 61 6c 6c 20 6d 61 6c 6c 6f 63 65 64 20 6d  m all malloced m
6c40: 65 6d 6f 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  emory..*/.void s
6c50: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
6c60: 73 65 74 28 53 74 72 41 63 63 75 6d 20 2a 70 29  set(StrAccum *p)
6c70: 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 74  {.  if( p->zText
6c80: 21 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20  !=p->zBase ){.  
6c90: 20 20 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c 6c    if( p->useMall
6ca0: 6f 63 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 73  oc==1 ){.      s
6cb0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 70 2d 3e  qlite3DbFree(p->
6cc0: 64 62 2c 20 70 2d 3e 7a 54 65 78 74 29 3b 0a 20  db, p->zText);. 
6cd0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6ce0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
6cf0: 7a 54 65 78 74 29 3b 0a 20 20 20 20 7d 0a 20 20  zText);.    }.  
6d00: 7d 0a 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 30  }.  p->zText = 0
6d10: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69  ;.}../*.** Initi
6d20: 61 6c 69 7a 65 20 61 20 73 74 72 69 6e 67 20 61  alize a string a
6d30: 63 63 75 6d 75 6c 61 74 6f 72 0a 2a 2f 0a 76 6f  ccumulator.*/.vo
6d40: 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
6d50: 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 20  umInit(StrAccum 
6d60: 2a 70 2c 20 63 68 61 72 20 2a 7a 42 61 73 65 2c  *p, char *zBase,
6d70: 20 69 6e 74 20 6e 2c 20 69 6e 74 20 6d 78 29 7b   int n, int mx){
6d80: 0a 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 70 2d  .  p->zText = p-
6d90: 3e 7a 42 61 73 65 20 3d 20 7a 42 61 73 65 3b 0a  >zBase = zBase;.
6da0: 20 20 70 2d 3e 64 62 20 3d 20 30 3b 0a 20 20 70    p->db = 0;.  p
6db0: 2d 3e 6e 43 68 61 72 20 3d 20 30 3b 0a 20 20 70  ->nChar = 0;.  p
6dc0: 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 6e 3b 0a 20 20  ->nAlloc = n;.  
6dd0: 70 2d 3e 6d 78 41 6c 6c 6f 63 20 3d 20 6d 78 3b  p->mxAlloc = mx;
6de0: 0a 20 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63 20  .  p->useMalloc 
6df0: 3d 20 31 3b 0a 20 20 70 2d 3e 74 6f 6f 42 69 67  = 1;.  p->tooBig
6e00: 20 3d 20 30 3b 0a 20 20 70 2d 3e 6d 61 6c 6c 6f   = 0;.  p->mallo
6e10: 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 7d 0a 0a  cFailed = 0;.}..
6e20: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f  /*.** Print into
6e30: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
6e40: 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c   from sqliteMall
6e50: 6f 63 28 29 2e 20 20 55 73 65 20 74 68 65 20 69  oc().  Use the i
6e60: 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e  nternal.** %-con
6e70: 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f  version extensio
6e80: 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c  ns..*/.char *sql
6e90: 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
6ea0: 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
6eb0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76  char *zFormat, v
6ec0: 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 63 68  a_list ap){.  ch
6ed0: 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 7a 42  ar *z;.  char zB
6ee0: 61 73 65 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54  ase[SQLITE_PRINT
6ef0: 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20 53 74  _BUF_SIZE];.  St
6f00: 72 41 63 63 75 6d 20 61 63 63 3b 0a 20 20 61 73  rAccum acc;.  as
6f10: 73 65 72 74 28 20 64 62 21 3d 30 20 29 3b 0a 20  sert( db!=0 );. 
6f20: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6f30: 49 6e 69 74 28 26 61 63 63 2c 20 7a 42 61 73 65  Init(&acc, zBase
6f40: 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c  , sizeof(zBase),
6f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6f60: 20 20 20 20 20 20 20 64 62 2d 3e 61 4c 69 6d 69         db->aLimi
6f70: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
6f80: 45 4e 47 54 48 5d 29 3b 0a 20 20 61 63 63 2e 64  ENGTH]);.  acc.d
6f90: 62 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69 74 65  b = db;.  sqlite
6fa0: 33 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20  3VXPrintf(&acc, 
6fb0: 31 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  1, zFormat, ap);
6fc0: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74  .  z = sqlite3St
6fd0: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63  rAccumFinish(&ac
6fe0: 63 29 3b 0a 20 20 69 66 28 20 61 63 63 2e 6d 61  c);.  if( acc.ma
6ff0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
7000: 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
7010: 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65  ed = 1;.  }.  re
7020: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn z;.}../*.**
7030: 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f   Print into memo
7040: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
7050: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e   sqliteMalloc().
7060: 20 20 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e    Use the intern
7070: 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69  al.** %-conversi
7080: 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a  on extensions..*
7090: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  /.char *sqlite3M
70a0: 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a  Printf(sqlite3 *
70b0: 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
70c0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
70d0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63   va_list ap;.  c
70e0: 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61  har *z;.  va_sta
70f0: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
7100: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d  .  z = sqlite3VM
7110: 50 72 69 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d  Printf(db, zForm
7120: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
7130: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
7140: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4c 69 6b 65  z;.}../*.** Like
7150: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
7160: 29 2c 20 62 75 74 20 63 61 6c 6c 20 73 71 6c 69  ), but call sqli
7170: 74 65 33 44 62 46 72 65 65 28 29 20 6f 6e 20 7a  te3DbFree() on z
7180: 53 74 72 20 61 66 74 65 72 20 66 6f 72 6d 61 74  Str after format
7190: 74 69 6e 67 0a 2a 2a 20 74 68 65 20 73 74 72 69  ting.** the stri
71a0: 6e 67 20 61 6e 64 20 62 65 66 6f 72 65 20 72 65  ng and before re
71b0: 74 75 72 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20  turnning.  This 
71c0: 72 6f 75 74 69 6e 65 20 69 73 20 69 6e 74 65 6e  routine is inten
71d0: 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 0a 2a  ded to be used.*
71e0: 2a 20 74 6f 20 6d 6f 64 69 66 79 20 61 6e 20 65  * to modify an e
71f0: 78 69 73 74 69 6e 67 20 73 74 72 69 6e 67 2e 20  xisting string. 
7200: 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a   For example:.**
7210: 0a 2a 2a 20 20 20 20 20 20 20 78 20 3d 20 73 71  .**       x = sq
7220: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
7230: 20 78 2c 20 22 70 72 65 66 69 78 20 25 73 20 73   x, "prefix %s s
7240: 75 66 66 69 78 22 2c 20 78 29 3b 0a 2a 2a 0a 2a  uffix", x);.**.*
7250: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  /.char *sqlite3M
7260: 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 20  Appendf(sqlite3 
7270: 2a 64 62 2c 20 63 68 61 72 20 2a 7a 53 74 72 2c  *db, char *zStr,
7280: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
7290: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
72a0: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72  _list ap;.  char
72b0: 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   *z;.  va_start(
72c0: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
72d0: 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69  z = sqlite3VMPri
72e0: 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c  ntf(db, zFormat,
72f0: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61   ap);.  va_end(a
7300: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  p);.  sqlite3DbF
7310: 72 65 65 28 64 62 2c 20 7a 53 74 72 29 3b 0a 20  ree(db, zStr);. 
7320: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
7330: 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d  .** Print into m
7340: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
7350: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
7360: 6f 63 28 29 2e 20 20 4f 6d 69 74 20 74 68 65 20  oc().  Omit the 
7370: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f  internal.** %-co
7380: 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69  nversion extensi
7390: 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  ons..*/.char *sq
73a0: 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 63  lite3_vmprintf(c
73b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
73c0: 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29 7b  at, va_list ap){
73d0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68  .  char *z;.  ch
73e0: 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f  ar zBase[SQLITE_
73f0: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b  PRINT_BUF_SIZE];
7400: 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b  .  StrAccum acc;
7410: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7420: 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20  OMIT_AUTOINIT.  
7430: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 69 74  if( sqlite3_init
7440: 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74 75 72  ialize() ) retur
7450: 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  n 0;.#endif.  sq
7460: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
7470: 74 28 26 61 63 63 2c 20 7a 42 61 73 65 2c 20 73  t(&acc, zBase, s
7480: 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20 53 51  izeof(zBase), SQ
7490: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 29  LITE_MAX_LENGTH)
74a0: 3b 0a 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f  ;.  acc.useMallo
74b0: 63 20 3d 20 32 3b 0a 20 20 73 71 6c 69 74 65 33  c = 2;.  sqlite3
74c0: 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30  VXPrintf(&acc, 0
74d0: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
74e0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72    z = sqlite3Str
74f0: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63  AccumFinish(&acc
7500: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d  );.  return z;.}
7510: 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e  ../*.** Print in
7520: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  to memory obtain
7530: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
7540: 6d 61 6c 6c 6f 63 28 29 28 29 2e 20 20 4f 6d 69  malloc()().  Omi
7550: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a  t the internal.*
7560: 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65  * %-conversion e
7570: 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68  xtensions..*/.ch
7580: 61 72 20 2a 73 71 6c 69 74 65 33 5f 6d 70 72 69  ar *sqlite3_mpri
7590: 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ntf(const char *
75a0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
75b0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63   va_list ap;.  c
75c0: 68 61 72 20 2a 7a 3b 0a 23 69 66 6e 64 65 66 20  har *z;.#ifndef 
75d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
75e0: 49 4e 49 54 0a 20 20 69 66 28 20 73 71 6c 69 74  INIT.  if( sqlit
75f0: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
7600: 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64  ) return 0;.#end
7610: 69 66 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  if.  va_start(ap
7620: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20  , zFormat);.  z 
7630: 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e  = sqlite3_vmprin
7640: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  tf(zFormat, ap);
7650: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20  .  va_end(ap);. 
7660: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
7670: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  .** sqlite3_snpr
7680: 69 6e 74 66 28 29 20 77 6f 72 6b 73 20 6c 69 6b  intf() works lik
7690: 65 20 73 6e 70 72 69 6e 74 66 28 29 20 65 78 63  e snprintf() exc
76a0: 65 70 74 20 74 68 61 74 20 69 74 20 69 67 6e 6f  ept that it igno
76b0: 72 65 73 20 74 68 65 0a 2a 2a 20 63 75 72 72 65  res the.** curre
76c0: 6e 74 20 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e  nt locale settin
76d0: 67 73 2e 20 20 54 68 69 73 20 69 73 20 69 6d 70  gs.  This is imp
76e0: 6f 72 74 61 6e 74 20 66 6f 72 20 53 51 4c 69 74  ortant for SQLit
76f0: 65 20 62 65 63 61 75 73 65 20 77 65 0a 2a 2a 20  e because we.** 
7700: 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
7710: 75 73 65 20 61 20 22 2c 22 20 61 73 20 74 68 65  use a "," as the
7720: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69   decimal point i
7730: 6e 20 70 6c 61 63 65 20 6f 66 20 22 2e 22 20 61  n place of "." a
7740: 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62  s.** specified b
7750: 79 20 73 6f 6d 65 20 6c 6f 63 61 6c 65 73 2e 0a  y some locales..
7760: 2a 2a 0a 2a 2a 20 4f 6f 70 73 3a 20 20 54 68 65  **.** Oops:  The
7770: 20 66 69 72 73 74 20 74 77 6f 20 61 72 67 75 6d   first two argum
7780: 65 6e 74 73 20 6f 66 20 73 71 6c 69 74 65 33 5f  ents of sqlite3_
7790: 73 6e 70 72 69 6e 74 66 28 29 20 61 72 65 20 62  snprintf() are b
77a0: 61 63 6b 77 61 72 64 73 0a 2a 2a 20 66 72 6f 6d  ackwards.** from
77b0: 20 74 68 65 20 73 6e 70 72 69 6e 74 66 28 29 20   the snprintf() 
77c0: 73 74 61 6e 64 61 72 64 2e 20 20 55 6e 66 6f 72  standard.  Unfor
77d0: 74 75 6e 61 74 65 6c 79 2c 20 69 74 20 69 73 20  tunately, it is 
77e0: 74 6f 6f 20 6c 61 74 65 20 74 6f 20 63 68 61 6e  too late to chan
77f0: 67 65 0a 2a 2a 20 74 68 69 73 20 77 69 74 68 6f  ge.** this witho
7800: 75 74 20 62 72 65 61 6b 69 6e 67 20 63 6f 6d 70  ut breaking comp
7810: 61 74 69 62 69 6c 69 74 79 2c 20 73 6f 20 77 65  atibility, so we
7820: 20 6a 75 73 74 20 68 61 76 65 20 74 6f 20 6c 69   just have to li
7830: 76 65 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6d  ve with the.** m
7840: 69 73 74 61 6b 65 2e 0a 2a 2a 0a 2a 2a 20 73 71  istake..**.** sq
7850: 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66 28  lite3_vsnprintf(
7860: 29 20 69 73 20 74 68 65 20 76 61 72 61 72 67 73  ) is the varargs
7870: 20 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 63 68 61   version..*/.cha
7880: 72 20 2a 73 71 6c 69 74 65 33 5f 76 73 6e 70 72  r *sqlite3_vsnpr
7890: 69 6e 74 66 28 69 6e 74 20 6e 2c 20 63 68 61 72  intf(int n, char
78a0: 20 2a 7a 42 75 66 2c 20 63 6f 6e 73 74 20 63 68   *zBuf, const ch
78b0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f  ar *zFormat, va_
78c0: 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72 41  list ap){.  StrA
78d0: 63 63 75 6d 20 61 63 63 3b 0a 20 20 69 66 28 20  ccum acc;.  if( 
78e0: 6e 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 42  n<=0 ) return zB
78f0: 75 66 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72  uf;.  sqlite3Str
7900: 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20  AccumInit(&acc, 
7910: 7a 42 75 66 2c 20 6e 2c 20 30 29 3b 0a 20 20 61  zBuf, n, 0);.  a
7920: 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 30  cc.useMalloc = 0
7930: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
7940: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f  ntf(&acc, 0, zFo
7950: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 72 65 74  rmat, ap);.  ret
7960: 75 72 6e 20 73 71 6c 69 74 65 33 53 74 72 41 63  urn sqlite3StrAc
7970: 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b  cumFinish(&acc);
7980: 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  .}.char *sqlite3
7990: 5f 73 6e 70 72 69 6e 74 66 28 69 6e 74 20 6e 2c  _snprintf(int n,
79a0: 20 63 68 61 72 20 2a 7a 42 75 66 2c 20 63 6f 6e   char *zBuf, con
79b0: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
79c0: 2c 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 72 20 2a  , ...){.  char *
79d0: 7a 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  z;.  va_list ap;
79e0: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 7a  .  va_start(ap,z
79f0: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73  Format);.  z = s
7a00: 71 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66  qlite3_vsnprintf
7a10: 28 6e 2c 20 7a 42 75 66 2c 20 7a 46 6f 72 6d 61  (n, zBuf, zForma
7a20: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
7a30: 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a  (ap);.  return z
7a40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
7a50: 69 73 20 74 68 65 20 72 6f 75 74 69 6e 65 20 74  is the routine t
7a60: 68 61 74 20 61 63 74 75 61 6c 6c 79 20 66 6f 72  hat actually for
7a70: 6d 61 74 73 20 74 68 65 20 73 71 6c 69 74 65 33  mats the sqlite3
7a80: 5f 6c 6f 67 28 29 20 6d 65 73 73 61 67 65 2e 0a  _log() message..
7a90: 2a 2a 20 57 65 20 68 6f 75 73 65 20 69 74 20 69  ** We house it i
7aa0: 6e 20 61 20 73 65 70 61 72 61 74 65 20 72 6f 75  n a separate rou
7ab0: 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  tine from sqlite
7ac0: 33 5f 6c 6f 67 28 29 20 74 6f 20 61 76 6f 69 64  3_log() to avoid
7ad0: 20 75 73 69 6e 67 0a 2a 2a 20 73 74 61 63 6b 20   using.** stack 
7ae0: 73 70 61 63 65 20 6f 6e 20 73 6d 61 6c 6c 2d 73  space on small-s
7af0: 74 61 63 6b 20 73 79 73 74 65 6d 73 20 77 68 65  tack systems whe
7b00: 6e 20 6c 6f 67 67 69 6e 67 20 69 73 20 64 69 73  n logging is dis
7b10: 61 62 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  abled..**.** sql
7b20: 69 74 65 33 5f 6c 6f 67 28 29 20 6d 75 73 74 20  ite3_log() must 
7b30: 72 65 6e 64 65 72 20 69 6e 74 6f 20 61 20 73 74  render into a st
7b40: 61 74 69 63 20 62 75 66 66 65 72 2e 20 20 49 74  atic buffer.  It
7b50: 20 63 61 6e 6e 6f 74 20 64 79 6e 61 6d 69 63 61   cannot dynamica
7b60: 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 20  lly.** allocate 
7b70: 6d 65 6d 6f 72 79 20 62 65 63 61 75 73 65 20 69  memory because i
7b80: 74 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  t might be calle
7b90: 64 20 77 68 69 6c 65 20 74 68 65 20 6d 65 6d 6f  d while the memo
7ba0: 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
7bb0: 6d 75 74 65 78 20 69 73 20 68 65 6c 64 2e 0a 2a  mutex is held..*
7bc0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  /.static void re
7bd0: 6e 64 65 72 4c 6f 67 4d 73 67 28 69 6e 74 20 69  nderLogMsg(int i
7be0: 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63  ErrCode, const c
7bf0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61  har *zFormat, va
7c00: 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72  _list ap){.  Str
7c10: 41 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20 20  Accum acc;      
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 61 63      /* String ac
7c40: 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 63  cumulator */.  c
7c50: 68 61 72 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f  har zMsg[SQLITE_
7c60: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33  PRINT_BUF_SIZE*3
7c70: 5d 3b 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74  ];    /* Complet
7c80: 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 2a 2f  e log message */
7c90: 0a 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63  ..  sqlite3StrAc
7ca0: 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 4d  cumInit(&acc, zM
7cb0: 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d 73 67 29  sg, sizeof(zMsg)
7cc0: 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d  , 0);.  acc.useM
7cd0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 73 71 6c  alloc = 0;.  sql
7ce0: 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61 63  ite3VXPrintf(&ac
7cf0: 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 61  c, 0, zFormat, a
7d00: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 47 6c 6f  p);.  sqlite3Glo
7d10: 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 28 73  balConfig.xLog(s
7d20: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
7d30: 69 67 2e 70 4c 6f 67 41 72 67 2c 20 69 45 72 72  ig.pLogArg, iErr
7d40: 43 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Code,.          
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
7d70: 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0a 7d  Finish(&acc));.}
7d80: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 6d 61 74 20 61  ../*.** Format a
7d90: 6e 64 20 77 72 69 74 65 20 61 20 6d 65 73 73 61  nd write a messa
7da0: 67 65 20 74 6f 20 74 68 65 20 6c 6f 67 20 69 66  ge to the log if
7db0: 20 6c 6f 67 67 69 6e 67 20 69 73 20 65 6e 61 62   logging is enab
7dc0: 6c 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  led..*/.void sql
7dd0: 69 74 65 33 5f 6c 6f 67 28 69 6e 74 20 69 45 72  ite3_log(int iEr
7de0: 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61  rCode, const cha
7df0: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
7e00: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 20  {.  va_list ap; 
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7e30: 61 72 61 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  ararg list */.  
7e40: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
7e50: 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 20 29 7b 0a  lConfig.xLog ){.
7e60: 20 20 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c      va_start(ap,
7e70: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20 72   zFormat);.    r
7e80: 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69 45 72 72  enderLogMsg(iErr
7e90: 43 6f 64 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 61  Code, zFormat, a
7ea0: 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e 64 28 61  p);.    va_end(a
7eb0: 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 20 64  p);.  }.}..#if d
7ec0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
7ed0: 42 55 47 29 0a 2f 2a 0a 2a 2a 20 41 20 76 65 72  BUG)./*.** A ver
7ee0: 73 69 6f 6e 20 6f 66 20 70 72 69 6e 74 66 28 29  sion of printf()
7ef0: 20 74 68 61 74 20 75 6e 64 65 72 73 74 61 6e 64   that understand
7f00: 73 20 25 6c 6c 64 2e 20 20 55 73 65 64 20 66 6f  s %lld.  Used fo
7f10: 72 20 64 65 62 75 67 67 69 6e 67 2e 0a 2a 2a 20  r debugging..** 
7f20: 54 68 65 20 70 72 69 6e 74 66 28 29 20 62 75 69  The printf() bui
7f30: 6c 74 20 69 6e 74 6f 20 73 6f 6d 65 20 76 65 72  lt into some ver
7f40: 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64 6f 77 73  sions of windows
7f50: 20 64 6f 65 73 20 6e 6f 74 20 75 6e 64 65 72 73   does not unders
7f60: 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a 20 61 6e 64  tand %lld.** and
7f70: 20 73 65 67 66 61 75 6c 74 73 20 69 66 20 79 6f   segfaults if yo
7f80: 75 20 67 69 76 65 20 69 74 20 61 20 6c 6f 6e 67  u give it a long
7f90: 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a 2f 0a 76 6f   long int..*/.vo
7fa0: 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
7fb0: 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
7fc0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
7fd0: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
7fe0: 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a 20   StrAccum acc;. 
7ff0: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 30 5d 3b   char zBuf[500];
8000: 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  .  sqlite3StrAcc
8010: 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 42 75  umInit(&acc, zBu
8020: 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c  f, sizeof(zBuf),
8030: 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d 61   0);.  acc.useMa
8040: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 76 61 5f 73  lloc = 0;.  va_s
8050: 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74 29  tart(ap,zFormat)
8060: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
8070: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f  ntf(&acc, 0, zFo
8080: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
8090: 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c 69 74  end(ap);.  sqlit
80a0: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
80b0: 28 26 61 63 63 29 3b 0a 20 20 66 70 72 69 6e 74  (&acc);.  fprint
80c0: 66 28 73 74 64 6f 75 74 2c 22 25 73 22 2c 20 7a  f(stdout,"%s", z
80d0: 42 75 66 29 3b 0a 20 20 66 66 6c 75 73 68 28 73  Buf);.  fflush(s
80e0: 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 6e 64 69 66  tdout);.}.#endif
80f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8100: 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 0a 2a  _OMIT_TRACE./*.*
8110: 2a 20 76 61 72 69 61 62 6c 65 2d 61 72 67 75 6d  * variable-argum
8120: 65 6e 74 20 77 72 61 70 70 65 72 20 61 72 6f 75  ent wrapper arou
8130: 6e 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  nd sqlite3VXPrin
8140: 74 66 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  tf()..*/.void sq
8150: 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
8160: 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20  Accum *p, const 
8170: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
8180: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
8190: 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  p;.  va_start(ap
81a0: 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 73 71 6c  ,zFormat);.  sql
81b0: 69 74 65 33 56 58 50 72 69 6e 74 66 28 70 2c 20  ite3VXPrintf(p, 
81c0: 31 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  1, zFormat, ap);
81d0: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d  .  va_end(ap);.}
81e0: 0a 23 65 6e 64 69 66 0a                          .#endif.