Artifact 3a56bc49bc7ed5cf1e7a1818ab55c3e3658b8179fbf3d264a5654ad3baf1a417:

  • File src/printf.c — part of check-in [2fac7df4] at 2018-01-16 16:30:23 on branch trunk — Update the codecheck1.c utility program to find unsafe format strings for recently added varargs functions. Fix unsafe varargs found by this update. This is a continuation of the fix in check-in [3c2ef25d03fb48d5]. (user: drh size: 37233) [more...]

0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 36 20 44 2e 20 52 69 63 68  (c) 2006 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 53 69 6d 70 6c 69 66 69 65 64 20 42 53 44 20   Simplified BSD 
00a0: 4c 69 63 65 6e 73 65 20 28 61 6c 73 6f 0a 2a 2a  License (also.**
00b0: 20 6b 6e 6f 77 6e 20 61 73 20 74 68 65 20 22 32   known as the "2
00c0: 2d 43 6c 61 75 73 65 20 4c 69 63 65 6e 73 65 22  -Clause License"
00d0: 20 6f 72 20 22 46 72 65 65 42 53 44 20 4c 69 63   or "FreeBSD Lic
00e0: 65 6e 73 65 22 2e 29 0a 0a 2a 2a 20 54 68 69 73  ense".)..** This
00f0: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0100: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0110: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0120: 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 62   be useful,.** b
0130: 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 20 77  ut without any w
0140: 61 72 72 61 6e 74 79 3b 20 77 69 74 68 6f 75 74  arranty; without
0150: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65   even the implie
0160: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a 2a  d warranty of.**
0170: 20 6d 65 72 63 68 61 6e 74 61 62 69 6c 69 74 79   merchantability
0180: 20 6f 72 20 66 69 74 6e 65 73 73 20 66 6f 72 20   or fitness for 
0190: 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 75 72  a particular pur
01a0: 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 75 74 68  pose..**.** Auth
01b0: 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e 66 6f 72  or contact infor
01c0: 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 64 72 68  mation:.**   drh
01d0: 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a 20 20 20  @hwaci.com.**   
01e0: 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 63 69  http://www.hwaci
01f0: 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a  .com/drh/.**.***
0200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a  ************.**.
0250: 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e  ** This file con
0260: 74 61 69 6e 73 20 69 6d 70 6c 65 6d 65 6e 74 69  tains implementi
0270: 6f 6e 73 20 6f 66 20 72 6f 75 74 69 6e 65 73 20  ons of routines 
0280: 66 6f 72 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  for formatting o
0290: 75 74 70 75 74 0a 2a 2a 20 28 65 78 3a 20 6d 70  utput.** (ex: mp
02a0: 72 69 6e 74 66 28 29 29 20 61 6e 64 20 66 6f 72  rintf()) and for
02b0: 20 6f 75 74 70 75 74 20 74 6f 20 74 68 65 20 63   output to the c
02c0: 6f 6e 73 6f 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c  onsole..*/.#incl
02d0: 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23  ude "config.h".#
02e0: 69 6e 63 6c 75 64 65 20 22 70 72 69 6e 74 66 2e  include "printf.
02f0: 68 22 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  h".#if defined(_
0300: 57 49 4e 33 32 29 0a 23 20 20 20 69 6e 63 6c 75  WIN32).#   inclu
0310: 64 65 20 3c 69 6f 2e 68 3e 0a 23 20 20 20 69 6e  de <io.h>.#   in
0320: 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a  clude <fcntl.h>.
0330: 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75 64 65 20  #endif.#include 
0340: 3c 74 69 6d 65 2e 68 3e 0a 0a 2f 2a 20 54 77 6f  <time.h>../* Two
0350: 20 63 75 73 74 6f 6d 20 63 6f 6e 76 65 72 73 69   custom conversi
0360: 6f 6e 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ons are used to 
0370: 73 68 6f 77 20 61 20 70 72 65 66 69 78 20 6f 66  show a prefix of
0380: 20 61 72 74 69 66 61 63 74 20 68 61 73 68 65 73   artifact hashes
0390: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 21 53  :.**.**      %!S
03a0: 20 20 20 20 20 20 20 50 72 65 66 69 78 20 6f 66         Prefix of
03b0: 20 61 20 6c 65 6e 67 74 68 20 61 70 70 72 6f 70   a length approp
03c0: 72 69 61 74 65 20 66 6f 72 20 55 52 4c 73 0a 2a  riate for URLs.*
03d0: 2a 20 20 20 20 20 20 25 53 20 20 20 20 20 20 20  *      %S       
03e0: 20 50 72 65 66 69 78 20 6f 66 20 61 20 6c 65 6e   Prefix of a len
03f0: 67 74 68 20 61 70 70 72 6f 70 72 69 61 74 65 20  gth appropriate 
0400: 66 6f 72 20 68 75 6d 61 6e 20 64 69 73 70 6c 61  for human displa
0410: 79 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  y.**.** The foll
0420: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 68 65 6c  owing macros hel
0430: 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68 6f 73  p determine thos
0440: 65 20 6c 65 6e 67 74 68 73 2e 20 20 46 4f 53 53  e lengths.  FOSS
0450: 49 4c 5f 48 41 53 48 5f 44 49 47 49 54 53 0a 2a  IL_HASH_DIGITS.*
0460: 2a 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  * is the default
0470: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69 74   number of digit
0480: 73 20 74 6f 20 64 69 73 70 6c 61 79 20 74 6f 20  s to display to 
0490: 68 75 6d 61 6e 73 2e 20 20 54 68 69 73 20 76 61  humans.  This va
04a0: 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76  lue can.** be ov
04b0: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74  erridden using t
04c0: 68 65 20 68 61 73 68 2d 64 69 67 69 74 73 20 73  he hash-digits s
04d0: 65 74 74 69 6e 67 2e 20 20 46 4f 53 53 49 4c 5f  etting.  FOSSIL_
04e0: 48 41 53 48 5f 44 49 47 49 54 53 5f 55 52 4c 0a  HASH_DIGITS_URL.
04f0: 2a 2a 20 69 73 20 74 68 65 20 6d 69 6e 69 6d 75  ** is the minimu
0500: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69  m number of digi
0510: 74 73 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e  ts to be used in
0520: 20 55 52 4c 73 2e 20 20 54 68 65 20 6e 75 6d 62   URLs.  The numb
0530: 65 72 20 75 73 65 64 0a 2a 2a 20 77 69 6c 6c 20  er used.** will 
0540: 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65 61  always be at lea
0550: 73 74 20 36 20 6d 6f 72 65 20 74 68 61 6e 20 74  st 6 more than t
0560: 68 65 20 6e 75 6d 62 65 72 20 75 73 65 64 20 66  he number used f
0570: 6f 72 20 68 75 6d 61 6e 20 6f 75 74 70 75 74 2c  or human output,
0580: 0a 2a 2a 20 6f 72 20 34 30 20 69 66 20 74 68 65  .** or 40 if the
0590: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69 74   number of digit
05a0: 73 20 69 6e 20 68 75 6d 61 6e 20 6f 75 74 70 75  s in human outpu
05b0: 74 20 69 73 20 33 34 20 6f 72 20 6d 6f 72 65 2e  t is 34 or more.
05c0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 46 4f 53 53  .*/.#ifndef FOSS
05d0: 49 4c 5f 48 41 53 48 5f 44 49 47 49 54 53 0a 23  IL_HASH_DIGITS.#
05e0: 20 64 65 66 69 6e 65 20 46 4f 53 53 49 4c 5f 48   define FOSSIL_H
05f0: 41 53 48 5f 44 49 47 49 54 53 20 31 30 20 20 20  ASH_DIGITS 10   
0600: 20 20 20 20 2f 2a 20 46 6f 72 20 25 53 20 28 68      /* For %S (h
0610: 75 6d 61 6e 20 64 69 73 70 6c 61 79 29 20 2a 2f  uman display) */
0620: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
0630: 46 4f 53 53 49 4c 5f 48 41 53 48 5f 44 49 47 49  FOSSIL_HASH_DIGI
0640: 54 53 5f 55 52 4c 0a 23 20 64 65 66 69 6e 65 20  TS_URL.# define 
0650: 46 4f 53 53 49 4c 5f 48 41 53 48 5f 44 49 47 49  FOSSIL_HASH_DIGI
0660: 54 53 5f 55 52 4c 20 31 36 20 20 20 2f 2a 20 46  TS_URL 16   /* F
0670: 6f 72 20 25 21 53 20 28 65 6d 62 65 64 64 65 64  or %!S (embedded
0680: 20 69 6e 20 55 52 4c 73 29 20 2a 2f 0a 23 65 6e   in URLs) */.#en
0690: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
06a0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
06b0: 61 72 74 69 66 61 63 74 20 68 61 73 68 20 64 69  artifact hash di
06c0: 67 69 74 73 20 74 6f 20 64 69 73 70 6c 61 79 2e  gits to display.
06d0: 20 20 54 68 65 20 6e 75 6d 62 65 72 20 69 73 20    The number is 
06e0: 66 6f 72 0a 2a 2a 20 68 75 6d 61 6e 20 6f 75 74  for.** human out
06f0: 70 75 74 20 69 66 20 74 68 65 20 62 46 6f 72 55  put if the bForU
0700: 72 6c 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20  rl is false and 
0710: 69 73 20 64 65 73 74 69 6e 65 64 20 66 6f 72 20  is destined for 
0720: 61 20 55 52 4c 20 69 66 0a 2a 2a 20 62 46 6f 72  a URL if.** bFor
0730: 55 72 6c 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2f  Url is false..*/
0740: 0a 73 74 61 74 69 63 20 69 6e 74 20 68 61 73 68  .static int hash
0750: 44 69 67 69 74 73 28 69 6e 74 20 62 46 6f 72 55  Digits(int bForU
0760: 72 6c 29 7b 0a 20 20 73 74 61 74 69 63 20 69 6e  rl){.  static in
0770: 74 20 6e 44 69 67 69 74 48 75 6d 61 6e 20 3d 20  t nDigitHuman = 
0780: 30 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20  0;.  static int 
0790: 6e 44 69 67 69 74 55 72 6c 20 3d 20 30 3b 0a 20  nDigitUrl = 0;. 
07a0: 20 69 66 28 20 6e 44 69 67 69 74 48 75 6d 61 6e   if( nDigitHuman
07b0: 3d 3d 30 20 29 7b 0a 20 20 20 20 6e 44 69 67 69  ==0 ){.    nDigi
07c0: 74 48 75 6d 61 6e 20 3d 20 64 62 5f 67 65 74 5f  tHuman = db_get_
07d0: 69 6e 74 28 22 68 61 73 68 2d 64 69 67 69 74 73  int("hash-digits
07e0: 22 2c 20 46 4f 53 53 49 4c 5f 48 41 53 48 5f 44  ", FOSSIL_HASH_D
07f0: 49 47 49 54 53 29 3b 0a 20 20 20 20 69 66 28 20  IGITS);.    if( 
0800: 6e 44 69 67 69 74 48 75 6d 61 6e 20 3c 20 36 20  nDigitHuman < 6 
0810: 29 20 6e 44 69 67 69 74 48 75 6d 61 6e 20 3d 20  ) nDigitHuman = 
0820: 36 3b 0a 20 20 20 20 69 66 28 20 6e 44 69 67 69  6;.    if( nDigi
0830: 74 48 75 6d 61 6e 20 3e 20 34 30 20 29 20 6e 44  tHuman > 40 ) nD
0840: 69 67 69 74 48 75 6d 61 6e 20 3d 20 34 30 3b 0a  igitHuman = 40;.
0850: 20 20 20 20 6e 44 69 67 69 74 55 72 6c 20 3d 20      nDigitUrl = 
0860: 6e 44 69 67 69 74 48 75 6d 61 6e 20 2b 20 36 3b  nDigitHuman + 6;
0870: 0a 20 20 20 20 69 66 28 20 6e 44 69 67 69 74 55  .    if( nDigitU
0880: 72 6c 20 3c 20 46 4f 53 53 49 4c 5f 48 41 53 48  rl < FOSSIL_HASH
0890: 5f 44 49 47 49 54 53 5f 55 52 4c 20 29 20 6e 44  _DIGITS_URL ) nD
08a0: 69 67 69 74 55 72 6c 20 3d 20 46 4f 53 53 49 4c  igitUrl = FOSSIL
08b0: 5f 48 41 53 48 5f 44 49 47 49 54 53 5f 55 52 4c  _HASH_DIGITS_URL
08c0: 3b 0a 20 20 20 20 69 66 28 20 6e 44 69 67 69 74  ;.    if( nDigit
08d0: 55 72 6c 20 3e 20 34 30 20 29 20 6e 44 69 67 69  Url > 40 ) nDigi
08e0: 74 55 72 6c 20 3d 20 34 30 3b 0a 20 20 7d 0a 20  tUrl = 40;.  }. 
08f0: 20 72 65 74 75 72 6e 20 62 46 6f 72 55 72 6c 20   return bForUrl 
0900: 3f 20 6e 44 69 67 69 74 55 72 6c 20 3a 20 6e 44  ? nDigitUrl : nD
0910: 69 67 69 74 48 75 6d 61 6e 3b 0a 7d 0a 0a 2f 2a  igitHuman;.}../*
0920: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
0930: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
0940: 65 72 73 20 69 6e 20 61 20 25 53 20 6f 75 74 70  ers in a %S outp
0950: 75 74 2e 0a 2a 2f 0a 69 6e 74 20 6c 65 6e 67 74  ut..*/.int lengt
0960: 68 5f 6f 66 5f 53 5f 64 69 73 70 6c 61 79 28 76  h_of_S_display(v
0970: 6f 69 64 29 7b 0a 20 20 72 65 74 75 72 6e 20 68  oid){.  return h
0980: 61 73 68 44 69 67 69 74 73 28 30 29 3b 0a 7d 0a  ashDigits(0);.}.
0990: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 73 69 6f  ./*.** Conversio
09a0: 6e 20 74 79 70 65 73 20 66 61 6c 6c 20 69 6e 74  n types fall int
09b0: 6f 20 76 61 72 69 6f 75 73 20 63 61 74 65 67 6f  o various catego
09c0: 72 69 65 73 20 61 73 20 64 65 66 69 6e 65 64 20  ries as defined 
09d0: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
09e0: 69 6e 67 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e  ing enumeration.
09f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 52 41  .*/.#define etRA
0a00: 44 49 58 20 20 20 20 20 20 20 31 20 2f 2a 20 49  DIX       1 /* I
0a10: 6e 74 65 67 65 72 20 74 79 70 65 73 2e 20 20 25  nteger types.  %
0a20: 64 2c 20 25 78 2c 20 25 6f 2c 20 61 6e 64 20 73  d, %x, %o, and s
0a30: 6f 20 66 6f 72 74 68 20 2a 2f 0a 23 64 65 66 69  o forth */.#defi
0a40: 6e 65 20 65 74 46 4c 4f 41 54 20 20 20 20 20 20  ne etFLOAT      
0a50: 20 32 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 70   2 /* Floating p
0a60: 6f 69 6e 74 2e 20 20 25 66 20 2a 2f 0a 23 64 65  oint.  %f */.#de
0a70: 66 69 6e 65 20 65 74 45 58 50 20 20 20 20 20 20  fine etEXP      
0a80: 20 20 20 33 20 2f 2a 20 45 78 70 6f 6e 65 6e 74     3 /* Exponent
0a90: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 20 25 65  ial notation. %e
0aa0: 20 61 6e 64 20 25 45 20 2a 2f 0a 23 64 65 66 69   and %E */.#defi
0ab0: 6e 65 20 65 74 47 45 4e 45 52 49 43 20 20 20 20  ne etGENERIC    
0ac0: 20 34 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 6f   4 /* Floating o
0ad0: 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 2c 20 64  r exponential, d
0ae0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 65 78 70 6f  epending on expo
0af0: 6e 65 6e 74 2e 20 25 67 20 2a 2f 0a 23 64 65 66  nent. %g */.#def
0b00: 69 6e 65 20 65 74 53 49 5a 45 20 20 20 20 20 20  ine etSIZE      
0b10: 20 20 35 20 2f 2a 20 52 65 74 75 72 6e 20 6e 75    5 /* Return nu
0b20: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
0b30: 72 73 20 70 72 6f 63 65 73 73 65 64 20 73 6f 20  rs processed so 
0b40: 66 61 72 2e 20 25 6e 20 2a 2f 0a 23 64 65 66 69  far. %n */.#defi
0b50: 6e 65 20 65 74 53 54 52 49 4e 47 20 20 20 20 20  ne etSTRING     
0b60: 20 36 20 2f 2a 20 53 74 72 69 6e 67 73 2e 20 25   6 /* Strings. %
0b70: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 44  s */.#define etD
0b80: 59 4e 53 54 52 49 4e 47 20 20 20 37 20 2f 2a 20  YNSTRING   7 /* 
0b90: 44 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  Dynamically allo
0ba0: 63 61 74 65 64 20 73 74 72 69 6e 67 73 2e 20 25  cated strings. %
0bb0: 7a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 50  z */.#define etP
0bc0: 45 52 43 45 4e 54 20 20 20 20 20 38 20 2f 2a 20  ERCENT     8 /* 
0bd0: 50 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2e 20  Percent symbol. 
0be0: 25 25 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74  %% */.#define et
0bf0: 43 48 41 52 58 20 20 20 20 20 20 20 39 20 2f 2a  CHARX       9 /*
0c00: 20 43 68 61 72 61 63 74 65 72 73 2e 20 25 63 20   Characters. %c 
0c10: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 52 52  */.#define etERR
0c20: 4f 52 20 20 20 20 20 20 31 30 20 2f 2a 20 55 73  OR      10 /* Us
0c30: 65 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20 6e  ed to indicate n
0c40: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
0c50: 6e 20 74 79 70 65 20 2a 2f 0a 2f 2a 20 54 68 65  n type */./* The
0c60: 20 72 65 73 74 20 61 72 65 20 65 78 74 65 6e 73   rest are extens
0c70: 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d 61 6c  ions, not normal
0c80: 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72 69 6e  ly found in prin
0c90: 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tf() */.#define 
0ca0: 65 74 42 4c 4f 42 20 20 20 20 20 20 20 31 31 20  etBLOB       11 
0cb0: 2f 2a 20 42 6c 6f 62 20 6f 62 6a 65 63 74 73 2e  /* Blob objects.
0cc0: 20 20 25 62 20 2a 2f 0a 23 64 65 66 69 6e 65 20    %b */.#define 
0cd0: 65 74 42 4c 4f 42 53 51 4c 20 20 20 20 31 32 20  etBLOBSQL    12 
0ce0: 2f 2a 20 42 6c 6f 62 20 6f 62 6a 65 63 74 73 20  /* Blob objects 
0cf0: 71 75 6f 74 65 64 20 66 6f 72 20 53 51 4c 2e 20  quoted for SQL. 
0d00: 20 25 42 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %B */.#define e
0d10: 74 53 51 4c 45 53 43 41 50 45 20 20 31 33 20 2f  tSQLESCAPE  13 /
0d20: 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27  * Strings with '
0d30: 5c 27 27 20 64 6f 75 62 6c 65 64 2e 20 20 25 71  \'' doubled.  %q
0d40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 51   */.#define etSQ
0d50: 4c 45 53 43 41 50 45 32 20 31 34 20 2f 2a 20 53  LESCAPE2 14 /* S
0d60: 74 72 69 6e 67 73 20 77 69 74 68 20 27 5c 27 27  trings with '\''
0d70: 20 64 6f 75 62 6c 65 64 20 61 6e 64 20 65 6e 63   doubled and enc
0d80: 6c 6f 73 65 64 20 69 6e 20 27 27 2c 0a 20 20 20  losed in '',.   
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0da0: 20 20 20 20 20 20 20 4e 55 4c 4c 20 70 6f 69 6e         NULL poin
0db0: 74 65 72 73 20 72 65 70 6c 61 63 65 64 20 62 79  ters replaced by
0dc0: 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 25 51 20 2a   SQL NULL.  %Q *
0dd0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45  /.#define etSQLE
0de0: 53 43 41 50 45 33 20 31 35 20 2f 2a 20 44 6f 75  SCAPE3 15 /* Dou
0df0: 62 6c 65 20 27 22 27 20 63 68 61 72 61 63 74 65  ble '"' characte
0e00: 72 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64  rs within an ind
0e10: 65 6e 74 69 66 69 65 72 2e 20 20 25 77 20 2a 2f  entifier.  %w */
0e20: 0a 23 64 65 66 69 6e 65 20 65 74 50 4f 49 4e 54  .#define etPOINT
0e30: 45 52 20 20 20 20 31 36 20 2f 2a 20 54 68 65 20  ER    16 /* The 
0e40: 25 70 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f  %p conversion */
0e50: 0a 23 64 65 66 69 6e 65 20 65 74 48 54 4d 4c 49  .#define etHTMLI
0e60: 5a 45 20 20 20 20 31 37 20 2f 2a 20 4d 61 6b 65  ZE    17 /* Make
0e70: 20 74 65 78 74 20 73 61 66 65 20 66 6f 72 20 48   text safe for H
0e80: 54 4d 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  TML */.#define e
0e90: 74 48 54 54 50 49 5a 45 20 20 20 20 31 38 20 2f  tHTTPIZE    18 /
0ea0: 2a 20 4d 61 6b 65 20 74 65 78 74 20 73 61 66 65  * Make text safe
0eb0: 20 66 6f 72 20 48 54 54 50 2e 20 20 22 2f 22 20   for HTTP.  "/" 
0ec0: 65 6e 63 6f 64 65 64 20 61 73 20 25 32 66 20 2a  encoded as %2f *
0ed0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 55 52 4c 49  /.#define etURLI
0ee0: 5a 45 20 20 20 20 20 31 39 20 2f 2a 20 4d 61 6b  ZE     19 /* Mak
0ef0: 65 20 74 65 78 74 20 73 61 66 65 20 66 6f 72 20  e text safe for 
0f00: 48 54 54 50 2e 20 20 22 2f 22 20 6e 6f 74 20 65  HTTP.  "/" not e
0f10: 6e 63 6f 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  ncoded */.#defin
0f20: 65 20 65 74 46 4f 53 53 49 4c 49 5a 45 20 20 32  e etFOSSILIZE  2
0f30: 30 20 2f 2a 20 54 68 65 20 66 6f 73 73 69 6c 20  0 /* The fossil 
0f40: 68 65 61 64 65 72 20 65 6e 63 6f 64 69 6e 67 20  header encoding 
0f50: 66 6f 72 6d 61 74 2e 20 2a 2f 0a 23 64 65 66 69  format. */.#defi
0f60: 6e 65 20 65 74 50 41 54 48 20 20 20 20 20 20 20  ne etPATH       
0f70: 32 31 20 2f 2a 20 50 61 74 68 20 74 79 70 65 20  21 /* Path type 
0f80: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 57 49 4b  */.#define etWIK
0f90: 49 53 54 52 20 20 20 20 32 32 20 2f 2a 20 54 69  ISTR    22 /* Ti
0fa0: 6d 65 6c 69 6e 65 20 63 6f 6d 6d 65 6e 74 20 74  meline comment t
0fb0: 65 78 74 20 72 65 6e 64 65 72 65 64 20 66 72 6f  ext rendered fro
0fc0: 6d 20 61 20 63 68 61 72 2a 3a 20 25 57 20 2a 2f  m a char*: %W */
0fd0: 0a 23 64 65 66 69 6e 65 20 65 74 53 54 52 49 4e  .#define etSTRIN
0fe0: 47 49 44 20 20 20 32 33 20 2f 2a 20 53 74 72 69  GID   23 /* Stri
0ff0: 6e 67 20 77 69 74 68 20 6c 65 6e 67 74 68 20 6c  ng with length l
1000: 69 6d 69 74 20 66 6f 72 20 61 20 55 55 49 44 20  imit for a UUID 
1010: 70 72 65 66 69 78 3a 20 25 53 20 2a 2f 0a 23 64  prefix: %S */.#d
1020: 65 66 69 6e 65 20 65 74 52 4f 4f 54 20 20 20 20  efine etROOT    
1030: 20 20 20 32 34 20 2f 2a 20 53 74 72 69 6e 67 20     24 /* String 
1040: 76 61 6c 75 65 20 6f 66 20 67 2e 7a 54 6f 70 3a  value of g.zTop:
1050: 20 25 52 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   %R */.../*.** A
1060: 6e 20 22 65 74 42 79 74 65 22 20 69 73 20 61 6e  n "etByte" is an
1070: 20 38 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20   8-bit unsigned 
1080: 76 61 6c 75 65 2e 0a 2a 2f 0a 74 79 70 65 64 65  value..*/.typede
1090: 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
10a0: 65 74 42 79 74 65 3b 0a 0a 2f 2a 0a 2a 2a 20 45  etByte;../*.** E
10b0: 61 63 68 20 62 75 69 6c 74 69 6e 20 63 6f 6e 76  ach builtin conv
10c0: 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72  ersion character
10d0: 20 28 65 78 3a 20 74 68 65 20 27 64 27 20 69 6e   (ex: the 'd' in
10e0: 20 22 25 64 22 29 20 69 73 20 64 65 73 63 72 69   "%d") is descri
10f0: 62 65 64 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  bed.** by an ins
1100: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1110: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1120: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1130: 63 74 20 65 74 5f 69 6e 66 6f 20 7b 20 20 20 2f  ct et_info {   /
1140: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1150: 6f 75 74 20 65 61 63 68 20 66 6f 72 6d 61 74 20  out each format 
1160: 66 69 65 6c 64 20 2a 2f 0a 20 20 63 68 61 72 20  field */.  char 
1170: 66 6d 74 74 79 70 65 3b 20 20 20 20 20 20 20 20  fmttype;        
1180: 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 72 6d 61      /* The forma
1190: 74 20 66 69 65 6c 64 20 63 6f 64 65 20 6c 65 74  t field code let
11a0: 74 65 72 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ter */.  etByte 
11b0: 62 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  base;           
11c0: 20 20 2f 2a 20 54 68 65 20 62 61 73 65 20 66 6f    /* The base fo
11d0: 72 20 72 61 64 69 78 20 63 6f 6e 76 65 72 73 69  r radix conversi
11e0: 6f 6e 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  on */.  etByte f
11f0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
1200: 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1210: 6f 66 20 46 4c 41 47 5f 20 63 6f 6e 73 74 61 6e  of FLAG_ constan
1220: 74 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 65 74  ts below */.  et
1230: 42 79 74 65 20 74 79 70 65 3b 20 20 20 20 20 20  Byte type;      
1240: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
1250: 73 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f  sion paradigm */
1260: 0a 20 20 65 74 42 79 74 65 20 63 68 61 72 73 65  .  etByte charse
1270: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  t;          /* O
1280: 66 66 73 65 74 20 69 6e 74 6f 20 61 44 69 67 69  ffset into aDigi
1290: 74 73 5b 5d 20 6f 66 20 74 68 65 20 64 69 67 69  ts[] of the digi
12a0: 74 73 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 65  ts string */.  e
12b0: 74 42 79 74 65 20 70 72 65 66 69 78 3b 20 20 20  tByte prefix;   
12c0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
12d0: 74 20 69 6e 74 6f 20 61 50 72 65 66 69 78 5b 5d  t into aPrefix[]
12e0: 20 6f 66 20 74 68 65 20 70 72 65 66 69 78 20 73   of the prefix s
12f0: 74 72 69 6e 67 20 2a 2f 0a 7d 20 65 74 5f 69 6e  tring */.} et_in
1300: 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  fo;../*.** Allow
1310: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 65 74  ed values for et
1320: 5f 69 6e 66 6f 2e 66 6c 61 67 73 0a 2a 2f 0a 23  _info.flags.*/.#
1330: 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 49 47 4e  define FLAG_SIGN
1340: 45 44 20 20 31 20 20 20 20 20 2f 2a 20 54 72 75  ED  1     /* Tru
1350: 65 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 74  e if the value t
1360: 6f 20 63 6f 6e 76 65 72 74 20 69 73 20 73 69 67  o convert is sig
1370: 6e 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46  ned */.#define F
1380: 4c 41 47 5f 49 4e 54 45 52 4e 20 20 32 20 20 20  LAG_INTERN  2   
1390: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66 6f 72    /* True if for
13a0: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e   internal use on
13b0: 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46 4c  ly */.#define FL
13c0: 41 47 5f 53 54 52 49 4e 47 20 20 34 20 20 20 20  AG_STRING  4    
13d0: 20 2f 2a 20 41 6c 6c 6f 77 20 69 6e 66 69 6e 69   /* Allow infini
13e0: 74 79 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a  ty precision */.
13f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1400: 6f 77 69 6e 67 20 74 61 62 6c 65 20 69 73 20 73  owing table is s
1410: 65 61 72 63 68 65 64 20 6c 69 6e 65 61 72 6c 79  earched linearly
1420: 2c 20 73 6f 20 69 74 20 69 73 20 67 6f 6f 64 20  , so it is good 
1430: 74 6f 20 70 75 74 20 74 68 65 0a 2a 2a 20 6d 6f  to put the.** mo
1440: 73 74 20 66 72 65 71 75 65 6e 74 6c 79 20 75 73  st frequently us
1450: 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79  ed conversion ty
1460: 70 65 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 73 74  pes first..*/.st
1470: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
1480: 61 44 69 67 69 74 73 5b 5d 20 3d 20 22 30 31 32  aDigits[] = "012
1490: 33 34 35 36 37 38 39 41 42 43 44 45 46 30 31 32  3456789ABCDEF012
14a0: 33 34 35 36 37 38 39 61 62 63 64 65 66 22 3b 0a  3456789abcdef";.
14b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
14c0: 72 20 61 50 72 65 66 69 78 5b 5d 20 3d 20 22 2d  r aPrefix[] = "-
14d0: 78 30 5c 30 30 30 58 30 22 3b 0a 73 74 61 74 69  x0\000X0";.stati
14e0: 63 20 63 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20  c const et_info 
14f0: 66 6d 74 69 6e 66 6f 5b 5d 20 3d 20 7b 0a 20 20  fmtinfo[] = {.  
1500: 7b 20 20 27 64 27 2c 20 31 30 2c 20 31 2c 20 65  {  'd', 10, 1, e
1510: 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20  tRADIX,      0, 
1520: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 73 27 2c 20   0 },.  {  's', 
1530: 20 30 2c 20 34 2c 20 65 74 53 54 52 49 4e 47 2c   0, 4, etSTRING,
1540: 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20       0,  0 },.  
1550: 7b 20 20 27 67 27 2c 20 20 30 2c 20 31 2c 20 65  {  'g',  0, 1, e
1560: 74 47 45 4e 45 52 49 43 2c 20 20 20 20 33 30 2c  tGENERIC,    30,
1570: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 7a 27 2c 20   0 },.  {  'z', 
1580: 20 30 2c 20 36 2c 20 65 74 44 59 4e 53 54 52 49   0, 6, etDYNSTRI
1590: 4e 47 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  NG,  0,  0 },.  
15a0: 7b 20 20 27 71 27 2c 20 20 30 2c 20 34 2c 20 65  {  'q',  0, 4, e
15b0: 74 53 51 4c 45 53 43 41 50 45 2c 20 20 30 2c 20  tSQLESCAPE,  0, 
15c0: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 51 27 2c 20   0 },.  {  'Q', 
15d0: 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43 41   0, 4, etSQLESCA
15e0: 50 45 32 2c 20 30 2c 20 20 30 20 7d 2c 0a 20 20  PE2, 0,  0 },.  
15f0: 7b 20 20 27 62 27 2c 20 20 30 2c 20 32 2c 20 65  {  'b',  0, 2, e
1600: 74 42 4c 4f 42 2c 20 20 20 20 20 20 20 30 2c 20  tBLOB,       0, 
1610: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 42 27 2c 20   0 },.  {  'B', 
1620: 20 30 2c 20 32 2c 20 65 74 42 4c 4f 42 53 51 4c   0, 2, etBLOBSQL
1630: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
1640: 7b 20 20 27 57 27 2c 20 20 30 2c 20 32 2c 20 65  {  'W',  0, 2, e
1650: 74 57 49 4b 49 53 54 52 2c 20 20 20 20 30 2c 20  tWIKISTR,    0, 
1660: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 68 27 2c 20   0 },.  {  'h', 
1670: 20 30 2c 20 34 2c 20 65 74 48 54 4d 4c 49 5a 45   0, 4, etHTMLIZE
1680: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
1690: 7b 20 20 27 52 27 2c 20 20 30 2c 20 30 2c 20 65  {  'R',  0, 0, e
16a0: 74 52 4f 4f 54 2c 20 20 20 20 20 20 20 30 2c 20  tROOT,       0, 
16b0: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 74 27 2c 20   0 },.  {  't', 
16c0: 20 30 2c 20 34 2c 20 65 74 48 54 54 50 49 5a 45   0, 4, etHTTPIZE
16d0: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 20 20 2f  ,    0,  0 },  /
16e0: 2a 20 22 2f 22 20 2d 3e 20 22 25 32 46 22 20 2a  * "/" -> "%2F" *
16f0: 2f 0a 20 20 7b 20 20 27 54 27 2c 20 20 30 2c 20  /.  {  'T',  0, 
1700: 34 2c 20 65 74 55 52 4c 49 5a 45 2c 20 20 20 20  4, etURLIZE,    
1710: 20 30 2c 20 20 30 20 7d 2c 20 20 2f 2a 20 22 2f   0,  0 },  /* "/
1720: 22 20 75 6e 63 68 61 6e 67 65 64 20 2a 2f 0a 20  " unchanged */. 
1730: 20 7b 20 20 27 77 27 2c 20 20 30 2c 20 34 2c 20   {  'w',  0, 4, 
1740: 65 74 53 51 4c 45 53 43 41 50 45 33 2c 20 30 2c  etSQLESCAPE3, 0,
1750: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 46 27 2c    0 },.  {  'F',
1760: 20 20 30 2c 20 34 2c 20 65 74 46 4f 53 53 49 4c    0, 4, etFOSSIL
1770: 49 5a 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20  IZE,  0,  0 },. 
1780: 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 34 2c 20   {  'S',  0, 4, 
1790: 65 74 53 54 52 49 4e 47 49 44 2c 20 20 20 30 2c  etSTRINGID,   0,
17a0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 63 27 2c    0 },.  {  'c',
17b0: 20 20 30 2c 20 30 2c 20 65 74 43 48 41 52 58 2c    0, 0, etCHARX,
17c0: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
17d0: 20 7b 20 20 27 6f 27 2c 20 20 38 2c 20 30 2c 20   {  'o',  8, 0, 
17e0: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
17f0: 20 20 32 20 7d 2c 0a 20 20 7b 20 20 27 75 27 2c    2 },.  {  'u',
1800: 20 31 30 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   10, 0, etRADIX,
1810: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
1820: 20 7b 20 20 27 78 27 2c 20 31 36 2c 20 30 2c 20   {  'x', 16, 0, 
1830: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 31 36  etRADIX,      16
1840: 2c 20 31 20 7d 2c 0a 20 20 7b 20 20 27 58 27 2c  , 1 },.  {  'X',
1850: 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   16, 0, etRADIX,
1860: 20 20 20 20 20 20 30 2c 20 20 34 20 7d 2c 0a 20        0,  4 },. 
1870: 20 7b 20 20 27 66 27 2c 20 20 30 2c 20 31 2c 20   {  'f',  0, 1, 
1880: 65 74 46 4c 4f 41 54 2c 20 20 20 20 20 20 30 2c  etFLOAT,      0,
1890: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 65 27 2c    0 },.  {  'e',
18a0: 20 20 30 2c 20 31 2c 20 65 74 45 58 50 2c 20 20    0, 1, etEXP,  
18b0: 20 20 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20        30, 0 },. 
18c0: 20 7b 20 20 27 45 27 2c 20 20 30 2c 20 31 2c 20   {  'E',  0, 1, 
18d0: 65 74 45 58 50 2c 20 20 20 20 20 20 20 20 31 34  etEXP,        14
18e0: 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 47 27 2c  , 0 },.  {  'G',
18f0: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
1900: 43 2c 20 20 20 20 31 34 2c 20 30 20 7d 2c 0a 20  C,    14, 0 },. 
1910: 20 7b 20 20 27 69 27 2c 20 31 30 2c 20 31 2c 20   {  'i', 10, 1, 
1920: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
1930: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6e 27 2c    0 },.  {  'n',
1940: 20 20 30 2c 20 30 2c 20 65 74 53 49 5a 45 2c 20    0, 0, etSIZE, 
1950: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
1960: 20 7b 20 20 27 25 27 2c 20 20 30 2c 20 30 2c 20   {  '%',  0, 0, 
1970: 65 74 50 45 52 43 45 4e 54 2c 20 20 20 20 30 2c  etPERCENT,    0,
1980: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 70 27 2c    0 },.  {  'p',
1990: 20 31 36 2c 20 30 2c 20 65 74 50 4f 49 4e 54 45   16, 0, etPOINTE
19a0: 52 2c 20 20 20 20 30 2c 20 20 31 20 7d 2c 0a 20  R,    0,  1 },. 
19b0: 20 7b 20 20 27 2f 27 2c 20 20 30 2c 20 30 2c 20   {  '/',  0, 0, 
19c0: 65 74 50 41 54 48 2c 20 20 20 20 20 20 20 30 2c  etPATH,       0,
19d0: 20 20 30 20 7d 2c 0a 7d 3b 0a 23 64 65 66 69 6e    0 },.};.#defin
19e0: 65 20 65 74 4e 49 4e 46 4f 20 63 6f 75 6e 74 28  e etNINFO count(
19f0: 66 6d 74 69 6e 66 6f 29 0a 0a 2f 2a 0a 2a 2a 20  fmtinfo)../*.** 
1a00: 22 2a 76 61 6c 22 20 69 73 20 61 20 64 6f 75 62  "*val" is a doub
1a10: 6c 65 20 73 75 63 68 20 74 68 61 74 20 30 2e 31  le such that 0.1
1a20: 20 3c 3d 20 2a 76 61 6c 20 3c 20 31 30 2e 30 0a   <= *val < 10.0.
1a30: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 73  ** Return the as
1a40: 63 69 69 20 63 6f 64 65 20 66 6f 72 20 74 68 65  cii code for the
1a50: 20 6c 65 61 64 69 6e 67 20 64 69 67 69 74 20 6f   leading digit o
1a60: 66 20 2a 76 61 6c 2c 20 74 68 65 6e 0a 2a 2a 20  f *val, then.** 
1a70: 6d 75 6c 74 69 70 6c 79 20 22 2a 76 61 6c 22 20  multiply "*val" 
1a80: 62 79 20 31 30 2e 30 20 74 6f 20 72 65 6e 6f 72  by 10.0 to renor
1a90: 6d 61 6c 69 7a 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  malize..**.** Ex
1aa0: 61 6d 70 6c 65 3a 0a 2a 2a 20 20 20 20 20 69 6e  ample:.**     in
1ab0: 70 75 74 3a 20 20 20 20 20 2a 76 61 6c 20 3d 20  put:     *val = 
1ac0: 33 2e 31 34 31 35 39 0a 2a 2a 20 20 20 20 20 6f  3.14159.**     o
1ad0: 75 74 70 75 74 3a 20 20 20 20 2a 76 61 6c 20 3d  utput:    *val =
1ae0: 20 31 2e 34 31 35 39 20 20 20 20 66 75 6e 63 74   1.4159    funct
1af0: 69 6f 6e 20 72 65 74 75 72 6e 20 3d 20 27 33 27  ion return = '3'
1b00: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 75 6e 74  .**.** The count
1b10: 65 72 20 2a 63 6e 74 20 69 73 20 69 6e 63 72 65  er *cnt is incre
1b20: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
1b30: 2e 20 20 41 66 74 65 72 20 63 6f 75 6e 74 65 72  .  After counter
1b40: 20 65 78 63 65 65 64 73 0a 2a 2a 20 31 36 20 28   exceeds.** 16 (
1b50: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 69  the number of si
1b60: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
1b70: 20 69 6e 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   in a 64-bit flo
1b80: 61 74 29 20 27 30 27 20 69 73 0a 2a 2a 20 61 6c  at) '0' is.** al
1b90: 77 61 79 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  ways returned..*
1ba0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 74 5f  /.static int et_
1bb0: 67 65 74 64 69 67 69 74 28 6c 6f 6e 67 20 64 6f  getdigit(long do
1bc0: 75 62 6c 65 20 2a 76 61 6c 2c 20 69 6e 74 20 2a  uble *val, int *
1bd0: 63 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69  cnt){.  int digi
1be0: 74 3b 0a 20 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  t;.  long double
1bf0: 20 64 3b 0a 20 20 69 66 28 20 28 2a 63 6e 74 29   d;.  if( (*cnt)
1c00: 2b 2b 20 3e 3d 20 31 36 20 29 20 72 65 74 75 72  ++ >= 16 ) retur
1c10: 6e 20 27 30 27 3b 0a 20 20 64 69 67 69 74 20 3d  n '0';.  digit =
1c20: 20 28 69 6e 74 29 2a 76 61 6c 3b 0a 20 20 64 20   (int)*val;.  d 
1c30: 3d 20 64 69 67 69 74 3b 0a 20 20 64 69 67 69 74  = digit;.  digit
1c40: 20 2b 3d 20 27 30 27 3b 0a 20 20 2a 76 61 6c 20   += '0';.  *val 
1c50: 3d 20 28 2a 76 61 6c 20 2d 20 64 29 2a 31 30 2e  = (*val - d)*10.
1c60: 30 3b 0a 20 20 72 65 74 75 72 6e 20 64 69 67 69  0;.  return digi
1c70: 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  t;.}../*.** Size
1c80: 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 63 6f   of temporary co
1c90: 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 2e  nversion buffer.
1ca0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 42 55  .*/.#define etBU
1cb0: 46 53 49 5a 45 20 35 30 30 0a 0a 2f 2a 0a 2a 2a  FSIZE 500../*.**
1cc0: 20 46 69 6e 64 20 74 68 65 20 6c 65 6e 67 74 68   Find the length
1cd0: 20 6f 66 20 61 20 73 74 72 69 6e 67 20 61 73 20   of a string as 
1ce0: 6c 6f 6e 67 20 61 73 20 74 68 61 74 20 6c 65 6e  long as that len
1cf0: 67 74 68 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  gth does not.** 
1d00: 65 78 63 65 65 64 20 4e 20 62 79 74 65 73 2e 20  exceed N bytes. 
1d10: 20 49 66 20 6e 6f 20 7a 65 72 6f 20 74 65 72 6d   If no zero term
1d20: 69 6e 61 74 6f 72 20 69 73 20 73 65 65 6e 20 69  inator is seen i
1d30: 6e 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 4e  n the first.** N
1d40: 20 62 79 74 65 73 20 74 68 65 6e 20 72 65 74 75   bytes then retu
1d50: 72 6e 20 4e 2e 20 20 49 66 20 4e 20 69 73 20 6e  rn N.  If N is n
1d60: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
1d70: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73  is routine.** is
1d80: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 73 74   an alias for st
1d90: 72 6c 65 6e 28 29 2e 0a 2a 2f 0a 73 74 61 74 69  rlen()..*/.stati
1da0: 63 20 69 6e 74 20 53 74 72 4e 4c 65 6e 33 32 28  c int StrNLen32(
1db0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
1dc0: 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 6e 20 3d  nt N){.  int n =
1dd0: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 28 4e 2d   0;.  while( (N-
1de0: 2d 20 21 3d 20 30 29 20 26 26 20 2a 28 7a 2b 2b  - != 0) && *(z++
1df0: 29 21 3d 30 20 29 7b 20 6e 2b 2b 3b 20 7d 0a 20  )!=0 ){ n++; }. 
1e00: 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a   return n;.}../*
1e10: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 61 70  .** Return an ap
1e20: 70 72 6f 70 72 69 61 74 65 20 73 65 74 20 6f 66  propriate set of
1e30: 20 66 6c 61 67 73 20 66 6f 72 20 77 69 6b 69 5f   flags for wiki_
1e40: 63 6f 6e 76 65 72 74 28 29 20 66 6f 72 20 64 69  convert() for di
1e50: 73 70 6c 61 79 69 6e 67 0a 2a 2a 20 63 6f 6d 6d  splaying.** comm
1e60: 65 6e 74 73 20 6f 6e 20 61 20 74 69 6d 65 6c 69  ents on a timeli
1e70: 6e 65 2e 20 20 54 68 65 73 65 20 66 6c 61 67 20  ne.  These flag 
1e80: 73 65 74 74 69 6e 67 73 20 61 72 65 20 64 65 74  settings are det
1e90: 65 72 6d 69 6e 65 64 20 62 79 0a 2a 2a 20 63 6f  ermined by.** co
1ea0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 70 61 72 61  nfiguration para
1eb0: 6d 65 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  meters..**.** Th
1ec0: 65 20 61 6c 74 46 6f 72 6d 32 20 61 72 67 75 6d  e altForm2 argum
1ed0: 65 6e 74 20 69 73 20 74 72 75 65 20 66 6f 72 20  ent is true for 
1ee0: 22 25 21 57 22 20 28 77 69 74 68 20 74 68 65 20  "%!W" (with the 
1ef0: 22 21 22 20 61 6c 74 65 72 6e 61 74 65 2d 66 6f  "!" alternate-fo
1f00: 72 6d 2d 32 0a 2a 2a 20 66 6c 61 67 73 29 20 61  rm-2.** flags) a
1f10: 6e 64 20 69 73 20 66 61 6c 73 65 20 66 6f 72 20  nd is false for 
1f20: 70 6c 61 69 6e 20 22 25 57 22 2e 20 20 54 68 65  plain "%W".  The
1f30: 20 21 20 69 6e 64 69 63 61 74 65 73 20 74 68 61   ! indicates tha
1f40: 74 20 74 68 65 20 74 65 78 74 20 69 73 0a 2a 2a  t the text is.**
1f50: 20 74 6f 20 62 65 20 72 65 6e 64 65 72 65 64 20   to be rendered 
1f60: 6f 6e 20 61 20 66 6f 72 6d 20 72 61 74 68 65 72  on a form rather
1f70: 20 74 68 61 6e 20 74 68 65 20 74 69 6d 65 6c 69   than the timeli
1f80: 6e 65 20 61 6e 64 20 74 68 61 74 20 62 6c 6f 63  ne and that bloc
1f90: 6b 20 6d 61 72 6b 75 70 0a 2a 2a 20 69 73 20 61  k markup.** is a
1fa0: 63 63 65 70 74 61 62 6c 65 20 65 76 65 6e 20 69  cceptable even i
1fb0: 66 20 74 68 65 20 22 74 69 6d 65 6c 69 6e 65 2d  f the "timeline-
1fc0: 62 6c 6f 63 6b 2d 6d 61 72 6b 75 70 22 20 73 65  block-markup" se
1fd0: 74 74 69 6e 67 20 69 73 20 66 61 6c 73 65 2e 0a  tting is false..
1fe0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 77 69  */.static int wi
1ff0: 6b 69 5f 63 6f 6e 76 65 72 74 5f 66 6c 61 67 73  ki_convert_flags
2000: 28 69 6e 74 20 61 6c 74 46 6f 72 6d 32 29 7b 0a  (int altForm2){.
2010: 20 20 73 74 61 74 69 63 20 69 6e 74 20 77 69 6b    static int wik
2020: 69 46 6c 61 67 73 20 3d 20 30 3b 0a 20 20 69 66  iFlags = 0;.  if
2030: 28 20 77 69 6b 69 46 6c 61 67 73 3d 3d 30 20 29  ( wikiFlags==0 )
2040: 7b 0a 20 20 20 20 69 66 28 20 61 6c 74 46 6f 72  {.    if( altFor
2050: 6d 32 20 7c 7c 20 64 62 5f 67 65 74 5f 62 6f 6f  m2 || db_get_boo
2060: 6c 65 61 6e 28 22 74 69 6d 65 6c 69 6e 65 2d 62  lean("timeline-b
2070: 6c 6f 63 6b 2d 6d 61 72 6b 75 70 22 2c 20 30 29  lock-markup", 0)
2080: 20 29 7b 0a 20 20 20 20 20 20 77 69 6b 69 46 6c   ){.      wikiFl
2090: 61 67 73 20 3d 20 57 49 4b 49 5f 49 4e 4c 49 4e  ags = WIKI_INLIN
20a0: 45 20 7c 20 57 49 4b 49 5f 4e 4f 42 41 44 4c 49  E | WIKI_NOBADLI
20b0: 4e 4b 53 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  NKS;.    }else{.
20c0: 20 20 20 20 20 20 77 69 6b 69 46 6c 61 67 73 20        wikiFlags 
20d0: 3d 20 57 49 4b 49 5f 49 4e 4c 49 4e 45 20 7c 20  = WIKI_INLINE | 
20e0: 57 49 4b 49 5f 4e 4f 42 4c 4f 43 4b 20 7c 20 57  WIKI_NOBLOCK | W
20f0: 49 4b 49 5f 4e 4f 42 41 44 4c 49 4e 4b 53 3b 0a  IKI_NOBADLINKS;.
2100: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
2110: 5f 67 65 74 5f 62 6f 6f 6c 65 61 6e 28 22 74 69  _get_boolean("ti
2120: 6d 65 6c 69 6e 65 2d 70 6c 61 69 6e 74 65 78 74  meline-plaintext
2130: 22 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 77  ", 0) ){.      w
2140: 69 6b 69 46 6c 61 67 73 20 7c 3d 20 57 49 4b 49  ikiFlags |= WIKI
2150: 5f 4c 49 4e 4b 53 4f 4e 4c 59 3b 0a 20 20 20 20  _LINKSONLY;.    
2160: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 77  }.  }.  return w
2170: 69 6b 69 46 6c 61 67 73 3b 0a 7d 0a 0a 0a 0a 2f  ikiFlags;.}..../
2180: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 72  *.** The root pr
2190: 6f 67 72 61 6d 2e 20 20 41 6c 6c 20 76 61 72 69  ogram.  All vari
21a0: 61 74 69 6f 6e 73 20 63 61 6c 6c 20 74 68 69 73  ations call this
21b0: 20 63 6f 72 65 2e 0a 2a 2a 0a 2a 2a 20 49 4e 50   core..**.** INP
21c0: 55 54 53 3a 0a 2a 2a 20 20 20 70 42 6c 6f 62 20  UTS:.**   pBlob 
21d0: 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6c 6f   This is the blo
21e0: 62 20 77 68 65 72 65 20 74 68 65 20 6f 75 74 70  b where the outp
21f0: 75 74 20 77 69 6c 6c 20 62 65 20 62 75 69 6c 74  ut will be built
2200: 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6d 74 20 20 20  ..**.**   fmt   
2210: 20 54 68 69 73 20 69 73 20 74 68 65 20 66 6f 72   This is the for
2220: 6d 61 74 20 73 74 72 69 6e 67 2c 20 61 73 20 69  mat string, as i
2230: 6e 20 74 68 65 20 75 73 75 61 6c 20 70 72 69 6e  n the usual prin
2240: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 61 70 20 20 20  t..**.**   ap   
2250: 20 20 54 68 69 73 20 69 73 20 61 20 70 6f 69 6e    This is a poin
2260: 74 65 72 20 74 6f 20 61 20 6c 69 73 74 20 6f 66  ter to a list of
2270: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 53 61 6d   arguments.  Sam
2280: 65 20 61 73 20 69 6e 0a 2a 2a 20 20 20 20 20 20  e as in.**      
2290: 20 20 20 20 76 66 70 72 69 6e 74 2e 0a 2a 2a 0a      vfprint..**.
22a0: 2a 2a 20 4f 55 54 50 55 54 53 3a 0a 2a 2a 20 20  ** OUTPUTS:.**  
22b0: 20 20 20 20 20 20 20 20 54 68 65 20 72 65 74 75          The retu
22c0: 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  rn value is the 
22d0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
22e0: 63 68 61 72 61 63 74 65 72 73 20 73 65 6e 74 20  characters sent 
22f0: 74 6f 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 74  to.**          t
2300: 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 66 75 6e  he function "fun
2310: 63 22 2e 20 20 52 65 74 75 72 6e 73 20 2d 31 20  c".  Returns -1 
2320: 6f 6e 20 61 20 65 72 72 6f 72 2e 0a 2a 2a 0a 2a  on a error..**.*
2330: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
2340: 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 61  order in which a
2350: 75 74 6f 6d 61 74 69 63 20 76 61 72 69 61 62 6c  utomatic variabl
2360: 65 73 20 61 72 65 20 64 65 63 6c 61 72 65 64 20  es are declared 
2370: 62 65 6c 6f 77 0a 2a 2a 20 73 65 65 6d 73 20 74  below.** seems t
2380: 6f 20 6d 61 6b 65 20 61 20 62 69 67 20 64 69 66  o make a big dif
2390: 66 65 72 65 6e 63 65 20 69 6e 20 64 65 74 65 72  ference in deter
23a0: 6d 69 6e 69 6e 67 20 68 6f 77 20 66 61 73 74 20  mining how fast 
23b0: 74 68 69 73 20 62 65 61 73 74 0a 2a 2a 20 77 69  this beast.** wi
23c0: 6c 6c 20 72 75 6e 2e 0a 2a 2f 0a 69 6e 74 20 76  ll run..*/.int v
23d0: 78 70 72 69 6e 74 66 28 0a 20 20 42 6c 6f 62 20  xprintf(.  Blob 
23e0: 2a 70 42 6c 6f 62 2c 20 20 20 20 20 20 20 20 20  *pBlob,         
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2400: 20 41 70 70 65 6e 64 20 6f 75 74 70 75 74 20 74   Append output t
2410: 6f 20 74 68 69 73 20 62 6c 6f 62 20 2a 2f 0a 20  o this blob */. 
2420: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 6d 74   const char *fmt
2430: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2440: 20 20 20 20 2f 2a 20 46 6f 72 6d 61 74 20 73 74      /* Format st
2450: 72 69 6e 67 20 2a 2f 0a 20 20 76 61 5f 6c 69 73  ring */.  va_lis
2460: 74 20 61 70 20 20 20 20 20 20 20 20 20 20 20 20  t ap            
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2480: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
2490: 20 20 69 6e 74 20 63 3b 20 20 20 20 20 20 20 20    int c;        
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24b0: 4e 65 78 74 20 63 68 61 72 61 63 74 65 72 20 69  Next character i
24c0: 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72  n the format str
24d0: 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 62  ing */.  char *b
24e0: 75 66 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  ufpt;           
24f0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
2500: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
2510: 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
2520: 20 70 72 65 63 69 73 69 6f 6e 3b 20 20 20 20 20   precision;     
2530: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65 63 69          /* Preci
2540: 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72  sion of the curr
2550: 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69  ent field */.  i
2560: 6e 74 20 6c 65 6e 67 74 68 3b 20 20 20 20 20 20  nt length;      
2570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
2580: 67 74 68 20 6f 66 20 74 68 65 20 66 69 65 6c 64  gth of the field
2590: 20 2a 2f 0a 20 20 69 6e 74 20 69 64 78 3b 20 20   */.  int idx;  
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 2f 2a 20 41 20 67 65 6e 65 72 61 6c 20 70 75   /* A general pu
25c0: 72 70 6f 73 65 20 6c 6f 6f 70 20 63 6f 75 6e 74  rpose loop count
25d0: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 75 6e  er */.  int coun
25e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25f0: 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
2600: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
2610: 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
2620: 20 77 69 64 74 68 3b 20 20 20 20 20 20 20 20 20   width;         
2630: 20 20 20 20 20 20 20 20 2f 2a 20 57 69 64 74 68          /* Width
2640: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2650: 66 69 65 6c 64 20 2a 2f 0a 20 20 65 74 42 79 74  field */.  etByt
2660: 65 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69  e flag_leftjusti
2670: 66 79 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  fy;   /* True if
2680: 20 22 2d 22 20 66 6c 61 67 20 69 73 20 70 72 65   "-" flag is pre
2690: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65  sent */.  etByte
26a0: 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 3b 20   flag_plussign; 
26b0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
26c0: 22 2b 22 20 66 6c 61 67 20 69 73 20 70 72 65 73  "+" flag is pres
26d0: 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ent */.  etByte 
26e0: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 3b 20  flag_blanksign; 
26f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
2700: 20 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65   " flag is prese
2710: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  nt */.  etByte f
2720: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
2730: 6d 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 22 23  m; /* True if "#
2740: 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e  " flag is presen
2750: 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  t */.  etByte fl
2760: 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 20 20 20 20  ag_altform2;    
2770: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 21 22    /* True if "!"
2780: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
2790: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
27a0: 67 5f 7a 65 72 6f 70 61 64 3b 20 20 20 20 20 20  g_zeropad;      
27b0: 20 2f 2a 20 54 72 75 65 20 69 66 20 66 69 65 6c   /* True if fiel
27c0: 64 20 77 69 64 74 68 20 63 6f 6e 73 74 61 6e 74  d width constant
27d0: 20 73 74 61 72 74 73 20 77 69 74 68 20 7a 65 72   starts with zer
27e0: 6f 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  o */.  etByte fl
27f0: 61 67 5f 6c 6f 6e 67 3b 20 20 20 20 20 20 20 20  ag_long;        
2800: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 6c 22    /* True if "l"
2810: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
2820: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
2830: 67 5f 6c 6f 6e 67 6c 6f 6e 67 3b 20 20 20 20 20  g_longlong;     
2840: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
2850: 22 6c 6c 22 20 66 6c 61 67 20 69 73 20 70 72 65  "ll" flag is pre
2860: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65  sent */.  etByte
2870: 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20 20   done;          
2880: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 74 65 72       /* Loop ter
2890: 6d 69 6e 61 74 69 6f 6e 20 66 6c 61 67 20 2a 2f  mination flag */
28a0: 0a 20 20 65 74 42 79 74 65 20 63 54 68 6f 75 73  .  etByte cThous
28b0: 61 6e 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  and;          /*
28c0: 20 54 68 6f 75 73 61 6e 64 73 20 73 65 70 61 72   Thousands separ
28d0: 61 74 6f 72 20 66 6f 72 20 25 64 20 61 6e 64 20  ator for %d and 
28e0: 25 75 20 2a 2f 0a 20 20 75 36 34 20 6c 6f 6e 67  %u */.  u64 long
28f0: 76 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  value;          
2900: 20 20 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20     /* Value for 
2910: 69 6e 74 65 67 65 72 20 74 79 70 65 73 20 2a 2f  integer types */
2920: 0a 20 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 20 72  .  long double r
2930: 65 61 6c 76 61 6c 75 65 3b 20 20 20 20 20 2f 2a  ealvalue;     /*
2940: 20 56 61 6c 75 65 20 66 6f 72 20 72 65 61 6c 20   Value for real 
2950: 74 79 70 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  types */.  const
2960: 20 65 74 5f 69 6e 66 6f 20 2a 69 6e 66 6f 70 3b   et_info *infop;
2970: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
2980: 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69   to the appropri
2990: 61 74 65 20 69 6e 66 6f 20 73 74 72 75 63 74 75  ate info structu
29a0: 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 62 75 66  re */.  char buf
29b0: 5b 65 74 42 55 46 53 49 5a 45 5d 3b 20 20 20 20  [etBUFSIZE];    
29c0: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e     /* Conversion
29d0: 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 63 68 61   buffer */.  cha
29e0: 72 20 70 72 65 66 69 78 3b 20 20 20 20 20 20 20  r prefix;       
29f0: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65 66 69          /* Prefi
2a00: 78 20 63 68 61 72 61 63 74 65 72 2e 20 20 22 2b  x character.  "+
2a10: 22 20 6f 72 20 22 2d 22 20 6f 72 20 22 20 22 20  " or "-" or " " 
2a20: 6f 72 20 27 5c 30 27 2e 20 2a 2f 0a 20 20 65 74  or '\0'. */.  et
2a30: 42 79 74 65 20 65 72 72 6f 72 66 6c 61 67 20 3d  Byte errorflag =
2a40: 20 30 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65   0;      /* True
2a50: 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20   if an error is 
2a60: 65 6e 63 6f 75 6e 74 65 72 65 64 20 2a 2f 0a 20  encountered */. 
2a70: 20 65 74 42 79 74 65 20 78 74 79 70 65 3b 20 20   etByte xtype;  
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
2a90: 6f 6e 76 65 72 73 69 6f 6e 20 70 61 72 61 64 69  onversion paradi
2aa0: 67 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  gm */.  char *zE
2ab0: 78 74 72 61 3b 20 20 20 20 20 20 20 20 20 20 20  xtra;           
2ac0: 20 20 20 2f 2a 20 45 78 74 72 61 20 6d 65 6d 6f     /* Extra memo
2ad0: 72 79 20 75 73 65 64 20 66 6f 72 20 65 74 54 43  ry used for etTC
2ae0: 4c 45 53 43 41 50 45 20 63 6f 6e 76 65 72 73 69  LESCAPE conversi
2af0: 6f 6e 73 20 2a 2f 0a 20 20 73 74 61 74 69 63 20  ons */.  static 
2b00: 63 6f 6e 73 74 20 63 68 61 72 20 73 70 61 63 65  const char space
2b10: 73 5b 5d 20 3d 0a 20 20 20 22 20 20 20 20 20 20  s[] =.   "      
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 20 22 3b 0a 23 64 65 66 69 6e 65 20 65 74     ";.#define et
2b70: 53 50 41 43 45 53 49 5a 45 20 28 73 69 7a 65 6f  SPACESIZE (sizeo
2b80: 66 28 73 70 61 63 65 73 29 2d 31 29 0a 20 20 69  f(spaces)-1).  i
2b90: 6e 74 20 20 65 78 70 2c 20 65 32 3b 20 20 20 20  nt  exp, e2;    
2ba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78 70            /* exp
2bb0: 6f 6e 65 6e 74 20 6f 66 20 72 65 61 6c 20 6e 75  onent of real nu
2bc0: 6d 62 65 72 73 20 2a 2f 0a 20 20 64 6f 75 62 6c  mbers */.  doubl
2bd0: 65 20 72 6f 75 6e 64 65 72 3b 20 20 20 20 20 20  e rounder;      
2be0: 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f        /* Used fo
2bf0: 72 20 72 6f 75 6e 64 69 6e 67 20 66 6c 6f 61 74  r rounding float
2c00: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73  ing point values
2c10: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
2c20: 67 5f 64 70 3b 20 20 20 20 20 20 20 20 20 20 20  g_dp;           
2c30: 20 2f 2a 20 54 72 75 65 20 69 66 20 64 65 63 69   /* True if deci
2c40: 6d 61 6c 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64  mal point should
2c50: 20 62 65 20 73 68 6f 77 6e 20 2a 2f 0a 20 20 65   be shown */.  e
2c60: 74 42 79 74 65 20 66 6c 61 67 5f 72 74 7a 3b 20  tByte flag_rtz; 
2c70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
2c80: 65 20 69 66 20 74 72 61 69 6c 69 6e 67 20 7a 65  e if trailing ze
2c90: 72 6f 73 20 73 68 6f 75 6c 64 20 62 65 20 72 65  ros should be re
2ca0: 6d 6f 76 65 64 20 2a 2f 0a 20 20 65 74 42 79 74  moved */.  etByt
2cb0: 65 20 66 6c 61 67 5f 65 78 70 3b 20 20 20 20 20  e flag_exp;     
2cc0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
2cd0: 20 66 6f 72 63 65 20 64 69 73 70 6c 61 79 20 6f   force display o
2ce0: 66 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 2a  f the exponent *
2cf0: 2f 0a 20 20 69 6e 74 20 6e 73 64 3b 20 20 20 20  /.  int nsd;    
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d10: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 69 67 6e  * Number of sign
2d20: 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 72  ificant digits r
2d30: 65 74 75 72 6e 65 64 20 2a 2f 0a 0a 20 20 63 6f  eturned */..  co
2d40: 75 6e 74 20 3d 20 6c 65 6e 67 74 68 20 3d 20 30  unt = length = 0
2d50: 3b 0a 20 20 62 75 66 70 74 20 3d 20 30 3b 0a 20  ;.  bufpt = 0;. 
2d60: 20 66 6f 72 28 3b 20 28 63 3d 28 2a 66 6d 74 29   for(; (c=(*fmt)
2d70: 29 21 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a 20 20  )!=0; ++fmt){.  
2d80: 20 20 69 66 28 20 63 21 3d 27 25 27 20 29 7b 0a    if( c!='%' ){.
2d90: 20 20 20 20 20 20 69 6e 74 20 61 6d 74 3b 0a 20        int amt;. 
2da0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 28 63 68       bufpt = (ch
2db0: 61 72 20 2a 29 66 6d 74 3b 0a 20 20 20 20 20 20  ar *)fmt;.      
2dc0: 61 6d 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 77  amt = 1;.      w
2dd0: 68 69 6c 65 28 20 28 63 3d 28 2a 2b 2b 66 6d 74  hile( (c=(*++fmt
2de0: 29 29 21 3d 27 25 27 20 26 26 20 63 21 3d 30 20  ))!='%' && c!=0 
2df0: 29 20 61 6d 74 2b 2b 3b 0a 20 20 20 20 20 20 62  ) amt++;.      b
2e00: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 42 6c 6f 62  lob_append(pBlob
2e10: 2c 62 75 66 70 74 2c 61 6d 74 29 3b 0a 20 20 20  ,bufpt,amt);.   
2e20: 20 20 20 63 6f 75 6e 74 20 2b 3d 20 61 6d 74 3b     count += amt;
2e30: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20  .      if( c==0 
2e40: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20  ) break;.    }. 
2e50: 20 20 20 69 66 28 20 28 63 3d 28 2a 2b 2b 66 6d     if( (c=(*++fm
2e60: 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t))==0 ){.      
2e70: 65 72 72 6f 72 66 6c 61 67 20 3d 20 31 3b 0a 20  errorflag = 1;. 
2e80: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64       blob_append
2e90: 28 70 42 6c 6f 62 2c 22 25 22 2c 31 29 3b 0a 20  (pBlob,"%",1);. 
2ea0: 20 20 20 20 20 63 6f 75 6e 74 2b 2b 3b 0a 20 20       count++;.  
2eb0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2ec0: 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 6f 75 74  .    /* Find out
2ed0: 20 77 68 61 74 20 66 6c 61 67 73 20 61 72 65 20   what flags are 
2ee0: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 20 20 66  present */.    f
2ef0: 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20  lag_leftjustify 
2f00: 3d 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20  = flag_plussign 
2f10: 3d 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e  = flag_blanksign
2f20: 20 3d 20 63 54 68 6f 75 73 61 6e 64 20 3d 0a 20   = cThousand =. 
2f30: 20 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61      flag_alterna
2f40: 74 65 66 6f 72 6d 20 3d 20 66 6c 61 67 5f 61 6c  teform = flag_al
2f50: 74 66 6f 72 6d 32 20 3d 20 66 6c 61 67 5f 7a 65  tform2 = flag_ze
2f60: 72 6f 70 61 64 20 3d 20 30 3b 0a 20 20 20 20 64  ropad = 0;.    d
2f70: 6f 6e 65 20 3d 20 30 3b 0a 20 20 20 20 64 6f 7b  one = 0;.    do{
2f80: 0a 20 20 20 20 20 20 73 77 69 74 63 68 28 20 63  .      switch( c
2f90: 20 29 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65   ){.        case
2fa0: 20 27 2d 27 3a 20 20 20 66 6c 61 67 5f 6c 65 66   '-':   flag_lef
2fb0: 74 6a 75 73 74 69 66 79 20 3d 20 31 3b 20 20 20  tjustify = 1;   
2fc0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2fd0: 20 63 61 73 65 20 27 2b 27 3a 20 20 20 66 6c 61   case '+':   fla
2fe0: 67 5f 70 6c 75 73 73 69 67 6e 20 3d 20 31 3b 20  g_plussign = 1; 
2ff0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
3000: 20 20 20 20 20 20 63 61 73 65 20 27 20 27 3a 20        case ' ': 
3010: 20 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e    flag_blanksign
3020: 20 3d 20 31 3b 20 20 20 20 20 20 20 62 72 65 61   = 1;       brea
3030: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
3040: 27 23 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 65  '#':   flag_alte
3050: 72 6e 61 74 65 66 6f 72 6d 20 3d 20 31 3b 20 20  rnateform = 1;  
3060: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
3070: 63 61 73 65 20 27 21 27 3a 20 20 20 66 6c 61 67  case '!':   flag
3080: 5f 61 6c 74 66 6f 72 6d 32 20 3d 20 31 3b 20 20  _altform2 = 1;  
3090: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
30a0: 20 20 20 20 20 63 61 73 65 20 27 30 27 3a 20 20       case '0':  
30b0: 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20   flag_zeropad = 
30c0: 31 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;         break
30d0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  ;.        case '
30e0: 2c 27 3a 20 20 20 63 54 68 6f 75 73 61 6e 64 20  ,':   cThousand 
30f0: 3d 20 27 2c 27 3b 20 20 20 20 20 20 20 20 20 20  = ',';          
3100: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 64  break;.        d
3110: 65 66 61 75 6c 74 3a 20 20 20 20 64 6f 6e 65 20  efault:    done 
3120: 3d 20 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 1;            
3130: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3140: 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c 65 28 20    }.    }while( 
3150: 21 64 6f 6e 65 20 26 26 20 28 63 3d 28 2a 2b 2b  !done && (c=(*++
3160: 66 6d 74 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  fmt))!=0 );.    
3170: 2f 2a 20 47 65 74 20 74 68 65 20 66 69 65 6c 64  /* Get the field
3180: 20 77 69 64 74 68 20 2a 2f 0a 20 20 20 20 77 69   width */.    wi
3190: 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  dth = 0;.    if(
31a0: 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20 20   c=='*' ){.     
31b0: 20 77 69 64 74 68 20 3d 20 76 61 5f 61 72 67 28   width = va_arg(
31c0: 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  ap,int);.      i
31d0: 66 28 20 77 69 64 74 68 3c 30 20 29 7b 0a 20 20  f( width<0 ){.  
31e0: 20 20 20 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a        flag_leftj
31f0: 75 73 74 69 66 79 20 3d 20 31 3b 0a 20 20 20 20  ustify = 1;.    
3200: 20 20 20 20 77 69 64 74 68 20 3d 20 2d 77 69 64      width = -wid
3210: 74 68 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  th;.      }.    
3220: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
3230: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 77    }else{.      w
3240: 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26 26 20  hile( c>='0' && 
3250: 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20 20 20  c<='9' ){.      
3260: 20 20 77 69 64 74 68 20 3d 20 77 69 64 74 68 2a    width = width*
3270: 31 30 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20  10 + c - '0';.  
3280: 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74        c = *++fmt
3290: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
32a0: 20 20 20 20 69 66 28 20 77 69 64 74 68 20 3e 20      if( width > 
32b0: 65 74 42 55 46 53 49 5a 45 2d 31 30 20 29 7b 0a  etBUFSIZE-10 ){.
32c0: 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 65 74        width = et
32d0: 42 55 46 53 49 5a 45 2d 31 30 3b 0a 20 20 20 20  BUFSIZE-10;.    
32e0: 7d 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65  }.    /* Get the
32f0: 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20   precision */.  
3300: 20 20 69 66 28 20 63 3d 3d 27 2e 27 20 29 7b 0a    if( c=='.' ){.
3310: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
3320: 3d 20 30 3b 0a 20 20 20 20 20 20 63 20 3d 20 2a  = 0;.      c = *
3330: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 69 66 28  ++fmt;.      if(
3340: 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20 20   c=='*' ){.     
3350: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 76     precision = v
3360: 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20  a_arg(ap,int);. 
3370: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
3380: 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69 73 69  sion<0 ) precisi
3390: 6f 6e 20 3d 20 2d 70 72 65 63 69 73 69 6f 6e 3b  on = -precision;
33a0: 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b  .        c = *++
33b0: 66 6d 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  fmt;.      }else
33c0: 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  {.        while(
33d0: 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39   c>='0' && c<='9
33e0: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ' ){.          p
33f0: 72 65 63 69 73 69 6f 6e 20 3d 20 70 72 65 63 69  recision = preci
3400: 73 69 6f 6e 2a 31 30 20 2b 20 63 20 2d 20 27 30  sion*10 + c - '0
3410: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d  ';.          c =
3420: 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 20   *++fmt;.       
3430: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
3440: 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 72 65 63  else{.      prec
3450: 69 73 69 6f 6e 20 3d 20 2d 31 3b 0a 20 20 20 20  ision = -1;.    
3460: 7d 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65  }.    /* Get the
3470: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70 65   conversion type
3480: 20 6d 6f 64 69 66 69 65 72 20 2a 2f 0a 20 20 20   modifier */.   
3490: 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20   if( c=='l' ){. 
34a0: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d       flag_long =
34b0: 20 31 3b 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b   1;.      c = *+
34c0: 2b 66 6d 74 3b 0a 20 20 20 20 20 20 69 66 28 20  +fmt;.      if( 
34d0: 63 3d 3d 27 6c 27 20 29 7b 0a 20 20 20 20 20 20  c=='l' ){.      
34e0: 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20    flag_longlong 
34f0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 63 20 3d  = 1;.        c =
3500: 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d   *++fmt;.      }
3510: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 66 6c  else{.        fl
3520: 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b  ag_longlong = 0;
3530: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
3540: 73 65 7b 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c  se{.      flag_l
3550: 6f 6e 67 20 3d 20 66 6c 61 67 5f 6c 6f 6e 67 6c  ong = flag_longl
3560: 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  ong = 0;.    }. 
3570: 20 20 20 2f 2a 20 46 65 74 63 68 20 74 68 65 20     /* Fetch the 
3580: 69 6e 66 6f 20 65 6e 74 72 79 20 66 6f 72 20 74  info entry for t
3590: 68 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 20 20  he field */.    
35a0: 69 6e 66 6f 70 20 3d 20 30 3b 0a 20 20 20 20 78  infop = 0;.    x
35b0: 74 79 70 65 20 3d 20 65 74 45 52 52 4f 52 3b 0a  type = etERROR;.
35c0: 20 20 20 20 66 6f 72 28 69 64 78 3d 30 3b 20 69      for(idx=0; i
35d0: 64 78 3c 65 74 4e 49 4e 46 4f 3b 20 69 64 78 2b  dx<etNINFO; idx+
35e0: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 63 3d  +){.      if( c=
35f0: 3d 66 6d 74 69 6e 66 6f 5b 69 64 78 5d 2e 66 6d  =fmtinfo[idx].fm
3600: 74 74 79 70 65 20 29 7b 0a 20 20 20 20 20 20 20  ttype ){.       
3610: 20 69 6e 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66   infop = &fmtinf
3620: 6f 5b 69 64 78 5d 3b 0a 20 20 20 20 20 20 20 20  o[idx];.        
3630: 78 74 79 70 65 20 3d 20 69 6e 66 6f 70 2d 3e 74  xtype = infop->t
3640: 79 70 65 3b 0a 20 20 20 20 20 20 20 20 62 72 65  ype;.        bre
3650: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
3660: 7d 0a 20 20 20 20 7a 45 78 74 72 61 20 3d 20 30  }.    zExtra = 0
3670: 3b 0a 0a 20 20 20 20 2f 2a 20 4c 69 6d 69 74 20  ;..    /* Limit 
3680: 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20 74 6f  the precision to
3690: 20 70 72 65 76 65 6e 74 20 6f 76 65 72 66 6c 6f   prevent overflo
36a0: 77 69 6e 67 20 62 75 66 5b 5d 20 64 75 72 69 6e  wing buf[] durin
36b0: 67 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a  g conversion */.
36c0: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
36d0: 6e 3e 65 74 42 55 46 53 49 5a 45 2d 34 30 20 26  n>etBUFSIZE-40 &
36e0: 26 20 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20  & (infop->flags 
36f0: 26 20 46 4c 41 47 5f 53 54 52 49 4e 47 29 3d 3d  & FLAG_STRING)==
3700: 30 20 29 7b 0a 20 20 20 20 20 20 70 72 65 63 69  0 ){.      preci
3710: 73 69 6f 6e 20 3d 20 65 74 42 55 46 53 49 5a 45  sion = etBUFSIZE
3720: 2d 34 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  -40;.    }..    
3730: 2f 2a 0a 20 20 20 20 2a 2a 20 41 74 20 74 68 69  /*.    ** At thi
3740: 73 20 70 6f 69 6e 74 2c 20 76 61 72 69 61 62 6c  s point, variabl
3750: 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
3760: 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  ed as follows:. 
3770: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20 66     **.    **   f
3780: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
3790: 6d 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20  m          TRUE 
37a0: 69 66 20 61 20 27 23 27 20 69 73 20 70 72 65 73  if a '#' is pres
37b0: 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c  ent..    **   fl
37c0: 61 67 5f 61 6c 74 66 6f 72 6d 32 20 20 20 20 20  ag_altform2     
37d0: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69            TRUE i
37e0: 66 20 61 20 27 21 27 20 69 73 20 70 72 65 73 65  f a '!' is prese
37f0: 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  nt..    **   fla
3800: 67 5f 70 6c 75 73 73 69 67 6e 20 20 20 20 20 20  g_plussign      
3810: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
3820: 20 61 20 27 2b 27 20 69 73 20 70 72 65 73 65 6e   a '+' is presen
3830: 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67  t..    **   flag
3840: 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 20 20 20  _leftjustify    
3850: 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20          TRUE if 
3860: 61 20 27 2d 27 20 69 73 20 70 72 65 73 65 6e 74  a '-' is present
3870: 20 6f 72 20 69 66 20 74 68 65 0a 20 20 20 20 2a   or if the.    *
3880: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a0: 66 69 65 6c 64 20 77 69 64 74 68 20 77 61 73 20  field width was 
38b0: 6e 65 67 61 74 69 76 65 2e 0a 20 20 20 20 2a 2a  negative..    **
38c0: 20 20 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20     flag_zeropad 
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
38e0: 52 55 45 20 69 66 20 74 68 65 20 77 69 64 74 68  RUE if the width
38f0: 20 62 65 67 61 6e 20 77 69 74 68 20 30 2e 0a 20   began with 0.. 
3900: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f 6e     **   flag_lon
3910: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
3920: 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20      TRUE if the 
3930: 6c 65 74 74 65 72 20 27 6c 27 20 28 65 6c 6c 29  letter 'l' (ell)
3940: 20 70 72 65 66 69 78 65 64 0a 20 20 20 20 2a 2a   prefixed.    **
3950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3970: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68  he conversion ch
3980: 61 72 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a 20  aracter..    ** 
3990: 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20    flag_longlong 
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
39b0: 55 45 20 69 66 20 74 68 65 20 6c 65 74 74 65 72  UE if the letter
39c0: 20 27 6c 6c 27 20 28 65 6c 6c 20 65 6c 6c 29 20   'll' (ell ell) 
39d0: 70 72 65 66 69 78 65 64 0a 20 20 20 20 2a 2a 20  prefixed.    ** 
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
3a00: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68 61  e conversion cha
3a10: 72 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a 20 20  racter..    **  
3a20: 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20   flag_blanksign 
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55               TRU
3a40: 45 20 69 66 20 61 20 27 20 27 20 69 73 20 70 72  E if a ' ' is pr
3a50: 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20  esent..    **   
3a60: 77 69 64 74 68 20 20 20 20 20 20 20 20 20 20 20  width           
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20              The 
3a80: 73 70 65 63 69 66 69 65 64 20 66 69 65 6c 64 20  specified field 
3a90: 77 69 64 74 68 2e 20 20 54 68 69 73 20 69 73 0a  width.  This is.
3aa0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ac0: 20 20 20 20 20 61 6c 77 61 79 73 20 6e 6f 6e 2d       always non-
3ad0: 6e 65 67 61 74 69 76 65 2e 20 20 5a 65 72 6f 20  negative.  Zero 
3ae0: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  is the default..
3af0: 20 20 20 20 2a 2a 20 20 20 70 72 65 63 69 73 69      **   precisi
3b00: 6f 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  on              
3b10: 20 20 20 20 20 54 68 65 20 73 70 65 63 69 66 69       The specifi
3b20: 65 64 20 70 72 65 63 69 73 69 6f 6e 2e 20 20 54  ed precision.  T
3b30: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 20 20 2a  he default.    *
3b40: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 69 73 20 2d 31 2e 0a 20 20 20 20 2a 2a 20 20 20  is -1..    **   
3b70: 78 74 79 70 65 20 20 20 20 20 20 20 20 20 20 20  xtype           
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20              The 
3b90: 63 6c 61 73 73 20 6f 66 20 74 68 65 20 63 6f 6e  class of the con
3ba0: 76 65 72 73 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  version..    ** 
3bb0: 20 20 69 6e 66 6f 70 20 20 20 20 20 20 20 20 20    infop         
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 6f                Po
3bd0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 70 70  inter to the app
3be0: 72 6f 70 72 69 61 74 65 20 69 6e 66 6f 20 73 74  ropriate info st
3bf0: 72 75 63 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ruct..    */.   
3c00: 20 73 77 69 74 63 68 28 20 78 74 79 70 65 20 29   switch( xtype )
3c10: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 50  {.      case etP
3c20: 4f 49 4e 54 45 52 3a 0a 20 20 20 20 20 20 20 20  OINTER:.        
3c30: 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20  flag_longlong = 
3c40: 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d 73  sizeof(char*)==s
3c50: 69 7a 65 6f 66 28 69 36 34 29 3b 0a 20 20 20 20  izeof(i64);.    
3c60: 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20      flag_long = 
3c70: 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d 73  sizeof(char*)==s
3c80: 69 7a 65 6f 66 28 6c 6f 6e 67 20 69 6e 74 29 3b  izeof(long int);
3c90: 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 6c  .        /* Fall
3ca0: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 74 68   through into th
3cb0: 65 20 6e 65 78 74 20 63 61 73 65 20 2a 2f 0a 20  e next case */. 
3cc0: 20 20 20 20 20 63 61 73 65 20 65 74 52 41 44 49       case etRADI
3cd0: 58 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  X:.        if( i
3ce0: 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 4c  nfop->flags & FL
3cf0: 41 47 5f 53 49 47 4e 45 44 20 29 7b 0a 20 20 20  AG_SIGNED ){.   
3d00: 20 20 20 20 20 20 20 69 36 34 20 76 3b 0a 20 20         i64 v;.  
3d10: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
3d20: 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 20 20 20 76 20  _longlong )   v 
3d30: 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 36 34 29  = va_arg(ap,i64)
3d40: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ;.          else
3d50: 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29   if( flag_long )
3d60: 20 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c    v = va_arg(ap,
3d70: 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20  long int);.     
3d80: 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20 20       else       
3d90: 20 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76             v = v
3da0: 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20  a_arg(ap,int);. 
3db0: 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 30           if( v<0
3dc0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
3dd0: 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 2d 76 3b 0a  longvalue = -v;.
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 66              pref
3df0: 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20  ix = '-';.      
3e00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3e10: 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65         longvalue
3e20: 20 3d 20 76 3b 0a 20 20 20 20 20 20 20 20 20 20   = v;.          
3e30: 20 20 69 66 28 20 66 6c 61 67 5f 70 6c 75 73 73    if( flag_pluss
3e40: 69 67 6e 20 29 20 20 20 20 20 20 20 20 70 72 65  ign )        pre
3e50: 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20  fix = '+';.     
3e60: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20         else if( 
3e70: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29  flag_blanksign )
3e80: 20 20 70 72 65 66 69 78 20 3d 20 27 20 27 3b 0a    prefix = ' ';.
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20         prefix = 
3ec0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  0;.          }. 
3ed0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
3ee0: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
3ef0: 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 20 20 20 6c 6f  _longlong )   lo
3f00: 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67  ngvalue = va_arg
3f10: 28 61 70 2c 75 36 34 29 3b 0a 20 20 20 20 20 20  (ap,u64);.      
3f20: 20 20 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61      else if( fla
3f30: 67 5f 6c 6f 6e 67 20 29 20 20 6c 6f 6e 67 76 61  g_long )  longva
3f40: 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  lue = va_arg(ap,
3f50: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 6e  unsigned long in
3f60: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c  t);.          el
3f70: 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  se              
3f80: 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20      longvalue = 
3f90: 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 6e  va_arg(ap,unsign
3fa0: 65 64 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ed int);.       
3fb0: 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20     prefix = 0;. 
3fc0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3fd0: 20 69 66 28 20 6c 6f 6e 67 76 61 6c 75 65 3d 3d   if( longvalue==
3fe0: 30 20 29 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61  0 ) flag_alterna
3ff0: 74 65 66 6f 72 6d 20 3d 20 30 3b 0a 20 20 20 20  teform = 0;.    
4000: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 7a 65 72      if( flag_zer
4010: 6f 70 61 64 20 26 26 20 70 72 65 63 69 73 69 6f  opad && precisio
4020: 6e 3c 77 69 64 74 68 2d 28 70 72 65 66 69 78 21  n<width-(prefix!
4030: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  =0) ){.         
4040: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 77 69 64   precision = wid
4050: 74 68 2d 28 70 72 65 66 69 78 21 3d 30 29 3b 0a  th-(prefix!=0);.
4060: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4070: 20 20 62 75 66 70 74 20 3d 20 26 62 75 66 5b 65    bufpt = &buf[e
4080: 74 42 55 46 53 49 5a 45 2d 31 5d 3b 0a 20 20 20  tBUFSIZE-1];.   
4090: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
40a0: 20 72 65 67 69 73 74 65 72 20 63 6f 6e 73 74 20   register const 
40b0: 63 68 61 72 20 2a 63 73 65 74 3b 20 20 20 20 20  char *cset;     
40c0: 20 2f 2a 20 55 73 65 20 72 65 67 69 73 74 65 72   /* Use register
40d0: 73 20 66 6f 72 20 73 70 65 65 64 20 2a 2f 0a 20  s for speed */. 
40e0: 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65           registe
40f0: 72 20 69 6e 74 20 62 61 73 65 3b 0a 20 20 20 20  r int base;.    
4100: 20 20 20 20 20 20 63 73 65 74 20 3d 20 26 61 44        cset = &aD
4110: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
4120: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
4130: 20 62 61 73 65 20 3d 20 69 6e 66 6f 70 2d 3e 62   base = infop->b
4140: 61 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 64  ase;.          d
4150: 6f 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o{              
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4180: 43 6f 6e 76 65 72 74 20 74 6f 20 61 73 63 69 69  Convert to ascii
4190: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
41a0: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 63 73 65  *(--bufpt) = cse
41b0: 74 5b 6c 6f 6e 67 76 61 6c 75 65 25 62 61 73 65  t[longvalue%base
41c0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  ];.            l
41d0: 6f 6e 67 76 61 6c 75 65 20 3d 20 6c 6f 6e 67 76  ongvalue = longv
41e0: 61 6c 75 65 2f 62 61 73 65 3b 0a 20 20 20 20 20  alue/base;.     
41f0: 20 20 20 20 20 7d 77 68 69 6c 65 28 20 6c 6f 6e       }while( lon
4200: 67 76 61 6c 75 65 3e 30 20 29 3b 0a 20 20 20 20  gvalue>0 );.    
4210: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65      }.        le
4220: 6e 67 74 68 20 3d 20 26 62 75 66 5b 65 74 42 55  ngth = &buf[etBU
4230: 46 53 49 5a 45 2d 31 5d 2d 62 75 66 70 74 3b 0a  FSIZE-1]-bufpt;.
4240: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 70          while( p
4250: 72 65 63 69 73 69 6f 6e 3e 6c 65 6e 67 74 68 20  recision>length 
4260: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 2d  ){.          *(-
4270: 2d 62 75 66 70 74 29 20 3d 20 27 30 27 3b 20 20  -bufpt) = '0';  
4280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65             /* Ze
42a0: 72 6f 20 70 61 64 20 2a 2f 0a 20 20 20 20 20 20  ro pad */.      
42b0: 20 20 20 20 6c 65 6e 67 74 68 2b 2b 3b 0a 20 20      length++;.  
42c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
42d0: 69 66 28 20 63 54 68 6f 75 73 61 6e 64 20 29 7b  if( cThousand ){
42e0: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
42f0: 6e 20 3d 20 28 6c 65 6e 67 74 68 20 2d 20 31 29  n = (length - 1)
4300: 2f 33 3b 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  /3;  /* Number o
4310: 66 20 22 2c 22 20 74 6f 20 69 6e 73 65 72 74 20  f "," to insert 
4320: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  */.          int
4330: 20 69 78 20 3d 20 28 6c 65 6e 67 74 68 20 2d 20   ix = (length - 
4340: 31 29 25 33 20 2b 20 31 3b 0a 20 20 20 20 20 20  1)%3 + 1;.      
4350: 20 20 20 20 62 75 66 70 74 20 2d 3d 20 6e 6e 3b      bufpt -= nn;
4360: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69  .          for(i
4370: 64 78 3d 30 3b 20 6e 6e 3e 30 3b 20 69 64 78 2b  dx=0; nn>0; idx+
4380: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
4390: 62 75 66 70 74 5b 69 64 78 5d 20 3d 20 62 75 66  bufpt[idx] = buf
43a0: 70 74 5b 69 64 78 2b 6e 6e 5d 3b 0a 20 20 20 20  pt[idx+nn];.    
43b0: 20 20 20 20 20 20 20 20 69 78 2d 2d 3b 0a 20 20          ix--;.  
43c0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 78            if( ix
43d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
43e0: 20 20 20 20 20 62 75 66 70 74 5b 2b 2b 69 64 78       bufpt[++idx
43f0: 5d 20 3d 20 63 54 68 6f 75 73 61 6e 64 3b 0a 20  ] = cThousand;. 
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6e 2d               nn-
4410: 2d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  -;.             
4420: 20 69 78 20 3d 20 33 3b 0a 20 20 20 20 20 20 20   ix = 3;.       
4430: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
4440: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
4450: 20 20 20 20 20 69 66 28 20 70 72 65 66 69 78 20       if( prefix 
4460: 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 70  ) *(--bufpt) = p
4470: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
4480: 20 20 20 20 20 2f 2a 20 41 64 64 20 73 69 67 6e       /* Add sign
4490: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
44a0: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
44b0: 72 6d 20 26 26 20 69 6e 66 6f 70 2d 3e 70 72 65  rm && infop->pre
44c0: 66 69 78 20 29 7b 20 20 20 20 20 20 2f 2a 20 41  fix ){      /* A
44d0: 64 64 20 22 30 22 20 6f 72 20 22 30 78 22 20 2a  dd "0" or "0x" *
44e0: 2f 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73  /.          cons
44f0: 74 20 63 68 61 72 20 2a 70 72 65 3b 0a 20 20 20  t char *pre;.   
4500: 20 20 20 20 20 20 20 63 68 61 72 20 78 3b 0a 20         char x;. 
4510: 20 20 20 20 20 20 20 20 20 70 72 65 20 3d 20 26           pre = &
4520: 61 50 72 65 66 69 78 5b 69 6e 66 6f 70 2d 3e 70  aPrefix[infop->p
4530: 72 65 66 69 78 5d 3b 0a 20 20 20 20 20 20 20 20  refix];.        
4540: 20 20 69 66 28 20 2a 62 75 66 70 74 21 3d 70 72    if( *bufpt!=pr
4550: 65 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  e[0] ){.        
4560: 20 20 20 20 66 6f 72 28 3b 20 28 78 3d 28 2a 70      for(; (x=(*p
4570: 72 65 29 29 21 3d 30 3b 20 70 72 65 2b 2b 29 20  re))!=0; pre++) 
4580: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 78 3b 0a  *(--bufpt) = x;.
4590: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
45a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65      }.        le
45b0: 6e 67 74 68 20 3d 20 26 62 75 66 5b 65 74 42 55  ngth = &buf[etBU
45c0: 46 53 49 5a 45 2d 31 5d 2d 62 75 66 70 74 3b 0a  FSIZE-1]-bufpt;.
45d0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
45e0: 20 20 20 20 20 63 61 73 65 20 65 74 46 4c 4f 41       case etFLOA
45f0: 54 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  T:.      case et
4600: 45 58 50 3a 0a 20 20 20 20 20 20 63 61 73 65 20  EXP:.      case 
4610: 65 74 47 45 4e 45 52 49 43 3a 0a 20 20 20 20 20  etGENERIC:.     
4620: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 76     realvalue = v
4630: 61 5f 61 72 67 28 61 70 2c 64 6f 75 62 6c 65 29  a_arg(ap,double)
4640: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  ;.        if( pr
4650: 65 63 69 73 69 6f 6e 3c 30 20 29 20 70 72 65 63  ecision<0 ) prec
4660: 69 73 69 6f 6e 20 3d 20 36 3b 20 20 20 20 20 20  ision = 6;      
4670: 20 20 20 2f 2a 20 53 65 74 20 64 65 66 61 75 6c     /* Set defaul
4680: 74 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20  t precision */. 
4690: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
46a0: 73 69 6f 6e 3e 65 74 42 55 46 53 49 5a 45 2f 32  sion>etBUFSIZE/2
46b0: 2d 31 30 20 29 20 70 72 65 63 69 73 69 6f 6e 20  -10 ) precision 
46c0: 3d 20 65 74 42 55 46 53 49 5a 45 2f 32 2d 31 30  = etBUFSIZE/2-10
46d0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  ;.        if( re
46e0: 61 6c 76 61 6c 75 65 3c 30 2e 30 20 29 7b 0a 20  alvalue<0.0 ){. 
46f0: 20 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c           realval
4700: 75 65 20 3d 20 2d 72 65 61 6c 76 61 6c 75 65 3b  ue = -realvalue;
4710: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69  .          prefi
4720: 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20 20  x = '-';.       
4730: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4740: 20 20 69 66 28 20 66 6c 61 67 5f 70 6c 75 73 73    if( flag_pluss
4750: 69 67 6e 20 29 20 20 20 20 20 20 20 20 20 20 70  ign )          p
4760: 72 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20  refix = '+';.   
4770: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20         else if( 
4780: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29  flag_blanksign )
4790: 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 20 27      prefix = ' '
47a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ;.          else
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
47d0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
47e0: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
47f0: 3d 3d 65 74 47 45 4e 45 52 49 43 20 26 26 20 70  ==etGENERIC && p
4800: 72 65 63 69 73 69 6f 6e 3e 30 20 29 20 70 72 65  recision>0 ) pre
4810: 63 69 73 69 6f 6e 2d 2d 3b 0a 23 69 66 20 30 0a  cision--;.#if 0.
4820: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 75 6e 64          /* Round
4830: 69 6e 67 20 77 6f 72 6b 73 20 6c 69 6b 65 20 42  ing works like B
4840: 53 44 20 77 68 65 6e 20 74 68 65 20 63 6f 6e 73  SD when the cons
4850: 74 61 6e 74 20 30 2e 34 39 39 39 20 69 73 20 75  tant 0.4999 is u
4860: 73 65 64 2e 20 20 57 69 65 72 64 21 20 2a 2f 0a  sed.  Wierd! */.
4870: 20 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d          for(idx=
4880: 70 72 65 63 69 73 69 6f 6e 2c 20 72 6f 75 6e 64  precision, round
4890: 65 72 3d 30 2e 34 39 39 39 3b 20 69 64 78 3e 30  er=0.4999; idx>0
48a0: 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 65 72  ; idx--, rounder
48b0: 2a 3d 30 2e 31 29 3b 0a 23 65 6c 73 65 0a 20 20  *=0.1);.#else.  
48c0: 20 20 20 20 20 20 2f 2a 20 49 74 20 6d 61 6b 65        /* It make
48d0: 73 20 6d 6f 72 65 20 73 65 6e 73 65 20 74 6f 20  s more sense to 
48e0: 75 73 65 20 30 2e 35 20 2a 2f 0a 20 20 20 20 20  use 0.5 */.     
48f0: 20 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69     for(idx=preci
4900: 73 69 6f 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e  sion, rounder=0.
4910: 35 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c  5; idx>0; idx--,
4920: 20 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29 3b 0a   rounder*=0.1);.
4930: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 69  #endif.        i
4940: 66 28 20 78 74 79 70 65 3d 3d 65 74 46 4c 4f 41  f( xtype==etFLOA
4950: 54 20 29 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d  T ) realvalue +=
4960: 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20 20   rounder;.      
4970: 20 20 2f 2a 20 4e 6f 72 6d 61 6c 69 7a 65 20 72    /* Normalize r
4980: 65 61 6c 76 61 6c 75 65 20 74 6f 20 77 69 74 68  ealvalue to with
4990: 69 6e 20 31 30 2e 30 20 3e 20 72 65 61 6c 76 61  in 10.0 > realva
49a0: 6c 75 65 20 3e 3d 20 31 2e 30 20 2a 2f 0a 20 20  lue >= 1.0 */.  
49b0: 20 20 20 20 20 20 65 78 70 20 3d 20 30 3b 0a 20        exp = 0;. 
49c0: 20 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76         if( realv
49d0: 61 6c 75 65 3e 30 2e 30 20 29 7b 0a 20 20 20 20  alue>0.0 ){.    
49e0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61        while( rea
49f0: 6c 76 61 6c 75 65 3e 3d 31 65 33 32 20 26 26 20  lvalue>=1e32 && 
4a00: 65 78 70 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c  exp<=350 ){ real
4a10: 76 61 6c 75 65 20 2a 3d 20 31 65 2d 33 32 3b 20  value *= 1e-32; 
4a20: 65 78 70 2b 3d 33 32 3b 20 7d 0a 20 20 20 20 20  exp+=32; }.     
4a30: 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c       while( real
4a40: 76 61 6c 75 65 3e 3d 31 65 38 20 26 26 20 65 78  value>=1e8 && ex
4a50: 70 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c 76 61  p<=350 ){ realva
4a60: 6c 75 65 20 2a 3d 20 31 65 2d 38 3b 20 65 78 70  lue *= 1e-8; exp
4a70: 2b 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20 20  +=8; }.         
4a80: 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75   while( realvalu
4a90: 65 3e 3d 31 30 2e 30 20 26 26 20 65 78 70 3c 3d  e>=10.0 && exp<=
4aa0: 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65  350 ){ realvalue
4ab0: 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20   *= 0.1; exp++; 
4ac0: 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  }.          whil
4ad0: 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31 65 2d  e( realvalue<1e-
4ae0: 38 20 26 26 20 65 78 70 3e 3d 2d 33 35 30 20 29  8 && exp>=-350 )
4af0: 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31  { realvalue *= 1
4b00: 65 38 3b 20 65 78 70 2d 3d 38 3b 20 7d 0a 20 20  e8; exp-=8; }.  
4b10: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72          while( r
4b20: 65 61 6c 76 61 6c 75 65 3c 31 2e 30 20 26 26 20  ealvalue<1.0 && 
4b30: 65 78 70 3e 3d 2d 33 35 30 20 29 7b 20 72 65 61  exp>=-350 ){ rea
4b40: 6c 76 61 6c 75 65 20 2a 3d 20 31 30 2e 30 3b 20  lvalue *= 10.0; 
4b50: 65 78 70 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20  exp--; }.       
4b60: 20 20 20 69 66 28 20 65 78 70 3e 33 35 30 20 7c     if( exp>350 |
4b70: 7c 20 65 78 70 3c 2d 33 35 30 20 29 7b 0a 20 20  | exp<-350 ){.  
4b80: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
4b90: 3d 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20 20 20  = "NaN";.       
4ba0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b       length = 3;
4bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
4bc0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
4bd0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4be0: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20    bufpt = buf;. 
4bf0: 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20         /*.      
4c00: 20 20 2a 2a 20 49 66 20 74 68 65 20 66 69 65 6c    ** If the fiel
4c10: 64 20 74 79 70 65 20 69 73 20 65 74 47 45 4e 45  d type is etGENE
4c20: 52 49 43 2c 20 74 68 65 6e 20 63 6f 6e 76 65 72  RIC, then conver
4c30: 74 20 74 6f 20 65 69 74 68 65 72 20 65 74 45 58  t to either etEX
4c40: 50 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20  P.        ** or 
4c50: 65 74 46 4c 4f 41 54 2c 20 61 73 20 61 70 70 72  etFLOAT, as appr
4c60: 6f 70 72 69 61 74 65 2e 0a 20 20 20 20 20 20 20  opriate..       
4c70: 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6c 61 67   */.        flag
4c80: 5f 65 78 70 20 3d 20 78 74 79 70 65 3d 3d 65 74  _exp = xtype==et
4c90: 45 58 50 3b 0a 20 20 20 20 20 20 20 20 69 66 28  EXP;.        if(
4ca0: 20 78 74 79 70 65 21 3d 65 74 46 4c 4f 41 54 20   xtype!=etFLOAT 
4cb0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61  ){.          rea
4cc0: 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65  lvalue += rounde
4cd0: 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  r;.          if(
4ce0: 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30   realvalue>=10.0
4cf0: 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d   ){ realvalue *=
4d00: 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20   0.1; exp++; }. 
4d10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4d20: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45   if( xtype==etGE
4d30: 4e 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 20  NERIC ){.       
4d40: 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 21 66     flag_rtz = !f
4d50: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
4d60: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  m;.          if(
4d70: 20 65 78 70 3c 2d 34 20 7c 7c 20 65 78 70 3e 70   exp<-4 || exp>p
4d80: 72 65 63 69 73 69 6f 6e 20 29 7b 0a 20 20 20 20  recision ){.    
4d90: 20 20 20 20 20 20 20 20 78 74 79 70 65 20 3d 20          xtype = 
4da0: 65 74 45 58 50 3b 0a 20 20 20 20 20 20 20 20 20  etEXP;.         
4db0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4dc0: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
4dd0: 70 72 65 63 69 73 69 6f 6e 20 2d 20 65 78 70 3b  precision - exp;
4de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 74 79  .            xty
4df0: 70 65 20 3d 20 65 74 46 4c 4f 41 54 3b 0a 20 20  pe = etFLOAT;.  
4e00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4e10: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
4e20: 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 30 3b     flag_rtz = 0;
4e30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4e40: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74     if( xtype==et
4e50: 45 58 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20  EXP ){.         
4e60: 20 65 32 20 3d 20 30 3b 0a 20 20 20 20 20 20 20   e2 = 0;.       
4e70: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4e80: 20 20 65 32 20 3d 20 65 78 70 3b 0a 20 20 20 20    e2 = exp;.    
4e90: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 73      }.        ns
4ea0: 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 66  d = 0;.        f
4eb0: 6c 61 67 5f 64 70 20 3d 20 28 70 72 65 63 69 73  lag_dp = (precis
4ec0: 69 6f 6e 3e 30 29 20 7c 20 66 6c 61 67 5f 61 6c  ion>0) | flag_al
4ed0: 74 65 72 6e 61 74 65 66 6f 72 6d 20 7c 20 66 6c  ternateform | fl
4ee0: 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20 20  ag_altform2;.   
4ef0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 69 67 6e       /* The sign
4f00: 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 74 68 65   in front of the
4f10: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
4f20: 20 20 20 69 66 28 20 70 72 65 66 69 78 20 29 7b     if( prefix ){
4f30: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66  .          *(buf
4f40: 70 74 2b 2b 29 20 3d 20 70 72 65 66 69 78 3b 0a  pt++) = prefix;.
4f50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4f60: 20 20 2f 2a 20 44 69 67 69 74 73 20 70 72 69 6f    /* Digits prio
4f70: 72 20 74 6f 20 74 68 65 20 64 65 63 69 6d 61 6c  r to the decimal
4f80: 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20   point */.      
4f90: 20 20 69 66 28 20 65 32 3c 30 20 29 7b 0a 20 20    if( e2<0 ){.  
4fa0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
4fb0: 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20  +) = '0';.      
4fc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
4fd0: 20 20 20 66 6f 72 28 3b 20 65 32 3e 3d 30 3b 20     for(; e2>=0; 
4fe0: 65 32 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20  e2--){.         
4ff0: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
5000: 65 74 5f 67 65 74 64 69 67 69 74 28 26 72 65 61  et_getdigit(&rea
5010: 6c 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20  lvalue,&nsd);.  
5020: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5030: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 54    }.        /* T
5040: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
5050: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
5060: 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20 20  flag_dp ){.     
5070: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
5080: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 7d  = '.';.        }
5090: 0a 20 20 20 20 20 20 20 20 2f 2a 20 22 30 22 20  .        /* "0" 
50a0: 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68 65  digits after the
50b0: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 62   decimal point b
50c0: 75 74 20 62 65 66 6f 72 65 20 74 68 65 20 66 69  ut before the fi
50d0: 72 73 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 73  rst.        ** s
50e0: 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74  ignificant digit
50f0: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a   of the number *
5100: 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 65 32  /.        for(e2
5110: 2b 2b 3b 20 65 32 3c 30 20 26 26 20 70 72 65 63  ++; e2<0 && prec
5120: 69 73 69 6f 6e 3e 30 3b 20 70 72 65 63 69 73 69  ision>0; precisi
5130: 6f 6e 2d 2d 2c 20 65 32 2b 2b 29 7b 0a 20 20 20  on--, e2++){.   
5140: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
5150: 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20  ) = '0';.       
5160: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69   }.        /* Si
5170: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
5180: 20 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d   after the decim
5190: 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20  al point */.    
51a0: 20 20 20 20 77 68 69 6c 65 28 20 28 70 72 65 63      while( (prec
51b0: 69 73 69 6f 6e 2d 2d 29 3e 30 20 29 7b 0a 20 20  ision--)>0 ){.  
51c0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
51d0: 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74  +) = et_getdigit
51e0: 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64  (&realvalue,&nsd
51f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
5200: 20 20 20 20 20 2f 2a 20 52 65 6d 6f 76 65 20 74       /* Remove t
5210: 72 61 69 6c 69 6e 67 20 7a 65 72 6f 73 20 61 6e  railing zeros an
5220: 64 20 74 68 65 20 22 2e 22 20 69 66 20 6e 6f 20  d the "." if no 
5230: 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 20 74 68  digits follow th
5240: 65 20 22 2e 22 20 2a 2f 0a 20 20 20 20 20 20 20  e "." */.       
5250: 20 69 66 28 20 66 6c 61 67 5f 72 74 7a 20 26 26   if( flag_rtz &&
5260: 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20   flag_dp ){.    
5270: 20 20 20 20 20 20 77 68 69 6c 65 28 20 62 75 66        while( buf
5280: 70 74 5b 2d 31 5d 3d 3d 27 30 27 20 29 20 2a 28  pt[-1]=='0' ) *(
5290: 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20 20  --bufpt) = 0;.  
52a0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
52b0: 62 75 66 70 74 3e 62 75 66 20 29 3b 0a 20 20 20  bufpt>buf );.   
52c0: 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70 74         if( bufpt
52d0: 5b 2d 31 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  [-1]=='.' ){.   
52e0: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
52f0: 67 5f 61 6c 74 66 6f 72 6d 32 20 29 7b 0a 20 20  g_altform2 ){.  
5300: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
5310: 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20  fpt++) = '0';.  
5320: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
5330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  .              *
5340: 28 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20  (--bufpt) = 0;. 
5350: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5360: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5370: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 64   }.        /* Ad
5380: 64 20 74 68 65 20 22 65 4e 4e 4e 22 20 73 75 66  d the "eNNN" suf
5390: 66 69 78 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  fix */.        i
53a0: 66 28 20 66 6c 61 67 5f 65 78 70 20 7c 7c 20 28  f( flag_exp || (
53b0: 78 74 79 70 65 3d 3d 65 74 45 58 50 20 26 26 20  xtype==etEXP && 
53c0: 65 78 70 29 20 29 7b 0a 20 20 20 20 20 20 20 20  exp) ){.        
53d0: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 61    *(bufpt++) = a
53e0: 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68  Digits[infop->ch
53f0: 61 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20  arset];.        
5400: 20 20 69 66 28 20 65 78 70 3c 30 20 29 7b 0a 20    if( exp<0 ){. 
5410: 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66             *(buf
5420: 70 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65 78 70  pt++) = '-'; exp
5430: 20 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20 20 20   = -exp;.       
5440: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5450: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
5460: 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20   = '+';.        
5470: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
5480: 28 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a 20 20  ( exp>=100 ){.  
5490: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
54a0: 74 2b 2b 29 20 3d 20 28 65 78 70 2f 31 30 30 29  t++) = (exp/100)
54b0: 2b 27 30 27 3b 20 20 20 20 20 20 20 20 20 20 20  +'0';           
54c0: 20 20 20 20 20 2f 2a 20 31 30 30 27 73 20 64 69       /* 100's di
54d0: 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  git */.         
54e0: 20 20 20 65 78 70 20 25 3d 20 31 30 30 3b 0a 20     exp %= 100;. 
54f0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
5500: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
5510: 3d 20 65 78 70 2f 31 30 2b 27 30 27 3b 20 20 20  = exp/10+'0';   
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5530: 20 20 2f 2a 20 31 30 27 73 20 64 69 67 69 74 20    /* 10's digit 
5540: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62  */.          *(b
5550: 75 66 70 74 2b 2b 29 20 3d 20 65 78 70 25 31 30  ufpt++) = exp%10
5560: 2b 27 30 27 3b 20 20 20 20 20 20 20 20 20 20 20  +'0';           
5570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 27 73            /* 1's
5580: 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20   digit */.      
5590: 20 20 7d 0a 20 20 20 20 20 20 20 20 2a 62 75 66    }.        *buf
55a0: 70 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20  pt = 0;..       
55b0: 20 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72 74 65   /* The converte
55c0: 64 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 62  d number is in b
55d0: 75 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20 74 65  uf[] and zero te
55e0: 72 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70 75 74  rminated. Output
55f0: 20 69 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20   it..        ** 
5600: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 6e 75  Note that the nu
5610: 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65 20 75  mber is in the u
5620: 73 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f 74 20  sual order, not 
5630: 72 65 76 65 72 73 65 64 20 61 73 20 77 69 74 68  reversed as with
5640: 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65  .        ** inte
5650: 67 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e  ger conversions.
5660: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65 6e 67   */.        leng
5670: 74 68 20 3d 20 62 75 66 70 74 2d 62 75 66 3b 0a  th = bufpt-buf;.
5680: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
5690: 62 75 66 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  buf;..        /*
56a0: 20 53 70 65 63 69 61 6c 20 63 61 73 65 3a 20 20   Special case:  
56b0: 41 64 64 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f  Add leading zero
56c0: 73 20 69 66 20 74 68 65 20 66 6c 61 67 5f 7a 65  s if the flag_ze
56d0: 72 6f 70 61 64 20 66 6c 61 67 20 69 73 0a 20 20  ropad flag is.  
56e0: 20 20 20 20 20 20 2a 2a 20 73 65 74 20 61 6e 64        ** set and
56f0: 20 77 65 20 61 72 65 20 6e 6f 74 20 6c 65 66 74   we are not left
5700: 20 6a 75 73 74 69 66 69 65 64 20 2a 2f 0a 20 20   justified */.  
5710: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 7a        if( flag_z
5720: 65 72 6f 70 61 64 20 26 26 20 21 66 6c 61 67 5f  eropad && !flag_
5730: 6c 65 66 74 6a 75 73 74 69 66 79 20 26 26 20 6c  leftjustify && l
5740: 65 6e 67 74 68 20 3c 20 77 69 64 74 68 29 7b 0a  ength < width){.
5750: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b            int i;
5760: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
5770: 50 61 64 20 3d 20 77 69 64 74 68 20 2d 20 6c 65  Pad = width - le
5780: 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20  ngth;.          
5790: 66 6f 72 28 69 3d 77 69 64 74 68 3b 20 69 3e 3d  for(i=width; i>=
57a0: 6e 50 61 64 3b 20 69 2d 2d 29 7b 0a 20 20 20 20  nPad; i--){.    
57b0: 20 20 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d          bufpt[i]
57c0: 20 3d 20 62 75 66 70 74 5b 69 2d 6e 50 61 64 5d   = bufpt[i-nPad]
57d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
57e0: 20 20 20 20 20 20 20 20 69 20 3d 20 70 72 65 66          i = pref
57f0: 69 78 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  ix!=0;.         
5800: 20 77 68 69 6c 65 28 20 6e 50 61 64 2d 2d 20 29   while( nPad-- )
5810: 20 62 75 66 70 74 5b 69 2b 2b 5d 20 3d 20 27 30   bufpt[i++] = '0
5820: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  ';.          len
5830: 67 74 68 20 3d 20 77 69 64 74 68 3b 0a 20 20 20  gth = width;.   
5840: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
5850: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
5860: 20 65 74 53 49 5a 45 3a 0a 20 20 20 20 20 20 20   etSIZE:.       
5870: 20 2a 28 76 61 5f 61 72 67 28 61 70 2c 69 6e 74   *(va_arg(ap,int
5880: 2a 29 29 20 3d 20 63 6f 75 6e 74 3b 0a 20 20 20  *)) = count;.   
5890: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69       length = wi
58a0: 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  dth = 0;.       
58b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
58c0: 73 65 20 65 74 50 45 52 43 45 4e 54 3a 0a 20 20  se etPERCENT:.  
58d0: 20 20 20 20 20 20 62 75 66 5b 30 5d 20 3d 20 27        buf[0] = '
58e0: 25 27 3b 0a 20 20 20 20 20 20 20 20 62 75 66 70  %';.        bufp
58f0: 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20  t = buf;.       
5900: 20 6c 65 6e 67 74 68 20 3d 20 31 3b 0a 20 20 20   length = 1;.   
5910: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5920: 20 20 63 61 73 65 20 65 74 43 48 41 52 58 3a 0a    case etCHARX:.
5930: 20 20 20 20 20 20 20 20 63 20 3d 20 62 75 66 5b          c = buf[
5940: 30 5d 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69  0] = va_arg(ap,i
5950: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
5960: 20 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b   precision>=0 ){
5970: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69  .          for(i
5980: 64 78 3d 31 3b 20 69 64 78 3c 70 72 65 63 69 73  dx=1; idx<precis
5990: 69 6f 6e 3b 20 69 64 78 2b 2b 29 20 62 75 66 5b  ion; idx++) buf[
59a0: 69 64 78 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20  idx] = c;.      
59b0: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 70 72 65      length = pre
59c0: 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20  cision;.        
59d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
59e0: 20 6c 65 6e 67 74 68 20 3d 31 3b 0a 20 20 20 20   length =1;.    
59f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75      }.        bu
5a00: 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20  fpt = buf;.     
5a10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5a20: 63 61 73 65 20 65 74 50 41 54 48 3a 20 7b 0a 20  case etPATH: {. 
5a30: 20 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20         int i;.  
5a40: 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20        int limit 
5a50: 3d 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65  = flag_alternate
5a60: 66 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70  form ? va_arg(ap
5a70: 2c 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20  ,int) : -1;.    
5a80: 20 20 20 20 63 68 61 72 20 2a 65 20 3d 20 76 61      char *e = va
5a90: 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a  _arg(ap,char*);.
5aa0: 20 20 20 20 20 20 20 20 69 66 28 20 65 3d 3d 30          if( e==0
5ab0: 20 29 7b 65 3d 22 22 3b 7d 0a 20 20 20 20 20 20   ){e="";}.      
5ac0: 20 20 6c 65 6e 67 74 68 20 3d 20 53 74 72 4e 4c    length = StrNL
5ad0: 65 6e 33 32 28 65 2c 20 6c 69 6d 69 74 29 3b 0a  en32(e, limit);.
5ae0: 20 20 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d          zExtra =
5af0: 20 62 75 66 70 74 20 3d 20 66 6f 73 73 69 6c 5f   bufpt = fossil_
5b00: 6d 61 6c 6c 6f 63 28 6c 65 6e 67 74 68 2b 31 29  malloc(length+1)
5b10: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 20 69  ;.        for( i
5b20: 3d 30 3b 20 69 3c 6c 65 6e 67 74 68 3b 20 69 2b  =0; i<length; i+
5b30: 2b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  + ){.          i
5b40: 66 28 20 65 5b 69 5d 3d 3d 27 5c 5c 27 20 29 7b  f( e[i]=='\\' ){
5b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66  .            buf
5b60: 70 74 5b 69 5d 3d 27 2f 27 3b 0a 20 20 20 20 20  pt[i]='/';.     
5b70: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5b80: 20 20 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d          bufpt[i]
5b90: 3d 65 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  =e[i];.         
5ba0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
5bb0: 20 20 20 20 20 62 75 66 70 74 5b 6c 65 6e 67 74       bufpt[lengt
5bc0: 68 5d 3d 27 5c 30 27 3b 0a 20 20 20 20 20 20 20  h]='\0';.       
5bd0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
5be0: 20 20 20 20 20 20 63 61 73 65 20 65 74 52 4f 4f        case etROO
5bf0: 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 62 75 66  T: {.        buf
5c00: 70 74 20 3d 20 67 2e 7a 54 6f 70 20 3f 20 67 2e  pt = g.zTop ? g.
5c10: 7a 54 6f 70 20 3a 20 22 22 3b 0a 20 20 20 20 20  zTop : "";.     
5c20: 20 20 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74     length = (int
5c30: 29 73 74 72 6c 65 6e 28 62 75 66 70 74 29 3b 0a  )strlen(bufpt);.
5c40: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
5c50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
5c60: 65 20 65 74 53 54 52 49 4e 47 49 44 3a 0a 20 20  e etSTRINGID:.  
5c70: 20 20 20 20 63 61 73 65 20 65 74 53 54 52 49 4e      case etSTRIN
5c80: 47 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  G:.      case et
5c90: 44 59 4e 53 54 52 49 4e 47 3a 20 7b 0a 20 20 20  DYNSTRING: {.   
5ca0: 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d       int limit =
5cb0: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
5cc0: 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c  orm ? va_arg(ap,
5cd0: 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20  int) : -1;.     
5ce0: 20 20 20 62 75 66 70 74 20 3d 20 76 61 5f 61 72     bufpt = va_ar
5cf0: 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20  g(ap,char*);.   
5d00: 20 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d       if( bufpt==
5d10: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  0 ){.          b
5d20: 75 66 70 74 20 3d 20 22 22 3b 0a 20 20 20 20 20  ufpt = "";.     
5d30: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 78 74 79     }else if( xty
5d40: 70 65 3d 3d 65 74 44 59 4e 53 54 52 49 4e 47 20  pe==etDYNSTRING 
5d50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 45 78  ){.          zEx
5d60: 74 72 61 20 3d 20 62 75 66 70 74 3b 0a 20 20 20  tra = bufpt;.   
5d70: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 78       }else if( x
5d80: 74 79 70 65 3d 3d 65 74 53 54 52 49 4e 47 49 44  type==etSTRINGID
5d90: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72   ){.          pr
5da0: 65 63 69 73 69 6f 6e 20 3d 20 68 61 73 68 44 69  ecision = hashDi
5db0: 67 69 74 73 28 66 6c 61 67 5f 61 6c 74 66 6f 72  gits(flag_altfor
5dc0: 6d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  m2);.        }. 
5dd0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
5de0: 53 74 72 4e 4c 65 6e 33 32 28 62 75 66 70 74 2c  StrNLen32(bufpt,
5df0: 20 6c 69 6d 69 74 29 3b 0a 20 20 20 20 20 20 20   limit);.       
5e00: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 3d   if( precision>=
5e10: 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 6c  0 && precision<l
5e20: 65 6e 67 74 68 20 29 20 6c 65 6e 67 74 68 20 3d  ength ) length =
5e30: 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20   precision;.    
5e40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
5e50: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74   }.      case et
5e60: 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20 20 20  BLOB: {.        
5e70: 69 6e 74 20 6c 69 6d 69 74 20 3d 20 66 6c 61 67  int limit = flag
5e80: 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3f  _alternateform ?
5e90: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
5ea0: 20 3a 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 42   : -1;.        B
5eb0: 6c 6f 62 20 2a 70 42 6c 6f 62 20 3d 20 76 61 5f  lob *pBlob = va_
5ec0: 61 72 67 28 61 70 2c 20 42 6c 6f 62 2a 29 3b 0a  arg(ap, Blob*);.
5ed0: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
5ee0: 62 6c 6f 62 5f 62 75 66 66 65 72 28 70 42 6c 6f  blob_buffer(pBlo
5ef0: 62 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67  b);.        leng
5f00: 74 68 20 3d 20 62 6c 6f 62 5f 73 69 7a 65 28 70  th = blob_size(p
5f10: 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 69  Blob);.        i
5f20: 66 28 20 6c 69 6d 69 74 3e 3d 30 20 26 26 20 6c  f( limit>=0 && l
5f30: 69 6d 69 74 3c 6c 65 6e 67 74 68 20 29 20 6c 65  imit<length ) le
5f40: 6e 67 74 68 20 3d 20 6c 69 6d 69 74 3b 0a 20 20  ngth = limit;.  
5f50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5f60: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
5f70: 65 74 42 4c 4f 42 53 51 4c 3a 20 7b 0a 20 20 20  etBLOBSQL: {.   
5f80: 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d       int limit =
5f90: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
5fa0: 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c  orm ? va_arg(ap,
5fb0: 20 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20   int) : -1;.    
5fc0: 20 20 20 20 42 6c 6f 62 20 2a 70 42 6c 6f 62 20      Blob *pBlob 
5fd0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 42 6c 6f  = va_arg(ap, Blo
5fe0: 62 2a 29 3b 0a 20 20 20 20 20 20 20 20 63 68 61  b*);.        cha
5ff0: 72 20 2a 7a 4f 72 69 67 20 3d 20 62 6c 6f 62 5f  r *zOrig = blob_
6000: 62 75 66 66 65 72 28 70 42 6c 6f 62 29 3b 0a 20  buffer(pBlob);. 
6010: 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c         int i, j,
6020: 20 6e 2c 20 63 6e 74 3b 0a 20 20 20 20 20 20 20   n, cnt;.       
6030: 20 6e 20 3d 20 62 6c 6f 62 5f 73 69 7a 65 28 70   n = blob_size(p
6040: 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 69  Blob);.        i
6050: 66 28 20 6c 69 6d 69 74 3e 3d 30 20 26 26 20 6c  f( limit>=0 && l
6060: 69 6d 69 74 3c 6e 20 29 20 6e 20 3d 20 6c 69 6d  imit<n ) n = lim
6070: 69 74 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  it;.        for(
6080: 63 6e 74 3d 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  cnt=i=0; i<n; i+
6090: 2b 29 7b 20 69 66 28 20 7a 4f 72 69 67 5b 69 5d  +){ if( zOrig[i]
60a0: 3d 3d 27 5c 27 27 20 29 20 63 6e 74 2b 2b 3b 20  =='\'' ) cnt++; 
60b0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 2b  }.        if( n+
60c0: 63 6e 74 2b 32 20 3e 20 65 74 42 55 46 53 49 5a  cnt+2 > etBUFSIZ
60d0: 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  E ){.          b
60e0: 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d 20  ufpt = zExtra = 
60f0: 66 6f 73 73 69 6c 5f 6d 61 6c 6c 6f 63 28 20 6e  fossil_malloc( n
6100: 20 2b 20 63 6e 74 20 2b 20 32 20 29 3b 0a 20 20   + cnt + 2 );.  
6110: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
6120: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62         bufpt = b
6130: 75 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  uf;.        }.  
6140: 20 20 20 20 20 20 62 75 66 70 74 5b 30 5d 20 3d        bufpt[0] =
6150: 20 27 5c 27 27 3b 0a 20 20 20 20 20 20 20 20 66   '\'';.        f
6160: 6f 72 28 69 3d 30 2c 20 6a 3d 31 3b 20 69 3c 6e  or(i=0, j=1; i<n
6170: 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20  ; i++, j++){.   
6180: 20 20 20 20 20 20 20 69 66 28 20 7a 4f 72 69 67         if( zOrig
6190: 5b 69 5d 3d 3d 27 5c 27 27 20 29 7b 20 62 75 66  [i]=='\'' ){ buf
61a0: 70 74 5b 6a 2b 2b 5d 20 3d 20 27 5c 27 27 3b 20  pt[j++] = '\''; 
61b0: 7d 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70  }.          bufp
61c0: 74 5b 6a 5d 20 3d 20 7a 4f 72 69 67 5b 69 5d 3b  t[j] = zOrig[i];
61d0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
61e0: 20 20 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20     bufpt[j++] = 
61f0: 27 5c 27 27 3b 0a 20 20 20 20 20 20 20 20 6c 65  '\'';.        le
6200: 6e 67 74 68 20 3d 20 6a 3b 0a 20 20 20 20 20 20  ngth = j;.      
6210: 20 20 61 73 73 65 72 74 28 20 6c 65 6e 67 74 68    assert( length
6220: 3d 3d 6e 2b 63 6e 74 2b 32 20 29 3b 0a 20 20 20  ==n+cnt+2 );.   
6230: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6240: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65    }.      case e
6250: 74 53 51 4c 45 53 43 41 50 45 3a 0a 20 20 20 20  tSQLESCAPE:.    
6260: 20 20 63 61 73 65 20 65 74 53 51 4c 45 53 43 41    case etSQLESCA
6270: 50 45 32 3a 0a 20 20 20 20 20 20 63 61 73 65 20  PE2:.      case 
6280: 65 74 53 51 4c 45 53 43 41 50 45 33 3a 20 7b 0a  etSQLESCAPE3: {.
6290: 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a          int i, j
62a0: 2c 20 6e 2c 20 63 68 2c 20 69 73 6e 75 6c 6c 3b  , n, ch, isnull;
62b0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 65 65  .        int nee
62c0: 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20  dQuote;.        
62d0: 69 6e 74 20 6c 69 6d 69 74 20 3d 20 66 6c 61 67  int limit = flag
62e0: 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3f  _alternateform ?
62f0: 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 20   va_arg(ap,int) 
6300: 3a 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 63 68  : -1;.        ch
6310: 61 72 20 71 20 3d 20 28 28 78 74 79 70 65 3d 3d  ar q = ((xtype==
6320: 65 74 53 51 4c 45 53 43 41 50 45 33 29 3f 27 22  etSQLESCAPE3)?'"
6330: 27 3a 27 5c 27 27 29 3b 20 20 2f 2a 20 51 75 6f  ':'\'');  /* Quo
6340: 74 65 20 63 68 61 72 61 63 74 65 72 73 20 2a 2f  te characters */
6350: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 65  .        char *e
6360: 73 63 61 72 67 20 3d 20 76 61 5f 61 72 67 28 61  scarg = va_arg(a
6370: 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20  p,char*);.      
6380: 20 20 69 73 6e 75 6c 6c 20 3d 20 65 73 63 61 72    isnull = escar
6390: 67 3d 3d 30 3b 0a 20 20 20 20 20 20 20 20 69 66  g==0;.        if
63a0: 28 20 69 73 6e 75 6c 6c 20 29 20 65 73 63 61 72  ( isnull ) escar
63b0: 67 20 3d 20 28 78 74 79 70 65 3d 3d 65 74 53 51  g = (xtype==etSQ
63c0: 4c 45 53 43 41 50 45 32 20 3f 20 22 4e 55 4c 4c  LESCAPE2 ? "NULL
63d0: 22 20 3a 20 22 28 4e 55 4c 4c 29 22 29 3b 0a 20  " : "(NULL)");. 
63e0: 20 20 20 20 20 20 20 69 66 28 20 6c 69 6d 69 74         if( limit
63f0: 3c 30 20 29 20 6c 69 6d 69 74 20 3d 20 73 74 72  <0 ) limit = str
6400: 6c 65 6e 28 65 73 63 61 72 67 29 3b 0a 20 20 20  len(escarg);.   
6410: 20 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20       for(i=n=0; 
6420: 69 3c 6c 69 6d 69 74 3b 20 69 2b 2b 29 7b 0a 20  i<limit; i++){. 
6430: 20 20 20 20 20 20 20 20 20 69 66 28 20 65 73 63           if( esc
6440: 61 72 67 5b 69 5d 3d 3d 71 20 29 20 20 6e 2b 2b  arg[i]==q )  n++
6450: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
6460: 20 20 20 20 6e 65 65 64 51 75 6f 74 65 20 3d 20      needQuote = 
6470: 21 69 73 6e 75 6c 6c 20 26 26 20 78 74 79 70 65  !isnull && xtype
6480: 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 32 3b 0a  ==etSQLESCAPE2;.
6490: 20 20 20 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b          n += i +
64a0: 20 31 20 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32   1 + needQuote*2
64b0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 3e  ;.        if( n>
64c0: 65 74 42 55 46 53 49 5a 45 20 29 7b 0a 20 20 20  etBUFSIZE ){.   
64d0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 7a         bufpt = z
64e0: 45 78 74 72 61 20 3d 20 66 6f 73 73 69 6c 5f 6d  Extra = fossil_m
64f0: 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20  alloc( n );.    
6500: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6510: 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66       bufpt = buf
6520: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
6530: 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20      j = 0;.     
6540: 20 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65     if( needQuote
6550: 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20   ) bufpt[j++] = 
6560: 71 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  q;.        for(i
6570: 3d 30 3b 20 69 3c 6c 69 6d 69 74 3b 20 69 2b 2b  =0; i<limit; i++
6580: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  ){.          buf
6590: 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68 20 3d 20 65  pt[j++] = ch = e
65a0: 73 63 61 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20  scarg[i];.      
65b0: 20 20 20 20 69 66 28 20 63 68 3d 3d 71 20 29 20      if( ch==q ) 
65c0: 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68 3b  bufpt[j++] = ch;
65d0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
65e0: 20 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65     if( needQuote
65f0: 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20   ) bufpt[j++] = 
6600: 71 3b 0a 20 20 20 20 20 20 20 20 62 75 66 70 74  q;.        bufpt
6610: 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  [j] = 0;.       
6620: 20 6c 65 6e 67 74 68 20 3d 20 6a 3b 0a 20 20 20   length = j;.   
6630: 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69       if( precisi
6640: 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73 69  on>=0 && precisi
6650: 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67  on<length ) leng
6660: 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a  th = precision;.
6670: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
6680: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
6690: 65 20 65 74 48 54 4d 4c 49 5a 45 3a 20 7b 0a 20  e etHTMLIZE: {. 
66a0: 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74         int limit
66b0: 20 3d 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74   = flag_alternat
66c0: 65 66 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61  eform ? va_arg(a
66d0: 70 2c 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20  p,int) : -1;.   
66e0: 20 20 20 20 20 63 68 61 72 20 2a 7a 4d 65 6d 20       char *zMem 
66f0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72  = va_arg(ap,char
6700: 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  *);.        if( 
6710: 7a 4d 65 6d 3d 3d 30 20 29 20 7a 4d 65 6d 20 3d  zMem==0 ) zMem =
6720: 20 22 22 3b 0a 20 20 20 20 20 20 20 20 7a 45 78   "";.        zEx
6730: 74 72 61 20 3d 20 62 75 66 70 74 20 3d 20 68 74  tra = bufpt = ht
6740: 6d 6c 69 7a 65 28 7a 4d 65 6d 2c 20 6c 69 6d 69  mlize(zMem, limi
6750: 74 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67  t);.        leng
6760: 74 68 20 3d 20 73 74 72 6c 65 6e 28 62 75 66 70  th = strlen(bufp
6770: 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
6780: 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20  precision>=0 && 
6790: 70 72 65 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68  precision<length
67a0: 20 29 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63   ) length = prec
67b0: 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 62  ision;.        b
67c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
67d0: 20 20 20 20 63 61 73 65 20 65 74 48 54 54 50 49      case etHTTPI
67e0: 5a 45 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e  ZE: {.        in
67f0: 74 20 6c 69 6d 69 74 20 3d 20 66 6c 61 67 5f 61  t limit = flag_a
6800: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3f 20 76  lternateform ? v
6810: 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 20 3a 20  a_arg(ap,int) : 
6820: 2d 31 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72  -1;.        char
6830: 20 2a 7a 4d 65 6d 20 3d 20 76 61 5f 61 72 67 28   *zMem = va_arg(
6840: 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  ap,char*);.     
6850: 20 20 20 69 66 28 20 7a 4d 65 6d 3d 3d 30 20 29     if( zMem==0 )
6860: 20 7a 4d 65 6d 20 3d 20 22 22 3b 0a 20 20 20 20   zMem = "";.    
6870: 20 20 20 20 7a 45 78 74 72 61 20 3d 20 62 75 66      zExtra = buf
6880: 70 74 20 3d 20 68 74 74 70 69 7a 65 28 7a 4d 65  pt = httpize(zMe
6890: 6d 2c 20 6c 69 6d 69 74 29 3b 0a 20 20 20 20 20  m, limit);.     
68a0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c     length = strl
68b0: 65 6e 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20  en(bufpt);.     
68c0: 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e     if( precision
68d0: 3e 3d 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e  >=0 && precision
68e0: 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67 74 68  <length ) length
68f0: 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20   = precision;.  
6900: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6910: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
6920: 65 74 55 52 4c 49 5a 45 3a 20 7b 0a 20 20 20 20  etURLIZE: {.    
6930: 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d 20      int limit = 
6940: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
6950: 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c 69  rm ? va_arg(ap,i
6960: 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20 20  nt) : -1;.      
6970: 20 20 63 68 61 72 20 2a 7a 4d 65 6d 20 3d 20 76    char *zMem = v
6980: 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b  a_arg(ap,char*);
6990: 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 4d 65  .        if( zMe
69a0: 6d 3d 3d 30 20 29 20 7a 4d 65 6d 20 3d 20 22 22  m==0 ) zMem = ""
69b0: 3b 0a 20 20 20 20 20 20 20 20 7a 45 78 74 72 61  ;.        zExtra
69c0: 20 3d 20 62 75 66 70 74 20 3d 20 75 72 6c 69 7a   = bufpt = urliz
69d0: 65 28 7a 4d 65 6d 2c 20 6c 69 6d 69 74 29 3b 0a  e(zMem, limit);.
69e0: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
69f0: 20 73 74 72 6c 65 6e 28 62 75 66 70 74 29 3b 0a   strlen(bufpt);.
6a00: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63          if( prec
6a10: 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63  ision>=0 && prec
6a20: 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c  ision<length ) l
6a30: 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f  ength = precisio
6a40: 6e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  n;.        break
6a50: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6a60: 63 61 73 65 20 65 74 46 4f 53 53 49 4c 49 5a 45  case etFOSSILIZE
6a70: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  : {.        int 
6a80: 6c 69 6d 69 74 20 3d 20 66 6c 61 67 5f 61 6c 74  limit = flag_alt
6a90: 65 72 6e 61 74 65 66 6f 72 6d 20 3f 20 76 61 5f  ernateform ? va_
6aa0: 61 72 67 28 61 70 2c 69 6e 74 29 20 3a 20 2d 31  arg(ap,int) : -1
6ab0: 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  ;.        char *
6ac0: 7a 4d 65 6d 20 3d 20 76 61 5f 61 72 67 28 61 70  zMem = va_arg(ap
6ad0: 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20  ,char*);.       
6ae0: 20 69 66 28 20 7a 4d 65 6d 3d 3d 30 20 29 20 7a   if( zMem==0 ) z
6af0: 4d 65 6d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  Mem = "";.      
6b00: 20 20 7a 45 78 74 72 61 20 3d 20 62 75 66 70 74    zExtra = bufpt
6b10: 20 3d 20 66 6f 73 73 69 6c 69 7a 65 28 7a 4d 65   = fossilize(zMe
6b20: 6d 2c 20 6c 69 6d 69 74 29 3b 0a 20 20 20 20 20  m, limit);.     
6b30: 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c     length = strl
6b40: 65 6e 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20  en(bufpt);.     
6b50: 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e     if( precision
6b60: 3e 3d 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e  >=0 && precision
6b70: 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67 74 68  <length ) length
6b80: 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20   = precision;.  
6b90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6ba0: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
6bb0: 65 74 57 49 4b 49 53 54 52 3a 20 7b 0a 20 20 20  etWIKISTR: {.   
6bc0: 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d       int limit =
6bd0: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
6be0: 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c  orm ? va_arg(ap,
6bf0: 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20  int) : -1;.     
6c00: 20 20 20 63 68 61 72 20 2a 7a 57 69 6b 69 20 3d     char *zWiki =
6c10: 20 76 61 5f 61 72 67 28 61 70 2c 20 63 68 61 72   va_arg(ap, char
6c20: 2a 29 3b 0a 20 20 20 20 20 20 20 20 42 6c 6f 62  *);.        Blob
6c30: 20 77 69 6b 69 3b 0a 20 20 20 20 20 20 20 20 62   wiki;.        b
6c40: 6c 6f 62 5f 69 6e 69 74 28 26 77 69 6b 69 2c 20  lob_init(&wiki, 
6c50: 7a 57 69 6b 69 2c 20 6c 69 6d 69 74 29 3b 0a 20  zWiki, limit);. 
6c60: 20 20 20 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76         wiki_conv
6c70: 65 72 74 28 26 77 69 6b 69 2c 20 70 42 6c 6f 62  ert(&wiki, pBlob
6c80: 2c 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 5f 66  , wiki_convert_f
6c90: 6c 61 67 73 28 66 6c 61 67 5f 61 6c 74 66 6f 72  lags(flag_altfor
6ca0: 6d 32 29 29 3b 0a 20 20 20 20 20 20 20 20 62 6c  m2));.        bl
6cb0: 6f 62 5f 72 65 73 65 74 28 26 77 69 6b 69 29 3b  ob_reset(&wiki);
6cc0: 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20  .        length 
6cd0: 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20  = width = 0;.   
6ce0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6cf0: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65    }.      case e
6d00: 74 45 52 52 4f 52 3a 0a 20 20 20 20 20 20 20 20  tERROR:.        
6d10: 62 75 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20  buf[0] = '%';.  
6d20: 20 20 20 20 20 20 62 75 66 5b 31 5d 20 3d 20 63        buf[1] = c
6d30: 3b 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72 66  ;.        errorf
6d40: 6c 61 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  lag = 0;.       
6d50: 20 69 64 78 20 3d 20 31 2b 28 63 21 3d 30 29 3b   idx = 1+(c!=0);
6d60: 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70  .        blob_ap
6d70: 70 65 6e 64 28 70 42 6c 6f 62 2c 22 25 22 2c 69  pend(pBlob,"%",i
6d80: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 75  dx);.        cou
6d90: 6e 74 20 2b 3d 20 69 64 78 3b 0a 20 20 20 20 20  nt += idx;.     
6da0: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20 66 6d     if( c==0 ) fm
6db0: 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 62 72 65  t--;.        bre
6dc0: 61 6b 3b 0a 20 20 20 20 7d 2f 2a 20 45 6e 64 20  ak;.    }/* End 
6dd0: 73 77 69 74 63 68 20 6f 76 65 72 20 74 68 65 20  switch over the 
6de0: 66 6f 72 6d 61 74 20 74 79 70 65 20 2a 2f 0a 20  format type */. 
6df0: 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 54 68 65     /*.    ** The
6e00: 20 74 65 78 74 20 6f 66 20 74 68 65 20 63 6f 6e   text of the con
6e10: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 69 6e 74  version is point
6e20: 65 64 20 74 6f 20 62 79 20 22 62 75 66 70 74 22  ed to by "bufpt"
6e30: 20 61 6e 64 20 69 73 0a 20 20 20 20 2a 2a 20 22   and is.    ** "
6e40: 6c 65 6e 67 74 68 22 20 63 68 61 72 61 63 74 65  length" characte
6e50: 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 66 69  rs long.  The fi
6e60: 65 6c 64 20 77 69 64 74 68 20 69 73 20 22 77 69  eld width is "wi
6e70: 64 74 68 22 2e 20 20 44 6f 0a 20 20 20 20 2a 2a  dth".  Do.    **
6e80: 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
6e90: 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 66 6c 61   */.    if( !fla
6ea0: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29 7b  g_leftjustify ){
6eb0: 0a 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20  .      register 
6ec0: 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20 20 20  int nspace;.    
6ed0: 20 20 6e 73 70 61 63 65 20 3d 20 77 69 64 74 68    nspace = width
6ee0: 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 69  -length;.      i
6ef0: 66 28 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a 20  f( nspace>0 ){. 
6f00: 20 20 20 20 20 20 20 63 6f 75 6e 74 20 2b 3d 20         count += 
6f10: 6e 73 70 61 63 65 3b 0a 20 20 20 20 20 20 20 20  nspace;.        
6f20: 77 68 69 6c 65 28 20 6e 73 70 61 63 65 3e 3d 65  while( nspace>=e
6f30: 74 53 50 41 43 45 53 49 5a 45 20 29 7b 0a 20 20  tSPACESIZE ){.  
6f40: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70          blob_app
6f50: 65 6e 64 28 70 42 6c 6f 62 2c 73 70 61 63 65 73  end(pBlob,spaces
6f60: 2c 65 74 53 50 41 43 45 53 49 5a 45 29 3b 0a 20  ,etSPACESIZE);. 
6f70: 20 20 20 20 20 20 20 20 20 6e 73 70 61 63 65 20           nspace 
6f80: 2d 3d 20 65 74 53 50 41 43 45 53 49 5a 45 3b 0a  -= etSPACESIZE;.
6f90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6fa0: 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29    if( nspace>0 )
6fb0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 42 6c   blob_append(pBl
6fc0: 6f 62 2c 73 70 61 63 65 73 2c 6e 73 70 61 63 65  ob,spaces,nspace
6fd0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
6fe0: 0a 20 20 20 20 69 66 28 20 6c 65 6e 67 74 68 3e  .    if( length>
6ff0: 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f  0 ){.      blob_
7000: 61 70 70 65 6e 64 28 70 42 6c 6f 62 2c 62 75 66  append(pBlob,buf
7010: 70 74 2c 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20  pt,length);.    
7020: 20 20 63 6f 75 6e 74 20 2b 3d 20 6c 65 6e 67 74    count += lengt
7030: 68 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  h;.    }.    if(
7040: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66   flag_leftjustif
7050: 79 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73  y ){.      regis
7060: 74 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a  ter int nspace;.
7070: 20 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77        nspace = w
7080: 69 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20  idth-length;.   
7090: 20 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20     if( nspace>0 
70a0: 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74  ){.        count
70b0: 20 2b 3d 20 6e 73 70 61 63 65 3b 0a 20 20 20 20   += nspace;.    
70c0: 20 20 20 20 77 68 69 6c 65 28 20 6e 73 70 61 63      while( nspac
70d0: 65 3e 3d 65 74 53 50 41 43 45 53 49 5a 45 20 29  e>=etSPACESIZE )
70e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62  {.          blob
70f0: 5f 61 70 70 65 6e 64 28 70 42 6c 6f 62 2c 73 70  _append(pBlob,sp
7100: 61 63 65 73 2c 65 74 53 50 41 43 45 53 49 5a 45  aces,etSPACESIZE
7110: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 73 70  );.          nsp
7120: 61 63 65 20 2d 3d 20 65 74 53 50 41 43 45 53 49  ace -= etSPACESI
7130: 5a 45 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ZE;.        }.  
7140: 20 20 20 20 20 20 69 66 28 20 6e 73 70 61 63 65        if( nspace
7150: 3e 30 20 29 20 62 6c 6f 62 5f 61 70 70 65 6e 64  >0 ) blob_append
7160: 28 70 42 6c 6f 62 2c 73 70 61 63 65 73 2c 6e 73  (pBlob,spaces,ns
7170: 70 61 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pace);.      }. 
7180: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 78     }.    if( zEx
7190: 74 72 61 20 29 7b 0a 20 20 20 20 20 20 66 6f 73  tra ){.      fos
71a0: 73 69 6c 5f 66 72 65 65 28 7a 45 78 74 72 61 29  sil_free(zExtra)
71b0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 2f 2a 20 45 6e  ;.    }.  }/* En
71c0: 64 20 66 6f 72 20 6c 6f 6f 70 20 6f 76 65 72 20  d for loop over 
71d0: 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  the format strin
71e0: 67 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 65 72  g */.  return er
71f0: 72 6f 72 66 6c 61 67 20 3f 20 2d 31 20 3a 20 63  rorflag ? -1 : c
7200: 6f 75 6e 74 3b 0a 7d 20 2f 2a 20 45 6e 64 20 6f  ount;.} /* End o
7210: 66 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  f function */../
7220: 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20  *.** Print into 
7230: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
7240: 66 72 6f 6d 20 66 6f 73 73 69 6c 5f 6d 61 6c 6c  from fossil_mall
7250: 6f 63 28 29 2e 0a 2a 2f 0a 63 68 61 72 20 2a 6d  oc()..*/.char *m
7260: 70 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  printf(const cha
7270: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
7280: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
7290: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f    char *z;.  va_
72a0: 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74  start(ap,zFormat
72b0: 29 3b 0a 20 20 7a 20 3d 20 76 6d 70 72 69 6e 74  );.  z = vmprint
72c0: 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  f(zFormat, ap);.
72d0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
72e0: 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 63 68 61 72  return z;.}.char
72f0: 20 2a 76 6d 70 72 69 6e 74 66 28 63 6f 6e 73 74   *vmprintf(const
7300: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
7310: 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 42  va_list ap){.  B
7320: 6c 6f 62 20 62 6c 6f 62 20 3d 20 65 6d 70 74 79  lob blob = empty
7330: 5f 62 6c 6f 62 3b 0a 20 20 62 6c 6f 62 5f 76 61  _blob;.  blob_va
7340: 70 70 65 6e 64 66 28 26 62 6c 6f 62 2c 20 7a 46  ppendf(&blob, zF
7350: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 62 6c  ormat, ap);.  bl
7360: 6f 62 5f 6d 61 74 65 72 69 61 6c 69 7a 65 28 26  ob_materialize(&
7370: 62 6c 6f 62 29 3b 0a 20 20 72 65 74 75 72 6e 20  blob);.  return 
7380: 62 6c 6f 62 2e 61 44 61 74 61 3b 0a 7d 0a 0a 2f  blob.aData;.}../
7390: 2a 0a 2a 2a 20 52 65 63 6f 72 64 20 61 6e 20 65  *.** Record an e
73a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 20  rror message in 
73b0: 74 68 65 20 67 6c 6f 62 61 6c 20 67 2e 7a 45 72  the global g.zEr
73c0: 72 4d 73 67 20 76 61 72 69 61 62 6c 65 2e 0a 2a  rMsg variable..*
73d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  *.** If there is
73e0: 20 61 6c 72 65 61 64 79 20 61 6e 6f 74 68 65 72   already another
73f0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20   error message, 
7400: 6f 6e 6c 79 20 6f 76 65 72 77 72 69 74 65 20 69  only overwrite i
7410: 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 75 72 72  t if.** the curr
7420: 65 6e 74 20 65 72 72 6f 72 20 68 61 73 20 61 20  ent error has a 
7430: 68 69 67 68 65 72 20 70 72 69 6f 72 69 74 79 2e  higher priority.
7440: 0a 2a 2f 0a 76 6f 69 64 20 66 6f 73 73 69 6c 5f  .*/.void fossil_
7450: 65 72 72 6f 72 28 69 6e 74 20 69 50 72 69 6f 72  error(int iPrior
7460: 69 74 79 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ity, const char 
7470: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
7480: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
7490: 69 66 28 20 69 50 72 69 6f 72 69 74 79 3c 3d 30  if( iPriority<=0
74a0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a   ){.    return;.
74b0: 20 20 7d 0a 20 20 69 66 28 20 67 2e 7a 45 72 72    }.  if( g.zErr
74c0: 4d 73 67 20 29 7b 0a 20 20 20 20 69 66 28 20 67  Msg ){.    if( g
74d0: 2e 69 45 72 72 50 72 69 6f 72 69 74 79 3e 3d 69  .iErrPriority>=i
74e0: 50 72 69 6f 72 69 74 79 20 29 7b 0a 20 20 20 20  Priority ){.    
74f0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a    return;.    }.
7500: 20 20 20 20 66 72 65 65 28 67 2e 7a 45 72 72 4d      free(g.zErrM
7510: 73 67 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 73 74  sg);.  }.  va_st
7520: 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29  art(ap, zFormat)
7530: 3b 0a 20 20 67 2e 7a 45 72 72 4d 73 67 20 3d 20  ;.  g.zErrMsg = 
7540: 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74  vmprintf(zFormat
7550: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
7560: 61 70 29 3b 0a 20 20 67 2e 69 45 72 72 50 72 69  ap);.  g.iErrPri
7570: 6f 72 69 74 79 20 3d 20 69 50 72 69 6f 72 69 74  ority = iPriorit
7580: 79 3b 0a 7d 0a 76 6f 69 64 20 66 6f 73 73 69 6c  y;.}.void fossil
7590: 5f 65 72 72 6f 72 5f 72 65 73 65 74 28 76 6f 69  _error_reset(voi
75a0: 64 29 7b 0a 20 20 66 72 65 65 28 67 2e 7a 45 72  d){.  free(g.zEr
75b0: 72 4d 73 67 29 3b 0a 20 20 67 2e 7a 45 72 72 4d  rMsg);.  g.zErrM
75c0: 73 67 20 3d 20 30 3b 0a 20 20 67 2e 69 45 72 72  sg = 0;.  g.iErr
75d0: 50 72 69 6f 72 69 74 79 20 3d 20 30 3b 0a 7d 0a  Priority = 0;.}.
75e0: 0a 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20  ./* True if the 
75f0: 6c 61 73 74 20 63 68 61 72 61 63 74 65 72 20 73  last character s
7600: 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 63  tandard output c
7610: 75 72 73 6f 72 20 69 73 20 73 65 74 74 69 6e 67  ursor is setting
7620: 20 61 74 0a 2a 2a 20 74 68 65 20 62 65 67 69 6e   at.** the begin
7630: 6e 69 6e 67 20 6f 66 20 61 20 62 6c 61 6e 6b 20  ning of a blank 
7640: 6c 69 6e 6b 2e 20 20 46 61 6c 73 65 20 69 66 20  link.  False if 
7650: 61 20 5c 72 20 68 61 73 20 62 65 65 6e 20 74 6f  a \r has been to
7660: 20 6d 6f 76 65 20 74 68 65 0a 2a 2a 20 63 75 72   move the.** cur
7670: 73 6f 72 20 74 6f 20 74 68 65 20 62 65 67 69 6e  sor to the begin
7680: 6e 69 6e 67 20 6f 66 20 74 68 65 20 6c 69 6e 65  ning of the line
7690: 20 6f 72 20 69 66 20 6e 6f 74 20 61 74 20 74 68   or if not at th
76a0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
76b0: 2a 20 61 20 6c 69 6e 65 2e 0a 2a 2a 20 77 61 73  * a line..** was
76c0: 20 61 20 5c 6e 0a 2a 2f 0a 73 74 61 74 69 63 20   a \n.*/.static 
76d0: 69 6e 74 20 73 74 64 6f 75 74 41 74 42 4f 4c 20  int stdoutAtBOL 
76e0: 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74  = 1;../*.** Writ
76f0: 65 20 74 6f 20 73 74 61 6e 64 61 72 64 20 6f 75  e to standard ou
7700: 74 70 75 74 20 6f 72 20 73 74 61 6e 64 61 72 64  tput or standard
7710: 20 65 72 72 6f 72 2e 0a 2a 2a 0a 2a 2a 20 4f 6e   error..**.** On
7720: 20 77 69 6e 64 6f 77 73 2c 20 74 72 61 6e 73 66   windows, transf
7730: 6f 72 6d 20 74 68 65 20 6f 75 74 70 75 74 20 69  orm the output i
7740: 6e 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20  nto the current 
7750: 74 65 72 6d 69 6e 61 6c 20 65 6e 63 6f 64 69 6e  terminal encodin
7760: 67 0a 2a 2a 20 69 66 20 74 68 65 20 6f 75 74 70  g.** if the outp
7770: 75 74 20 69 73 20 67 6f 69 6e 67 20 74 6f 20 74  ut is going to t
7780: 68 65 20 73 63 72 65 65 6e 2e 20 20 49 66 20 6f  he screen.  If o
7790: 75 74 70 75 74 20 69 73 20 72 65 64 69 72 65 63  utput is redirec
77a0: 74 65 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 66 69  ted into.** a fi
77b0: 6c 65 2c 20 6e 6f 20 74 72 61 6e 73 6c 61 74 69  le, no translati
77c0: 6f 6e 20 6f 63 63 75 72 73 2e 20 53 77 69 74 63  on occurs. Switc
77d0: 68 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  h output mode to
77e0: 20 62 69 6e 61 72 79 20 74 6f 0a 2a 2a 20 70 72   binary to.** pr
77f0: 6f 70 65 72 6c 79 20 70 72 6f 63 65 73 73 20 6c  operly process l
7800: 69 6e 65 2d 65 6e 64 69 6e 67 73 2c 20 6d 61 6b  ine-endings, mak
7810: 65 20 73 75 72 65 20 74 6f 20 73 77 69 74 63 68  e sure to switch
7820: 20 74 68 65 20 6d 6f 64 65 20 62 61 63 6b 20 74   the mode back t
7830: 6f 0a 2a 2a 20 74 65 78 74 20 77 68 65 6e 20 64  o.** text when d
7840: 6f 6e 65 2e 0a 2a 2a 20 4e 6f 20 74 72 61 6e 73  one..** No trans
7850: 6c 61 74 69 6f 6e 20 65 76 65 72 20 6f 63 63 75  lation ever occu
7860: 72 73 20 6f 6e 20 75 6e 69 78 2e 0a 2a 2f 0a 76  rs on unix..*/.v
7870: 6f 69 64 20 66 6f 73 73 69 6c 5f 70 75 74 73 28  oid fossil_puts(
7880: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
7890: 6e 74 20 74 6f 53 74 64 45 72 72 29 7b 0a 20 20  nt toStdErr){.  
78a0: 46 49 4c 45 2a 20 6f 75 74 20 3d 20 28 74 6f 53  FILE* out = (toS
78b0: 74 64 45 72 72 20 3f 20 73 74 64 65 72 72 20 3a  tdErr ? stderr :
78c0: 20 73 74 64 6f 75 74 29 3b 0a 20 20 69 6e 74 20   stdout);.  int 
78d0: 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  n = (int)strlen(
78e0: 7a 29 3b 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29  z);.  if( n==0 )
78f0: 20 72 65 74 75 72 6e 3b 0a 20 20 61 73 73 65 72   return;.  asser
7900: 74 28 20 74 6f 53 74 64 45 72 72 3d 3d 30 20 7c  t( toStdErr==0 |
7910: 7c 20 74 6f 53 74 64 45 72 72 3d 3d 31 20 29 3b  | toStdErr==1 );
7920: 0a 20 20 69 66 28 20 74 6f 53 74 64 45 72 72 3d  .  if( toStdErr=
7930: 3d 30 20 29 20 73 74 64 6f 75 74 41 74 42 4f 4c  =0 ) stdoutAtBOL
7940: 20 3d 20 28 7a 5b 6e 2d 31 5d 3d 3d 27 5c 6e 27   = (z[n-1]=='\n'
7950: 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  );.#if defined(_
7960: 57 49 4e 33 32 29 0a 20 20 69 66 28 20 66 6f 73  WIN32).  if( fos
7970: 73 69 6c 5f 75 74 66 38 5f 74 6f 5f 63 6f 6e 73  sil_utf8_to_cons
7980: 6f 6c 65 28 7a 2c 20 6e 2c 20 74 6f 53 74 64 45  ole(z, n, toStdE
7990: 72 72 29 20 3e 3d 20 30 20 29 7b 0a 20 20 20 20  rr) >= 0 ){.    
79a0: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 66 66  return;.  }.  ff
79b0: 6c 75 73 68 28 6f 75 74 29 3b 0a 20 20 5f 73 65  lush(out);.  _se
79c0: 74 6d 6f 64 65 28 5f 66 69 6c 65 6e 6f 28 6f 75  tmode(_fileno(ou
79d0: 74 29 2c 20 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a  t), _O_BINARY);.
79e0: 23 65 6e 64 69 66 0a 20 20 66 77 72 69 74 65 28  #endif.  fwrite(
79f0: 7a 2c 20 31 2c 20 6e 2c 20 6f 75 74 29 3b 0a 23  z, 1, n, out);.#
7a00: 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  if defined(_WIN3
7a10: 32 29 0a 20 20 66 66 6c 75 73 68 28 6f 75 74 29  2).  fflush(out)
7a20: 3b 0a 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69  ;.  _setmode(_fi
7a30: 6c 65 6e 6f 28 6f 75 74 29 2c 20 5f 4f 5f 54 45  leno(out), _O_TE
7a40: 58 54 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  XT);.#endif.}../
7a50: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 73  *.** Force the s
7a60: 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 63  tandard output c
7a70: 75 72 73 6f 72 20 74 6f 20 6d 6f 76 65 20 74 6f  ursor to move to
7a80: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a   the beginning.*
7a90: 2a 20 6f 66 20 61 20 6c 69 6e 65 2c 20 69 66 20  * of a line, if 
7aa0: 69 74 20 69 73 20 6e 6f 74 20 74 68 65 72 65 20  it is not there 
7ab0: 61 6c 72 65 61 64 79 2e 0a 2a 2f 0a 69 6e 74 20  already..*/.int 
7ac0: 66 6f 73 73 69 6c 5f 66 6f 72 63 65 5f 6e 65 77  fossil_force_new
7ad0: 6c 69 6e 65 28 76 6f 69 64 29 7b 0a 20 20 69 66  line(void){.  if
7ae0: 28 20 67 2e 63 67 69 4f 75 74 70 75 74 3d 3d 30  ( g.cgiOutput==0
7af0: 20 26 26 20 73 74 64 6f 75 74 41 74 42 4f 4c 3d   && stdoutAtBOL=
7b00: 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c  =0 ){.    fossil
7b10: 5f 70 75 74 73 28 22 5c 6e 22 2c 20 30 29 3b 0a  _puts("\n", 0);.
7b20: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
7b30: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
7b40: 0a 2f 2a 0a 2a 2a 20 49 6e 64 69 63 61 74 65 20  ./*.** Indicate 
7b50: 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20  that the cursor 
7b60: 68 61 73 20 6d 6f 76 65 64 20 74 6f 20 74 68 65  has moved to the
7b70: 20 73 74 61 72 74 20 6f 66 20 61 20 6c 69 6e 65   start of a line
7b80: 20 62 79 20 6d 65 61 6e 73 0a 2a 2a 20 6f 74 68   by means.** oth
7b90: 65 72 20 74 68 61 6e 20 77 72 69 74 69 6e 67 20  er than writing 
7ba0: 74 6f 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70  to standard outp
7bb0: 75 74 2e 0a 2a 2f 0a 76 6f 69 64 20 66 6f 73 73  ut..*/.void foss
7bc0: 69 6c 5f 6e 65 77 5f 6c 69 6e 65 5f 73 74 61 72  il_new_line_star
7bd0: 74 65 64 28 76 6f 69 64 29 7b 0a 20 20 73 74 64  ted(void){.  std
7be0: 6f 75 74 41 74 42 4f 4c 20 3d 20 31 3b 0a 7d 0a  outAtBOL = 1;.}.
7bf0: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 6f 75 74  ./*.** Write out
7c00: 70 75 74 20 66 6f 72 20 75 73 65 72 20 63 6f 6e  put for user con
7c10: 73 75 6d 70 74 69 6f 6e 2e 20 20 49 66 20 67 2e  sumption.  If g.
7c20: 63 67 69 4f 75 74 70 75 74 20 69 73 20 65 6e 61  cgiOutput is ena
7c30: 62 6c 65 64 2c 20 74 68 65 6e 0a 2a 2a 20 73 65  bled, then.** se
7c40: 6e 64 20 74 68 65 20 6f 75 74 70 75 74 20 61 73  nd the output as
7c50: 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 47 49   part of the CGI
7c60: 20 72 65 70 6c 79 2e 20 20 49 66 20 67 2e 63 67   reply.  If g.cg
7c70: 69 4f 75 74 70 75 74 20 69 73 20 66 61 6c 73 65  iOutput is false
7c80: 2c 0a 2a 2a 20 74 68 65 6e 20 77 72 69 74 65 20  ,.** then write 
7c90: 6f 6e 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70  on standard outp
7ca0: 75 74 2e 0a 2a 2f 0a 76 6f 69 64 20 66 6f 73 73  ut..*/.void foss
7cb0: 69 6c 5f 70 72 69 6e 74 28 63 6f 6e 73 74 20 63  il_print(const c
7cc0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
7cd0: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
7ce0: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
7cf0: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28   zFormat);.  if(
7d00: 20 67 2e 63 67 69 4f 75 74 70 75 74 20 29 7b 0a   g.cgiOutput ){.
7d10: 20 20 20 20 63 67 69 5f 76 70 72 69 6e 74 66 28      cgi_vprintf(
7d20: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
7d30: 7d 65 6c 73 65 7b 0a 20 20 20 20 42 6c 6f 62 20  }else{.    Blob 
7d40: 62 20 3d 20 65 6d 70 74 79 5f 62 6c 6f 62 3b 0a  b = empty_blob;.
7d50: 20 20 20 20 76 78 70 72 69 6e 74 66 28 26 62 2c      vxprintf(&b,
7d60: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
7d70: 20 20 20 66 6f 73 73 69 6c 5f 70 75 74 73 28 62     fossil_puts(b
7d80: 6c 6f 62 5f 73 74 72 28 26 62 29 2c 20 30 29 3b  lob_str(&b), 0);
7d90: 0a 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28  .    blob_reset(
7da0: 26 62 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e  &b);.  }.  va_en
7db0: 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  d(ap);.}../*.** 
7dc0: 50 72 69 6e 74 20 61 20 74 72 61 63 65 20 6d 65  Print a trace me
7dd0: 73 73 61 67 65 20 6f 6e 20 73 74 61 6e 64 61 72  ssage on standar
7de0: 64 20 65 72 72 6f 72 2e 0a 2a 2f 0a 76 6f 69 64  d error..*/.void
7df0: 20 66 6f 73 73 69 6c 5f 74 72 61 63 65 28 63 6f   fossil_trace(co
7e00: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
7e10: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
7e20: 73 74 20 61 70 3b 0a 20 20 42 6c 6f 62 20 62 3b  st ap;.  Blob b;
7e30: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
7e40: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 62 20 3d 20  zFormat);.  b = 
7e50: 65 6d 70 74 79 5f 62 6c 6f 62 3b 0a 20 20 76 78  empty_blob;.  vx
7e60: 70 72 69 6e 74 66 28 26 62 2c 20 7a 46 6f 72 6d  printf(&b, zForm
7e70: 61 74 2c 20 61 70 29 3b 0a 20 20 66 6f 73 73 69  at, ap);.  fossi
7e80: 6c 5f 70 75 74 73 28 62 6c 6f 62 5f 73 74 72 28  l_puts(blob_str(
7e90: 26 62 29 2c 20 31 29 3b 0a 20 20 62 6c 6f 62 5f  &b), 1);.  blob_
7ea0: 72 65 73 65 74 28 26 62 29 3b 0a 20 20 76 61 5f  reset(&b);.  va_
7eb0: 65 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  end(ap);.}../*.*
7ec0: 2a 20 57 72 69 74 65 20 61 20 6d 65 73 73 61 67  * Write a messag
7ed0: 65 20 74 6f 20 74 68 65 20 65 72 72 6f 72 20 6c  e to the error l
7ee0: 6f 67 2c 20 69 66 20 74 68 65 20 65 72 72 6f 72  og, if the error
7ef0: 20 6c 6f 67 20 66 69 6c 65 6e 61 6d 65 20 69 73   log filename is
7f00: 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  .** defined..*/.
7f10: 73 74 61 74 69 63 20 76 6f 69 64 20 66 6f 73 73  static void foss
7f20: 69 6c 5f 65 72 72 6f 72 6c 6f 67 28 63 6f 6e 73  il_errorlog(cons
7f30: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
7f40: 20 2e 2e 2e 29 7b 0a 20 20 73 74 72 75 63 74 20   ...){.  struct 
7f50: 74 6d 20 2a 70 4e 6f 77 3b 0a 20 20 74 69 6d 65  tm *pNow;.  time
7f60: 5f 74 20 6e 6f 77 3b 0a 20 20 46 49 4c 45 20 2a  _t now;.  FILE *
7f70: 6f 75 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  out;.  const cha
7f80: 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  r *z;.  int i;. 
7f90: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 73   va_list ap;.  s
7fa0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
7fb0: 20 2a 63 6f 6e 73 74 20 61 7a 45 6e 76 5b 5d 20   *const azEnv[] 
7fc0: 3d 20 7b 20 22 48 54 54 50 5f 48 4f 53 54 22 2c  = { "HTTP_HOST",
7fd0: 20 22 48 54 54 50 5f 55 53 45 52 5f 41 47 45 4e   "HTTP_USER_AGEN
7fe0: 54 22 2c 0a 20 20 20 20 20 20 22 50 41 54 48 5f  T",.      "PATH_
7ff0: 49 4e 46 4f 22 2c 20 22 51 55 45 52 59 5f 53 54  INFO", "QUERY_ST
8000: 52 49 4e 47 22 2c 20 22 52 45 4d 4f 54 45 5f 41  RING", "REMOTE_A
8010: 44 44 52 22 2c 20 22 52 45 51 55 45 53 54 5f 4d  DDR", "REQUEST_M
8020: 45 54 48 4f 44 22 2c 0a 20 20 20 20 20 20 22 52  ETHOD",.      "R
8030: 45 51 55 45 53 54 5f 55 52 49 22 2c 20 22 53 43  EQUEST_URI", "SC
8040: 52 49 50 54 5f 4e 41 4d 45 22 20 7d 3b 0a 20 20  RIPT_NAME" };.  
8050: 69 66 28 20 67 2e 7a 45 72 72 6c 6f 67 3d 3d 30  if( g.zErrlog==0
8060: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 6f 75 74   ) return;.  out
8070: 20 3d 20 66 6f 73 73 69 6c 5f 66 6f 70 65 6e 28   = fossil_fopen(
8080: 67 2e 7a 45 72 72 6c 6f 67 2c 20 22 61 22 29 3b  g.zErrlog, "a");
8090: 0a 20 20 69 66 28 20 6f 75 74 3d 3d 30 20 29 20  .  if( out==0 ) 
80a0: 72 65 74 75 72 6e 3b 0a 20 20 6e 6f 77 20 3d 20  return;.  now = 
80b0: 74 69 6d 65 28 30 29 3b 0a 20 20 70 4e 6f 77 20  time(0);.  pNow 
80c0: 3d 20 67 6d 74 69 6d 65 28 26 6e 6f 77 29 3b 0a  = gmtime(&now);.
80d0: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
80e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 25 30  ------------- %0
80f0: 34 64 2d 25 30 32 64 2d 25 30 32 64 20 25 30 32  4d-%02d-%02d %02
8100: 64 3a 25 30 32 64 3a 25 30 32 64 20 55 54 43 20  d:%02d:%02d UTC 
8110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 2c  ------------\n",
8120: 0a 20 20 20 20 20 20 20 20 20 20 70 4e 6f 77 2d  .          pNow-
8130: 3e 74 6d 5f 79 65 61 72 2b 31 39 30 30 2c 20 70  >tm_year+1900, p
8140: 4e 6f 77 2d 3e 74 6d 5f 6d 6f 6e 2b 31 2c 20 70  Now->tm_mon+1, p
8150: 4e 6f 77 2d 3e 74 6d 5f 6d 64 61 79 2b 31 2c 0a  Now->tm_mday+1,.
8160: 20 20 20 20 20 20 20 20 20 20 70 4e 6f 77 2d 3e            pNow->
8170: 74 6d 5f 68 6f 75 72 2c 20 70 4e 6f 77 2d 3e 74  tm_hour, pNow->t
8180: 6d 5f 6d 69 6e 2c 20 70 4e 6f 77 2d 3e 74 6d 5f  m_min, pNow->tm_
8190: 73 65 63 29 3b 0a 20 20 76 61 5f 73 74 61 72 74  sec);.  va_start
81a0: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20  (ap, zFormat);. 
81b0: 20 76 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 7a   vfprintf(out, z
81c0: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 66  Format, ap);.  f
81d0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22  printf(out, "\n"
81e0: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
81f0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 63 6f  .  for(i=0; i<co
8200: 75 6e 74 28 61 7a 45 6e 76 29 3b 20 69 2b 2b 29  unt(azEnv); i++)
8210: 7b 0a 20 20 20 20 63 68 61 72 20 2a 70 3b 0a 20  {.    char *p;. 
8220: 20 20 20 69 66 28 20 28 70 20 3d 20 66 6f 73 73     if( (p = foss
8230: 69 6c 5f 67 65 74 65 6e 76 28 61 7a 45 6e 76 5b  il_getenv(azEnv[
8240: 69 5d 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  i]))!=0 ){.     
8250: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25   fprintf(out, "%
8260: 73 3d 25 73 5c 6e 22 2c 20 61 7a 45 6e 76 5b 69  s=%s\n", azEnv[i
8270: 5d 2c 20 70 29 3b 0a 20 20 20 20 20 20 66 6f 73  ], p);.      fos
8280: 73 69 6c 5f 70 61 74 68 5f 66 72 65 65 28 70 29  sil_path_free(p)
8290: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
82a0: 28 7a 20 3d 20 50 28 61 7a 45 6e 76 5b 69 5d 29  (z = P(azEnv[i])
82b0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 70  )!=0 ){.      fp
82c0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 3d 25  rintf(out, "%s=%
82d0: 73 5c 6e 22 2c 20 61 7a 45 6e 76 5b 69 5d 2c 20  s\n", azEnv[i], 
82e0: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  z);.    }.  }.  
82f0: 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 7d 0a 0a  fclose(out);.}..
8300: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8310: 69 6e 67 20 76 61 72 69 61 62 6c 65 20 62 65 63  ing variable bec
8320: 6f 6d 65 73 20 74 72 75 65 20 77 68 69 6c 65 20  omes true while 
8330: 70 72 6f 63 65 73 73 69 6e 67 20 61 20 66 61 74  processing a fat
8340: 61 6c 20 65 72 72 6f 72 0a 2a 2a 20 6f 72 20 61  al error.** or a
8350: 20 70 61 6e 69 63 2e 20 20 49 66 20 61 64 64 69   panic.  If addi
8360: 74 69 6f 6e 61 6c 20 22 72 65 63 75 72 73 69 76  tional "recursiv
8370: 65 2d 66 61 74 61 6c 22 20 65 72 72 6f 72 73 20  e-fatal" errors 
8380: 6f 63 63 75 72 20 77 68 69 6c 65 0a 2a 2a 20 73  occur while.** s
8390: 68 75 74 74 69 6e 67 20 64 6f 77 6e 2c 20 74 68  hutting down, th
83a0: 65 20 72 65 63 75 72 73 69 76 65 20 65 72 72 6f  e recursive erro
83b0: 72 73 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20  rs are silently 
83c0: 69 67 6e 6f 72 65 64 2e 0a 2a 2f 0a 73 74 61 74  ignored..*/.stat
83d0: 69 63 20 69 6e 74 20 6d 61 69 6e 49 6e 46 61 74  ic int mainInFat
83e0: 61 6c 45 72 72 6f 72 20 3d 20 30 3b 0a 0a 2f 2a  alError = 0;../*
83f0: 0a 2a 2a 20 50 72 69 6e 74 20 61 6e 20 65 72 72  .** Print an err
8400: 6f 72 20 6d 65 73 73 61 67 65 2c 20 72 6f 6c 6c  or message, roll
8410: 62 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73  back all databas
8420: 65 73 2c 20 61 6e 64 20 71 75 69 74 2e 20 20 54  es, and quit.  T
8430: 68 65 73 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  hese.** routines
8440: 20 6e 65 76 65 72 20 72 65 74 75 72 6e 2e 0a 2a   never return..*
8450: 2f 0a 4e 4f 52 45 54 55 52 4e 20 76 6f 69 64 20  /.NORETURN void 
8460: 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 63 6f 6e  fossil_panic(con
8470: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
8480: 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73  , ...){.  va_lis
8490: 74 20 61 70 3b 0a 20 20 69 6e 74 20 72 63 20 3d  t ap;.  int rc =
84a0: 20 31 3b 0a 20 20 63 68 61 72 20 7a 5b 31 30 30   1;.  char z[100
84b0: 30 5d 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74  0];.  static int
84c0: 20 6f 6e 63 65 20 3d 20 30 3b 0a 0a 20 20 69 66   once = 0;..  if
84d0: 28 20 6f 6e 63 65 20 29 20 65 78 69 74 28 31 29  ( once ) exit(1)
84e0: 3b 0a 20 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20  ;.  once = 1;.  
84f0: 6d 61 69 6e 49 6e 46 61 74 61 6c 45 72 72 6f 72  mainInFatalError
8500: 20 3d 20 31 3b 0a 20 20 64 62 5f 66 6f 72 63 65   = 1;.  db_force
8510: 5f 72 6f 6c 6c 62 61 63 6b 28 29 3b 0a 20 20 76  _rollback();.  v
8520: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
8530: 6d 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  mat);.  sqlite3_
8540: 76 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  vsnprintf(sizeof
8550: 28 7a 29 2c 7a 2c 7a 46 6f 72 6d 61 74 2c 20 61  (z),z,zFormat, a
8560: 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29  p);.  va_end(ap)
8570: 3b 0a 20 20 66 6f 73 73 69 6c 5f 65 72 72 6f 72  ;.  fossil_error
8580: 6c 6f 67 28 22 70 61 6e 69 63 3a 20 25 73 22 2c  log("panic: %s",
8590: 20 7a 29 3b 0a 23 69 66 64 65 66 20 46 4f 53 53   z);.#ifdef FOSS
85a0: 49 4c 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 0a 20  IL_ENABLE_JSON. 
85b0: 20 69 66 28 20 67 2e 6a 73 6f 6e 2e 69 73 4a 73   if( g.json.isJs
85c0: 6f 6e 4d 6f 64 65 20 29 7b 0a 20 20 20 20 6a 73  onMode ){.    js
85d0: 6f 6e 5f 65 72 72 28 20 30 2c 20 7a 2c 20 31 20  on_err( 0, z, 1 
85e0: 29 3b 0a 20 20 20 20 69 66 28 20 67 2e 69 73 48  );.    if( g.isH
85f0: 54 54 50 20 29 7b 0a 20 20 20 20 20 20 72 63 20  TTP ){.      rc 
8600: 3d 20 30 20 2f 2a 20 61 76 6f 69 64 20 48 54 54  = 0 /* avoid HTT
8610: 50 20 35 30 30 20 2a 2f 3b 0a 20 20 20 20 7d 0a  P 500 */;.    }.
8620: 20 20 7d 0a 20 20 65 6c 73 65 0a 23 65 6e 64 69    }.  else.#endi
8630: 66 0a 20 20 7b 0a 20 20 20 20 69 66 28 20 67 2e  f.  {.    if( g.
8640: 63 67 69 4f 75 74 70 75 74 20 29 7b 0a 20 20 20  cgiOutput ){.   
8650: 20 20 20 63 67 69 5f 70 72 69 6e 74 66 28 22 3c     cgi_printf("<
8660: 70 20 63 6c 61 73 73 3d 5c 22 67 65 6e 65 72 61  p class=\"genera
8670: 6c 45 72 72 6f 72 5c 22 3e 25 68 3c 2f 70 3e 22  lError\">%h</p>"
8680: 2c 20 7a 29 3b 0a 20 20 20 20 20 20 63 67 69 5f  , z);.      cgi_
8690: 72 65 70 6c 79 28 29 3b 0a 20 20 20 20 7d 65 6c  reply();.    }el
86a0: 73 65 20 69 66 28 20 21 67 2e 66 51 75 69 65 74  se if( !g.fQuiet
86b0: 20 29 7b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c   ){.      fossil
86c0: 5f 66 6f 72 63 65 5f 6e 65 77 6c 69 6e 65 28 29  _force_newline()
86d0: 3b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70  ;.      fossil_p
86e0: 75 74 73 28 22 46 6f 73 73 69 6c 20 69 6e 74 65  uts("Fossil inte
86f0: 72 6e 61 6c 20 65 72 72 6f 72 3a 20 22 2c 20 31  rnal error: ", 1
8700: 29 3b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f  );.      fossil_
8710: 70 75 74 73 28 7a 2c 20 31 29 3b 0a 20 20 20 20  puts(z, 1);.    
8720: 20 20 66 6f 73 73 69 6c 5f 70 75 74 73 28 22 5c    fossil_puts("\
8730: 6e 22 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20  n", 1);.    }.  
8740: 7d 0a 20 20 65 78 69 74 28 72 63 29 3b 0a 7d 0a  }.  exit(rc);.}.
8750: 0a 4e 4f 52 45 54 55 52 4e 20 76 6f 69 64 20 66  .NORETURN void f
8760: 6f 73 73 69 6c 5f 66 61 74 61 6c 28 63 6f 6e 73  ossil_fatal(cons
8770: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
8780: 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 72 20 2a 7a   ...){.  char *z
8790: 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 31 3b 0a  ;.  int rc = 1;.
87a0: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
87b0: 6d 61 69 6e 49 6e 46 61 74 61 6c 45 72 72 6f 72  mainInFatalError
87c0: 20 3d 20 31 3b 0a 20 20 76 61 5f 73 74 61 72 74   = 1;.  va_start
87d0: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20  (ap, zFormat);. 
87e0: 20 7a 20 3d 20 76 6d 70 72 69 6e 74 66 28 7a 46   z = vmprintf(zF
87f0: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61  ormat, ap);.  va
8800: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 66 6f 73 73  _end(ap);.  foss
8810: 69 6c 5f 65 72 72 6f 72 6c 6f 67 28 22 66 61 74  il_errorlog("fat
8820: 61 6c 3a 20 25 73 22 2c 20 7a 29 3b 0a 23 69 66  al: %s", z);.#if
8830: 64 65 66 20 46 4f 53 53 49 4c 5f 45 4e 41 42 4c  def FOSSIL_ENABL
8840: 45 5f 4a 53 4f 4e 0a 20 20 69 66 28 20 67 2e 6a  E_JSON.  if( g.j
8850: 73 6f 6e 2e 69 73 4a 73 6f 6e 4d 6f 64 65 20 29  son.isJsonMode )
8860: 7b 0a 20 20 20 20 6a 73 6f 6e 5f 65 72 72 28 20  {.    json_err( 
8870: 67 2e 6a 73 6f 6e 2e 72 65 73 75 6c 74 43 6f 64  g.json.resultCod
8880: 65 2c 20 7a 2c 20 31 20 29 3b 0a 20 20 20 20 69  e, z, 1 );.    i
8890: 66 28 20 67 2e 69 73 48 54 54 50 20 29 7b 0a 20  f( g.isHTTP ){. 
88a0: 20 20 20 20 20 72 63 20 3d 20 30 20 2f 2a 20 61       rc = 0 /* a
88b0: 76 6f 69 64 20 48 54 54 50 20 35 30 30 20 2a 2f  void HTTP 500 */
88c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 65 6c  ;.    }.  }.  el
88d0: 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20  se.#endif.  {.  
88e0: 20 20 69 66 28 20 67 2e 63 67 69 4f 75 74 70 75    if( g.cgiOutpu
88f0: 74 20 29 7b 0a 20 20 20 20 20 20 67 2e 63 67 69  t ){.      g.cgi
8900: 4f 75 74 70 75 74 20 3d 20 30 3b 0a 20 20 20 20  Output = 0;.    
8910: 20 20 63 67 69 5f 70 72 69 6e 74 66 28 22 3c 70    cgi_printf("<p
8920: 20 63 6c 61 73 73 3d 5c 22 67 65 6e 65 72 61 6c   class=\"general
8930: 45 72 72 6f 72 5c 22 3e 5c 6e 25 68 5c 6e 3c 2f  Error\">\n%h\n</
8940: 70 3e 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20  p>\n", z);.     
8950: 20 63 67 69 5f 72 65 70 6c 79 28 29 3b 0a 20 20   cgi_reply();.  
8960: 20 20 7d 65 6c 73 65 20 69 66 28 20 21 67 2e 66    }else if( !g.f
8970: 51 75 69 65 74 20 29 7b 0a 20 20 20 20 20 20 66  Quiet ){.      f
8980: 6f 73 73 69 6c 5f 66 6f 72 63 65 5f 6e 65 77 6c  ossil_force_newl
8990: 69 6e 65 28 29 3b 0a 20 20 20 20 20 20 66 6f 73  ine();.      fos
89a0: 73 69 6c 5f 74 72 61 63 65 28 22 25 73 5c 6e 22  sil_trace("%s\n"
89b0: 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , z);.    }.  }.
89c0: 20 20 66 72 65 65 28 7a 29 3b 0a 20 20 64 62 5f    free(z);.  db_
89d0: 66 6f 72 63 65 5f 72 6f 6c 6c 62 61 63 6b 28 29  force_rollback()
89e0: 3b 0a 20 20 66 6f 73 73 69 6c 5f 65 78 69 74 28  ;.  fossil_exit(
89f0: 72 63 29 3b 0a 7d 0a 0a 2f 2a 20 54 68 69 73 20  rc);.}../* This 
8a00: 72 6f 75 74 69 6e 65 20 77 6f 72 6b 73 20 6c 69  routine works li
8a10: 6b 65 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28  ke fossil_fatal(
8a20: 29 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  ) except that if
8a30: 20 63 61 6c 6c 65 64 0a 2a 2a 20 72 65 63 75 72   called.** recur
8a40: 73 69 76 65 6c 79 2c 20 74 68 65 20 72 65 63 75  sively, the recu
8a50: 72 73 69 76 65 20 63 61 6c 6c 20 69 73 20 61 20  rsive call is a 
8a60: 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 55 73 65  no-op..**.** Use
8a70: 20 74 68 69 73 20 69 6e 20 70 6c 61 63 65 73 20   this in places 
8a80: 77 68 65 72 65 20 61 6e 20 65 72 72 6f 72 20 6d  where an error m
8a90: 69 67 68 74 20 6f 63 63 75 72 20 77 68 69 6c 65  ight occur while
8aa0: 20 64 6f 69 6e 67 0a 2a 2a 20 66 61 74 61 6c 20   doing.** fatal 
8ab0: 65 72 72 6f 72 20 73 68 75 74 64 6f 77 6e 20 70  error shutdown p
8ac0: 72 6f 63 65 73 73 69 6e 67 2e 20 20 55 6e 6c 69  rocessing.  Unli
8ad0: 6b 65 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28  ke fossil_panic(
8ae0: 29 20 61 6e 64 0a 2a 2a 20 66 6f 73 73 69 6c 5f  ) and.** fossil_
8af0: 66 61 74 61 6c 28 29 20 77 68 69 63 68 20 6e 65  fatal() which ne
8b00: 76 65 72 20 72 65 74 75 72 6e 2c 20 74 68 69 73  ver return, this
8b10: 20 72 6f 75 74 69 6e 65 20 6d 69 67 68 74 20 72   routine might r
8b20: 65 74 75 72 6e 20 69 66 0a 2a 2a 20 74 68 65 20  eturn if.** the 
8b30: 66 61 74 61 6c 20 65 72 72 6f 72 20 68 61 6e 64  fatal error hand
8b40: 69 6e 67 20 69 73 20 61 6c 72 65 61 64 79 20 69  ing is already i
8b50: 6e 20 70 72 6f 63 65 73 73 2e 20 20 54 68 65 20  n process.  The 
8b60: 63 61 6c 6c 65 72 20 6d 75 73 74 0a 2a 2a 20 62  caller must.** b
8b70: 65 20 70 72 65 70 61 72 65 64 20 66 6f 72 20 74  e prepared for t
8b80: 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 72  his routine to r
8b90: 65 74 75 72 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 66  eturn..*/.void f
8ba0: 6f 73 73 69 6c 5f 66 61 74 61 6c 5f 72 65 63 75  ossil_fatal_recu
8bb0: 72 73 69 76 65 28 63 6f 6e 73 74 20 63 68 61 72  rsive(const char
8bc0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
8bd0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76 61  .  char *z;.  va
8be0: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20  _list ap;.  int 
8bf0: 72 63 20 3d 20 31 3b 0a 20 20 69 66 28 20 6d 61  rc = 1;.  if( ma
8c00: 69 6e 49 6e 46 61 74 61 6c 45 72 72 6f 72 20 29  inInFatalError )
8c10: 20 72 65 74 75 72 6e 3b 0a 20 20 6d 61 69 6e 49   return;.  mainI
8c20: 6e 46 61 74 61 6c 45 72 72 6f 72 20 3d 20 31 3b  nFatalError = 1;
8c30: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
8c40: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20  zFormat);.  z = 
8c50: 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74  vmprintf(zFormat
8c60: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
8c70: 61 70 29 3b 0a 20 20 66 6f 73 73 69 6c 5f 65 72  ap);.  fossil_er
8c80: 72 6f 72 6c 6f 67 28 22 66 61 74 61 6c 3a 20 25  rorlog("fatal: %
8c90: 73 22 2c 20 7a 29 3b 0a 23 69 66 64 65 66 20 46  s", z);.#ifdef F
8ca0: 4f 53 53 49 4c 5f 45 4e 41 42 4c 45 5f 4a 53 4f  OSSIL_ENABLE_JSO
8cb0: 4e 0a 20 20 69 66 28 20 67 2e 6a 73 6f 6e 2e 69  N.  if( g.json.i
8cc0: 73 4a 73 6f 6e 4d 6f 64 65 20 29 7b 0a 20 20 20  sJsonMode ){.   
8cd0: 20 6a 73 6f 6e 5f 65 72 72 28 20 67 2e 6a 73 6f   json_err( g.jso
8ce0: 6e 2e 72 65 73 75 6c 74 43 6f 64 65 2c 20 7a 2c  n.resultCode, z,
8cf0: 20 31 20 29 3b 0a 20 20 20 20 69 66 28 20 67 2e   1 );.    if( g.
8d00: 69 73 48 54 54 50 20 29 7b 0a 20 20 20 20 20 20  isHTTP ){.      
8d10: 72 63 20 3d 20 30 20 2f 2a 20 61 76 6f 69 64 20  rc = 0 /* avoid 
8d20: 48 54 54 50 20 35 30 30 20 2a 2f 3b 0a 20 20 20  HTTP 500 */;.   
8d30: 20 7d 0a 20 20 7d 20 65 6c 73 65 0a 23 65 6e 64   }.  } else.#end
8d40: 69 66 0a 20 20 7b 0a 20 20 20 20 69 66 28 20 67  if.  {.    if( g
8d50: 2e 63 67 69 4f 75 74 70 75 74 20 29 7b 0a 20 20  .cgiOutput ){.  
8d60: 20 20 20 20 67 2e 63 67 69 4f 75 74 70 75 74 20      g.cgiOutput 
8d70: 3d 20 30 3b 0a 20 20 20 20 20 20 63 67 69 5f 70  = 0;.      cgi_p
8d80: 72 69 6e 74 66 28 22 3c 70 20 63 6c 61 73 73 3d  rintf("<p class=
8d90: 5c 22 67 65 6e 65 72 61 6c 45 72 72 6f 72 5c 22  \"generalError\"
8da0: 3e 5c 6e 25 68 5c 6e 3c 2f 70 3e 5c 6e 22 2c 20  >\n%h\n</p>\n", 
8db0: 7a 29 3b 0a 20 20 20 20 20 20 63 67 69 5f 72 65  z);.      cgi_re
8dc0: 70 6c 79 28 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ply();.    }else
8dd0: 7b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66  {.      fossil_f
8de0: 6f 72 63 65 5f 6e 65 77 6c 69 6e 65 28 29 3b 0a  orce_newline();.
8df0: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 74 72 61        fossil_tra
8e00: 63 65 28 22 25 73 5c 6e 22 2c 20 7a 29 3b 0a 20  ce("%s\n", z);. 
8e10: 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 6f     }.  }.  db_fo
8e20: 72 63 65 5f 72 6f 6c 6c 62 61 63 6b 28 29 3b 0a  rce_rollback();.
8e30: 20 20 66 6f 73 73 69 6c 5f 65 78 69 74 28 72 63    fossil_exit(rc
8e40: 29 3b 0a 7d 0a 0a 0a 2f 2a 20 50 72 69 6e 74 20  );.}.../* Print 
8e50: 61 20 77 61 72 6e 69 6e 67 20 6d 65 73 73 61 67  a warning messag
8e60: 65 20 2a 2f 0a 76 6f 69 64 20 66 6f 73 73 69 6c  e */.void fossil
8e70: 5f 77 61 72 6e 69 6e 67 28 63 6f 6e 73 74 20 63  _warning(const c
8e80: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
8e90: 2e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  .){.  char *z;. 
8ea0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76   va_list ap;.  v
8eb0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
8ec0: 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 76 6d 70 72  mat);.  z = vmpr
8ed0: 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70  intf(zFormat, ap
8ee0: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
8ef0: 0a 20 20 66 6f 73 73 69 6c 5f 65 72 72 6f 72 6c  .  fossil_errorl
8f00: 6f 67 28 22 77 61 72 6e 69 6e 67 3a 20 25 73 22  og("warning: %s"
8f10: 2c 20 7a 29 3b 0a 23 69 66 64 65 66 20 46 4f 53  , z);.#ifdef FOS
8f20: 53 49 4c 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 0a  SIL_ENABLE_JSON.
8f30: 20 20 69 66 28 67 2e 6a 73 6f 6e 2e 69 73 4a 73    if(g.json.isJs
8f40: 6f 6e 4d 6f 64 65 29 7b 0a 20 20 20 20 6a 73 6f  onMode){.    jso
8f50: 6e 5f 77 61 72 6e 28 20 46 53 4c 5f 4a 53 4f 4e  n_warn( FSL_JSON
8f60: 5f 57 5f 55 4e 4b 4e 4f 57 4e 2c 20 22 25 73 22  _W_UNKNOWN, "%s"
8f70: 2c 20 7a 20 29 3b 0a 20 20 7d 65 6c 73 65 0a 23  , z );.  }else.#
8f80: 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 69 66  endif.  {.    if
8f90: 28 20 67 2e 63 67 69 4f 75 74 70 75 74 20 29 7b  ( g.cgiOutput ){
8fa0: 0a 20 20 20 20 20 20 63 67 69 5f 70 72 69 6e 74  .      cgi_print
8fb0: 66 28 22 3c 70 20 63 6c 61 73 73 3d 5c 22 67 65  f("<p class=\"ge
8fc0: 6e 65 72 61 6c 45 72 72 6f 72 5c 22 3e 5c 6e 25  neralError\">\n%
8fd0: 68 5c 6e 3c 2f 70 3e 5c 6e 22 2c 20 7a 29 3b 0a  h\n</p>\n", z);.
8fe0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8ff0: 20 66 6f 73 73 69 6c 5f 66 6f 72 63 65 5f 6e 65   fossil_force_ne
9000: 77 6c 69 6e 65 28 29 3b 0a 20 20 20 20 20 20 66  wline();.      f
9010: 6f 73 73 69 6c 5f 74 72 61 63 65 28 22 25 73 5c  ossil_trace("%s\
9020: 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  n", z);.    }.  
9030: 7d 0a 20 20 66 72 65 65 28 7a 29 3b 0a 7d 0a 0a  }.  free(z);.}..
9040: 2f 2a 0a 2a 2a 20 54 75 72 6e 20 6f 66 66 20 61  /*.** Turn off a
9050: 6e 79 20 4c 46 20 74 6f 20 43 52 4c 46 20 74 72  ny LF to CRLF tr
9060: 61 6e 73 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65  anslation on the
9070: 20 73 74 72 65 61 6d 20 67 69 76 65 6e 20 61 73   stream given as
9080: 20 61 6e 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e   an.** argument.
9090: 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f    This is a no-o
90a0: 70 20 6f 6e 20 75 6e 69 78 20 62 75 74 20 69 73  p on unix but is
90b0: 20 6e 65 63 65 73 73 61 72 79 20 6f 6e 20 77 69   necessary on wi
90c0: 6e 64 6f 77 73 2e 0a 2a 2f 0a 76 6f 69 64 20 66  ndows..*/.void f
90d0: 6f 73 73 69 6c 5f 62 69 6e 61 72 79 5f 6d 6f 64  ossil_binary_mod
90e0: 65 28 46 49 4c 45 20 2a 70 29 7b 0a 23 69 66 20  e(FILE *p){.#if 
90f0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 0a  defined(_WIN32).
9100: 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c 65    _setmode(_file
9110: 6e 6f 28 70 29 2c 20 5f 4f 5f 42 49 4e 41 52 59  no(p), _O_BINARY
9120: 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
9130: 20 5f 5f 45 4d 58 5f 5f 20 20 20 20 20 2f 2a 20   __EMX__     /* 
9140: 4f 53 2f 32 20 2a 2f 0a 20 20 73 65 74 6d 6f 64  OS/2 */.  setmod
9150: 65 28 66 69 6c 65 6e 6f 28 70 29 2c 20 4f 5f 42  e(fileno(p), O_B
9160: 49 4e 41 52 59 29 3b 0a 23 65 6e 64 69 66 0a 7d  INARY);.#endif.}
9170: 0a                                               .