minilzo.c 125 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193
  1. /* minilzo.c -- mini subset of the LZO real-time data compression library
  2. This file is part of the LZO real-time data compression library.
  3. Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer
  4. Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer
  5. Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer
  6. Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer
  7. Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer
  8. Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
  9. Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
  10. Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
  11. Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
  12. Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
  13. Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
  14. Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
  15. Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
  16. Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
  17. Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
  18. All Rights Reserved.
  19. The LZO library is free software; you can redistribute it and/or
  20. modify it under the terms of the GNU General Public License as
  21. published by the Free Software Foundation; either version 2 of
  22. the License, or (at your option) any later version.
  23. The LZO library is distributed in the hope that it will be useful,
  24. but WITHOUT ANY WARRANTY; without even the implied warranty of
  25. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  26. GNU General Public License for more details.
  27. You should have received a copy of the GNU General Public License
  28. along with the LZO library; see the file COPYING.
  29. If not, write to the Free Software Foundation, Inc.,
  30. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  31. Markus F.X.J. Oberhumer
  32. <markus@oberhumer.com>
  33. http://www.oberhumer.com/opensource/lzo/
  34. */
  35. /*
  36. * NOTE:
  37. * the full LZO package can be found at
  38. * http://www.oberhumer.com/opensource/lzo/
  39. */
  40. #define __LZO_IN_MINILZO 1
  41. #if defined(LZO_CFG_FREESTANDING)
  42. # undef MINILZO_HAVE_CONFIG_H
  43. # define LZO_LIBC_FREESTANDING 1
  44. # define LZO_OS_FREESTANDING 1
  45. #endif
  46. #ifdef MINILZO_HAVE_CONFIG_H
  47. # include <config.h>
  48. #endif
  49. #include <limits.h>
  50. #include <stddef.h>
  51. #if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS)
  52. #ifndef __LZODEFS_H_INCLUDED
  53. #define __LZODEFS_H_INCLUDED 1
  54. #if defined(__CYGWIN32__) && !defined(__CYGWIN__)
  55. # define __CYGWIN__ __CYGWIN32__
  56. #endif
  57. #if defined(__IBMCPP__) && !defined(__IBMC__)
  58. # define __IBMC__ __IBMCPP__
  59. #endif
  60. #if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER)
  61. # define __INTEL_COMPILER __ICL
  62. #endif
  63. #if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE)
  64. # define _ALL_SOURCE 1
  65. #endif
  66. #if defined(__mips__) && defined(__R5900__)
  67. # if !defined(__LONG_MAX__)
  68. # define __LONG_MAX__ 9223372036854775807L
  69. # endif
  70. #endif
  71. #if defined(__INTEL_COMPILER) && defined(__linux__)
  72. # pragma warning(disable: 193)
  73. #endif
  74. #if defined(__KEIL__) && defined(__C166__)
  75. # pragma warning disable = 322
  76. #elif 0 && defined(__C251__)
  77. # pragma warning disable = 322
  78. #endif
  79. #if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__)
  80. # if (_MSC_VER >= 1300)
  81. # pragma warning(disable: 4668)
  82. # endif
  83. #endif
  84. #if 0 && defined(__WATCOMC__)
  85. # if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060)
  86. # pragma warning 203 9
  87. # endif
  88. #endif
  89. #if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__)
  90. # pragma option -h
  91. #endif
  92. #if 0
  93. #define LZO_0xffffL 0xfffful
  94. #define LZO_0xffffffffL 0xfffffffful
  95. #else
  96. #define LZO_0xffffL 65535ul
  97. #define LZO_0xffffffffL 4294967295ul
  98. #endif
  99. #if (LZO_0xffffL == LZO_0xffffffffL)
  100. # error "your preprocessor is broken 1"
  101. #endif
  102. #if (16ul * 16384ul != 262144ul)
  103. # error "your preprocessor is broken 2"
  104. #endif
  105. #if 0
  106. #if (32767 >= 4294967295ul)
  107. # error "your preprocessor is broken 3"
  108. #endif
  109. #if (65535u >= 4294967295ul)
  110. # error "your preprocessor is broken 4"
  111. #endif
  112. #endif
  113. #if (UINT_MAX == LZO_0xffffL)
  114. #if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__)
  115. # if !defined(MSDOS)
  116. # define MSDOS 1
  117. # endif
  118. # if !defined(_MSDOS)
  119. # define _MSDOS 1
  120. # endif
  121. #elif 0 && defined(__VERSION) && defined(MB_LEN_MAX)
  122. # if (__VERSION == 520) && (MB_LEN_MAX == 1)
  123. # if !defined(__AZTEC_C__)
  124. # define __AZTEC_C__ __VERSION
  125. # endif
  126. # if !defined(__DOS__)
  127. # define __DOS__ 1
  128. # endif
  129. # endif
  130. #endif
  131. #endif
  132. #if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL)
  133. # define ptrdiff_t long
  134. # define _PTRDIFF_T_DEFINED 1
  135. #endif
  136. #if (UINT_MAX == LZO_0xffffL)
  137. # undef __LZO_RENAME_A
  138. # undef __LZO_RENAME_B
  139. # if defined(__AZTEC_C__) && defined(__DOS__)
  140. # define __LZO_RENAME_A 1
  141. # elif defined(_MSC_VER) && defined(MSDOS)
  142. # if (_MSC_VER < 600)
  143. # define __LZO_RENAME_A 1
  144. # elif (_MSC_VER < 700)
  145. # define __LZO_RENAME_B 1
  146. # endif
  147. # elif defined(__TSC__) && defined(__OS2__)
  148. # define __LZO_RENAME_A 1
  149. # elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410)
  150. # define __LZO_RENAME_A 1
  151. # elif defined(__PACIFIC__) && defined(DOS)
  152. # if !defined(__far)
  153. # define __far far
  154. # endif
  155. # if !defined(__near)
  156. # define __near near
  157. # endif
  158. # endif
  159. # if defined(__LZO_RENAME_A)
  160. # if !defined(__cdecl)
  161. # define __cdecl cdecl
  162. # endif
  163. # if !defined(__far)
  164. # define __far far
  165. # endif
  166. # if !defined(__huge)
  167. # define __huge huge
  168. # endif
  169. # if !defined(__near)
  170. # define __near near
  171. # endif
  172. # if !defined(__pascal)
  173. # define __pascal pascal
  174. # endif
  175. # if !defined(__huge)
  176. # define __huge huge
  177. # endif
  178. # elif defined(__LZO_RENAME_B)
  179. # if !defined(__cdecl)
  180. # define __cdecl _cdecl
  181. # endif
  182. # if !defined(__far)
  183. # define __far _far
  184. # endif
  185. # if !defined(__huge)
  186. # define __huge _huge
  187. # endif
  188. # if !defined(__near)
  189. # define __near _near
  190. # endif
  191. # if !defined(__pascal)
  192. # define __pascal _pascal
  193. # endif
  194. # elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
  195. # if !defined(__cdecl)
  196. # define __cdecl cdecl
  197. # endif
  198. # if !defined(__pascal)
  199. # define __pascal pascal
  200. # endif
  201. # endif
  202. # undef __LZO_RENAME_A
  203. # undef __LZO_RENAME_B
  204. #endif
  205. #if (UINT_MAX == LZO_0xffffL)
  206. #if defined(__AZTEC_C__) && defined(__DOS__)
  207. # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
  208. #elif defined(_MSC_VER) && defined(MSDOS)
  209. # if (_MSC_VER < 600)
  210. # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
  211. # endif
  212. # if (_MSC_VER < 700)
  213. # define LZO_BROKEN_INTEGRAL_PROMOTION 1
  214. # define LZO_BROKEN_SIZEOF 1
  215. # endif
  216. #elif defined(__PACIFIC__) && defined(DOS)
  217. # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
  218. #elif defined(__TURBOC__) && defined(__MSDOS__)
  219. # if (__TURBOC__ < 0x0150)
  220. # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
  221. # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
  222. # define LZO_BROKEN_INTEGRAL_PROMOTION 1
  223. # endif
  224. # if (__TURBOC__ < 0x0200)
  225. # define LZO_BROKEN_SIZEOF 1
  226. # endif
  227. # if (__TURBOC__ < 0x0400) && defined(__cplusplus)
  228. # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
  229. # endif
  230. #elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
  231. # define LZO_BROKEN_CDECL_ALT_SYNTAX 1
  232. # define LZO_BROKEN_SIZEOF 1
  233. #endif
  234. #endif
  235. #if defined(__WATCOMC__) && (__WATCOMC__ < 900)
  236. # define LZO_BROKEN_INTEGRAL_CONSTANTS 1
  237. #endif
  238. #if defined(_CRAY) && defined(_CRAY1)
  239. # define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1
  240. #endif
  241. #define LZO_PP_STRINGIZE(x) #x
  242. #define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x)
  243. #define LZO_PP_CONCAT2(a,b) a ## b
  244. #define LZO_PP_CONCAT3(a,b,c) a ## b ## c
  245. #define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d
  246. #define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e
  247. #define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b)
  248. #define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c)
  249. #define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d)
  250. #define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e)
  251. #if 1
  252. #define LZO_CPP_STRINGIZE(x) #x
  253. #define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x)
  254. #define LZO_CPP_CONCAT2(a,b) a ## b
  255. #define LZO_CPP_CONCAT3(a,b,c) a ## b ## c
  256. #define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d
  257. #define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e
  258. #define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b)
  259. #define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c)
  260. #define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d)
  261. #define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e)
  262. #endif
  263. #define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o))
  264. #if 1 && defined(__cplusplus)
  265. # if !defined(__STDC_CONSTANT_MACROS)
  266. # define __STDC_CONSTANT_MACROS 1
  267. # endif
  268. # if !defined(__STDC_LIMIT_MACROS)
  269. # define __STDC_LIMIT_MACROS 1
  270. # endif
  271. #endif
  272. #if defined(__cplusplus)
  273. # define LZO_EXTERN_C extern "C"
  274. #else
  275. # define LZO_EXTERN_C extern
  276. #endif
  277. #if !defined(__LZO_OS_OVERRIDE)
  278. #if (LZO_OS_FREESTANDING)
  279. # define LZO_INFO_OS "freestanding"
  280. #elif (LZO_OS_EMBEDDED)
  281. # define LZO_INFO_OS "embedded"
  282. #elif 1 && defined(__IAR_SYSTEMS_ICC__)
  283. # define LZO_OS_EMBEDDED 1
  284. # define LZO_INFO_OS "embedded"
  285. #elif defined(__CYGWIN__) && defined(__GNUC__)
  286. # define LZO_OS_CYGWIN 1
  287. # define LZO_INFO_OS "cygwin"
  288. #elif defined(__EMX__) && defined(__GNUC__)
  289. # define LZO_OS_EMX 1
  290. # define LZO_INFO_OS "emx"
  291. #elif defined(__BEOS__)
  292. # define LZO_OS_BEOS 1
  293. # define LZO_INFO_OS "beos"
  294. #elif defined(__Lynx__)
  295. # define LZO_OS_LYNXOS 1
  296. # define LZO_INFO_OS "lynxos"
  297. #elif defined(__OS400__)
  298. # define LZO_OS_OS400 1
  299. # define LZO_INFO_OS "os400"
  300. #elif defined(__QNX__)
  301. # define LZO_OS_QNX 1
  302. # define LZO_INFO_OS "qnx"
  303. #elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460)
  304. # define LZO_OS_DOS32 1
  305. # define LZO_INFO_OS "dos32"
  306. #elif defined(__BORLANDC__) && defined(__DPMI16__)
  307. # define LZO_OS_DOS16 1
  308. # define LZO_INFO_OS "dos16"
  309. #elif defined(__ZTC__) && defined(DOS386)
  310. # define LZO_OS_DOS32 1
  311. # define LZO_INFO_OS "dos32"
  312. #elif defined(__OS2__) || defined(__OS2V2__)
  313. # if (UINT_MAX == LZO_0xffffL)
  314. # define LZO_OS_OS216 1
  315. # define LZO_INFO_OS "os216"
  316. # elif (UINT_MAX == LZO_0xffffffffL)
  317. # define LZO_OS_OS2 1
  318. # define LZO_INFO_OS "os2"
  319. # else
  320. # error "check your limits.h header"
  321. # endif
  322. #elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64)
  323. # define LZO_OS_WIN64 1
  324. # define LZO_INFO_OS "win64"
  325. #elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__)
  326. # define LZO_OS_WIN32 1
  327. # define LZO_INFO_OS "win32"
  328. #elif defined(__MWERKS__) && defined(__INTEL__)
  329. # define LZO_OS_WIN32 1
  330. # define LZO_INFO_OS "win32"
  331. #elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows)
  332. # if (UINT_MAX == LZO_0xffffL)
  333. # define LZO_OS_WIN16 1
  334. # define LZO_INFO_OS "win16"
  335. # elif (UINT_MAX == LZO_0xffffffffL)
  336. # define LZO_OS_WIN32 1
  337. # define LZO_INFO_OS "win32"
  338. # else
  339. # error "check your limits.h header"
  340. # endif
  341. #elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS))
  342. # if (UINT_MAX == LZO_0xffffL)
  343. # define LZO_OS_DOS16 1
  344. # define LZO_INFO_OS "dos16"
  345. # elif (UINT_MAX == LZO_0xffffffffL)
  346. # define LZO_OS_DOS32 1
  347. # define LZO_INFO_OS "dos32"
  348. # else
  349. # error "check your limits.h header"
  350. # endif
  351. #elif defined(__WATCOMC__)
  352. # if defined(__NT__) && (UINT_MAX == LZO_0xffffL)
  353. # define LZO_OS_DOS16 1
  354. # define LZO_INFO_OS "dos16"
  355. # elif defined(__NT__) && (__WATCOMC__ < 1100)
  356. # define LZO_OS_WIN32 1
  357. # define LZO_INFO_OS "win32"
  358. # elif defined(__linux__) || defined(__LINUX__)
  359. # define LZO_OS_POSIX 1
  360. # define LZO_INFO_OS "posix"
  361. # else
  362. # error "please specify a target using the -bt compiler option"
  363. # endif
  364. #elif defined(__palmos__)
  365. # define LZO_OS_PALMOS 1
  366. # define LZO_INFO_OS "palmos"
  367. #elif defined(__TOS__) || defined(__atarist__)
  368. # define LZO_OS_TOS 1
  369. # define LZO_INFO_OS "tos"
  370. #elif defined(macintosh) && !defined(__ppc__)
  371. # define LZO_OS_MACCLASSIC 1
  372. # define LZO_INFO_OS "macclassic"
  373. #elif defined(__VMS)
  374. # define LZO_OS_VMS 1
  375. # define LZO_INFO_OS "vms"
  376. #elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
  377. # define LZO_OS_CONSOLE 1
  378. # define LZO_OS_CONSOLE_PS2 1
  379. # define LZO_INFO_OS "console"
  380. # define LZO_INFO_OS_CONSOLE "ps2"
  381. #elif (defined(__mips__) && defined(__psp__))
  382. # define LZO_OS_CONSOLE 1
  383. # define LZO_OS_CONSOLE_PSP 1
  384. # define LZO_INFO_OS "console"
  385. # define LZO_INFO_OS_CONSOLE "psp"
  386. #else
  387. # define LZO_OS_POSIX 1
  388. # define LZO_INFO_OS "posix"
  389. #endif
  390. #if (LZO_OS_POSIX)
  391. # if defined(_AIX) || defined(__AIX__) || defined(__aix__)
  392. # define LZO_OS_POSIX_AIX 1
  393. # define LZO_INFO_OS_POSIX "aix"
  394. # elif defined(__FreeBSD__)
  395. # define LZO_OS_POSIX_FREEBSD 1
  396. # define LZO_INFO_OS_POSIX "freebsd"
  397. # elif defined(__hpux__) || defined(__hpux)
  398. # define LZO_OS_POSIX_HPUX 1
  399. # define LZO_INFO_OS_POSIX "hpux"
  400. # elif defined(__INTERIX)
  401. # define LZO_OS_POSIX_INTERIX 1
  402. # define LZO_INFO_OS_POSIX "interix"
  403. # elif defined(__IRIX__) || defined(__irix__)
  404. # define LZO_OS_POSIX_IRIX 1
  405. # define LZO_INFO_OS_POSIX "irix"
  406. # elif defined(__linux__) || defined(__linux) || defined(__LINUX__)
  407. # define LZO_OS_POSIX_LINUX 1
  408. # define LZO_INFO_OS_POSIX "linux"
  409. # elif defined(__APPLE__) || defined(__MACOS__)
  410. # define LZO_OS_POSIX_MACOSX 1
  411. # define LZO_INFO_OS_POSIX "macosx"
  412. # elif defined(__minix__) || defined(__minix)
  413. # define LZO_OS_POSIX_MINIX 1
  414. # define LZO_INFO_OS_POSIX "minix"
  415. # elif defined(__NetBSD__)
  416. # define LZO_OS_POSIX_NETBSD 1
  417. # define LZO_INFO_OS_POSIX "netbsd"
  418. # elif defined(__OpenBSD__)
  419. # define LZO_OS_POSIX_OPENBSD 1
  420. # define LZO_INFO_OS_POSIX "openbsd"
  421. # elif defined(__osf__)
  422. # define LZO_OS_POSIX_OSF 1
  423. # define LZO_INFO_OS_POSIX "osf"
  424. # elif defined(__solaris__) || defined(__sun)
  425. # if defined(__SVR4) || defined(__svr4__)
  426. # define LZO_OS_POSIX_SOLARIS 1
  427. # define LZO_INFO_OS_POSIX "solaris"
  428. # else
  429. # define LZO_OS_POSIX_SUNOS 1
  430. # define LZO_INFO_OS_POSIX "sunos"
  431. # endif
  432. # elif defined(__ultrix__) || defined(__ultrix)
  433. # define LZO_OS_POSIX_ULTRIX 1
  434. # define LZO_INFO_OS_POSIX "ultrix"
  435. # elif defined(_UNICOS)
  436. # define LZO_OS_POSIX_UNICOS 1
  437. # define LZO_INFO_OS_POSIX "unicos"
  438. # else
  439. # define LZO_OS_POSIX_UNKNOWN 1
  440. # define LZO_INFO_OS_POSIX "unknown"
  441. # endif
  442. #endif
  443. #endif
  444. #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
  445. # if (UINT_MAX != LZO_0xffffL)
  446. # error "this should not happen"
  447. # endif
  448. # if (ULONG_MAX != LZO_0xffffffffL)
  449. # error "this should not happen"
  450. # endif
  451. #endif
  452. #if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64)
  453. # if (UINT_MAX != LZO_0xffffffffL)
  454. # error "this should not happen"
  455. # endif
  456. # if (ULONG_MAX != LZO_0xffffffffL)
  457. # error "this should not happen"
  458. # endif
  459. #endif
  460. #if defined(CIL) && defined(_GNUCC) && defined(__GNUC__)
  461. # define LZO_CC_CILLY 1
  462. # define LZO_INFO_CC "Cilly"
  463. # if defined(__CILLY__)
  464. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__)
  465. # else
  466. # define LZO_INFO_CCVER "unknown"
  467. # endif
  468. #elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__)
  469. # define LZO_CC_SDCC 1
  470. # define LZO_INFO_CC "sdcc"
  471. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC)
  472. #elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__)
  473. # define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__)
  474. # define LZO_INFO_CC "Pathscale C"
  475. # define LZO_INFO_CCVER __PATHSCALE__
  476. #elif defined(__INTEL_COMPILER)
  477. # define LZO_CC_INTELC 1
  478. # define LZO_INFO_CC "Intel C"
  479. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER)
  480. # if defined(_WIN32) || defined(_WIN64)
  481. # define LZO_CC_SYNTAX_MSC 1
  482. # else
  483. # define LZO_CC_SYNTAX_GNUC 1
  484. # endif
  485. #elif defined(__POCC__) && defined(_WIN32)
  486. # define LZO_CC_PELLESC 1
  487. # define LZO_INFO_CC "Pelles C"
  488. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__)
  489. #elif defined(__clang__) && defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
  490. # if defined(__GNUC_PATCHLEVEL__)
  491. # define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
  492. # else
  493. # define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
  494. # endif
  495. # if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__)
  496. # define LZO_CC_CLANG_CLANG (__clang_major__ * 0x10000L + __clang_minor__ * 0x100 + __clang_patchlevel__)
  497. # else
  498. # define LZO_CC_CLANG_CLANG 0x020700L
  499. # endif
  500. # define LZO_CC_CLANG LZO_CC_CLANG_GNUC
  501. # define LZO_INFO_CC "clang"
  502. # define LZO_INFO_CCVER __VERSION__
  503. #elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
  504. # if defined(__GNUC_PATCHLEVEL__)
  505. # define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
  506. # else
  507. # define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
  508. # endif
  509. # define LZO_CC_LLVM LZO_CC_LLVM_GNUC
  510. # define LZO_INFO_CC "llvm-gcc"
  511. # define LZO_INFO_CCVER __VERSION__
  512. #elif defined(__GNUC__) && defined(__VERSION__)
  513. # if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
  514. # define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
  515. # elif defined(__GNUC_MINOR__)
  516. # define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
  517. # else
  518. # define LZO_CC_GNUC (__GNUC__ * 0x10000L)
  519. # endif
  520. # define LZO_INFO_CC "gcc"
  521. # define LZO_INFO_CCVER __VERSION__
  522. #elif defined(__ACK__) && defined(_ACK)
  523. # define LZO_CC_ACK 1
  524. # define LZO_INFO_CC "Amsterdam Compiler Kit C"
  525. # define LZO_INFO_CCVER "unknown"
  526. #elif defined(__AZTEC_C__)
  527. # define LZO_CC_AZTECC 1
  528. # define LZO_INFO_CC "Aztec C"
  529. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__)
  530. #elif defined(__CODEGEARC__)
  531. # define LZO_CC_CODEGEARC 1
  532. # define LZO_INFO_CC "CodeGear C"
  533. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__)
  534. #elif defined(__BORLANDC__)
  535. # define LZO_CC_BORLANDC 1
  536. # define LZO_INFO_CC "Borland C"
  537. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__)
  538. #elif defined(_CRAYC) && defined(_RELEASE)
  539. # define LZO_CC_CRAYC 1
  540. # define LZO_INFO_CC "Cray C"
  541. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE)
  542. #elif defined(__DMC__) && defined(__SC__)
  543. # define LZO_CC_DMC 1
  544. # define LZO_INFO_CC "Digital Mars C"
  545. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__)
  546. #elif defined(__DECC)
  547. # define LZO_CC_DECC 1
  548. # define LZO_INFO_CC "DEC C"
  549. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC)
  550. #elif defined(__HIGHC__)
  551. # define LZO_CC_HIGHC 1
  552. # define LZO_INFO_CC "MetaWare High C"
  553. # define LZO_INFO_CCVER "unknown"
  554. #elif defined(__IAR_SYSTEMS_ICC__)
  555. # define LZO_CC_IARC 1
  556. # define LZO_INFO_CC "IAR C"
  557. # if defined(__VER__)
  558. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__)
  559. # else
  560. # define LZO_INFO_CCVER "unknown"
  561. # endif
  562. #elif defined(__IBMC__)
  563. # define LZO_CC_IBMC 1
  564. # define LZO_INFO_CC "IBM C"
  565. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__)
  566. #elif defined(__KEIL__) && defined(__C166__)
  567. # define LZO_CC_KEILC 1
  568. # define LZO_INFO_CC "Keil C"
  569. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__)
  570. #elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL)
  571. # define LZO_CC_LCCWIN32 1
  572. # define LZO_INFO_CC "lcc-win32"
  573. # define LZO_INFO_CCVER "unknown"
  574. #elif defined(__LCC__)
  575. # define LZO_CC_LCC 1
  576. # define LZO_INFO_CC "lcc"
  577. # if defined(__LCC_VERSION__)
  578. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__)
  579. # else
  580. # define LZO_INFO_CCVER "unknown"
  581. # endif
  582. #elif defined(_MSC_VER)
  583. # define LZO_CC_MSC 1
  584. # define LZO_INFO_CC "Microsoft C"
  585. # if defined(_MSC_FULL_VER)
  586. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER)
  587. # else
  588. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER)
  589. # endif
  590. #elif defined(__MWERKS__)
  591. # define LZO_CC_MWERKS 1
  592. # define LZO_INFO_CC "Metrowerks C"
  593. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__)
  594. #elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386)
  595. # define LZO_CC_NDPC 1
  596. # define LZO_INFO_CC "Microway NDP C"
  597. # define LZO_INFO_CCVER "unknown"
  598. #elif defined(__PACIFIC__)
  599. # define LZO_CC_PACIFICC 1
  600. # define LZO_INFO_CC "Pacific C"
  601. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__)
  602. #elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__))
  603. # define LZO_CC_PGI 1
  604. # define LZO_INFO_CC "Portland Group PGI C"
  605. # define LZO_INFO_CCVER "unknown"
  606. #elif defined(__PUREC__) && defined(__TOS__)
  607. # define LZO_CC_PUREC 1
  608. # define LZO_INFO_CC "Pure C"
  609. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__)
  610. #elif defined(__SC__) && defined(__ZTC__)
  611. # define LZO_CC_SYMANTECC 1
  612. # define LZO_INFO_CC "Symantec C"
  613. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__)
  614. #elif defined(__SUNPRO_C)
  615. # define LZO_INFO_CC "SunPro C"
  616. # if ((__SUNPRO_C)+0 > 0)
  617. # define LZO_CC_SUNPROC __SUNPRO_C
  618. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C)
  619. # else
  620. # define LZO_CC_SUNPROC 1
  621. # define LZO_INFO_CCVER "unknown"
  622. # endif
  623. #elif defined(__SUNPRO_CC)
  624. # define LZO_INFO_CC "SunPro C"
  625. # if ((__SUNPRO_CC)+0 > 0)
  626. # define LZO_CC_SUNPROC __SUNPRO_CC
  627. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC)
  628. # else
  629. # define LZO_CC_SUNPROC 1
  630. # define LZO_INFO_CCVER "unknown"
  631. # endif
  632. #elif defined(__TINYC__)
  633. # define LZO_CC_TINYC 1
  634. # define LZO_INFO_CC "Tiny C"
  635. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__)
  636. #elif defined(__TSC__)
  637. # define LZO_CC_TOPSPEEDC 1
  638. # define LZO_INFO_CC "TopSpeed C"
  639. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__)
  640. #elif defined(__WATCOMC__)
  641. # define LZO_CC_WATCOMC 1
  642. # define LZO_INFO_CC "Watcom C"
  643. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__)
  644. #elif defined(__TURBOC__)
  645. # define LZO_CC_TURBOC 1
  646. # define LZO_INFO_CC "Turbo C"
  647. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__)
  648. #elif defined(__ZTC__)
  649. # define LZO_CC_ZORTECHC 1
  650. # define LZO_INFO_CC "Zortech C"
  651. # if (__ZTC__ == 0x310)
  652. # define LZO_INFO_CCVER "0x310"
  653. # else
  654. # define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__)
  655. # endif
  656. #else
  657. # define LZO_CC_UNKNOWN 1
  658. # define LZO_INFO_CC "unknown"
  659. # define LZO_INFO_CCVER "unknown"
  660. #endif
  661. #if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER)
  662. # error "LZO_CC_MSC: _MSC_FULL_VER is not defined"
  663. #endif
  664. #if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY)
  665. # if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY)
  666. # if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E)
  667. # define LZO_ARCH_CRAY_MPP 1
  668. # elif defined(_CRAY1)
  669. # define LZO_ARCH_CRAY_PVP 1
  670. # endif
  671. # endif
  672. #endif
  673. #if !defined(__LZO_ARCH_OVERRIDE)
  674. #if (LZO_ARCH_GENERIC)
  675. # define LZO_INFO_ARCH "generic"
  676. #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
  677. # define LZO_ARCH_I086 1
  678. # define LZO_ARCH_IA16 1
  679. # define LZO_INFO_ARCH "i086"
  680. #elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)
  681. # define LZO_ARCH_ALPHA 1
  682. # define LZO_INFO_ARCH "alpha"
  683. #elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E))
  684. # define LZO_ARCH_ALPHA 1
  685. # define LZO_INFO_ARCH "alpha"
  686. #elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64)
  687. # define LZO_ARCH_AMD64 1
  688. # define LZO_INFO_ARCH "amd64"
  689. #elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB))
  690. # define LZO_ARCH_ARM 1
  691. # define LZO_ARCH_ARM_THUMB 1
  692. # define LZO_INFO_ARCH "arm_thumb"
  693. #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__)
  694. # define LZO_ARCH_ARM 1
  695. # if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1)
  696. # define LZO_ARCH_ARM_THUMB 1
  697. # define LZO_INFO_ARCH "arm_thumb"
  698. # elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2)
  699. # define LZO_INFO_ARCH "arm"
  700. # else
  701. # define LZO_INFO_ARCH "arm"
  702. # endif
  703. #elif defined(__arm__) || defined(_M_ARM)
  704. # define LZO_ARCH_ARM 1
  705. # define LZO_INFO_ARCH "arm"
  706. #elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__)
  707. # define LZO_ARCH_AVR 1
  708. # define LZO_INFO_ARCH "avr"
  709. #elif defined(__avr32__) || defined(__AVR32__)
  710. # define LZO_ARCH_AVR32 1
  711. # define LZO_INFO_ARCH "avr32"
  712. #elif defined(__bfin__)
  713. # define LZO_ARCH_BLACKFIN 1
  714. # define LZO_INFO_ARCH "blackfin"
  715. #elif (UINT_MAX == LZO_0xffffL) && defined(__C166__)
  716. # define LZO_ARCH_C166 1
  717. # define LZO_INFO_ARCH "c166"
  718. #elif defined(__cris__)
  719. # define LZO_ARCH_CRIS 1
  720. # define LZO_INFO_ARCH "cris"
  721. #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__)
  722. # define LZO_ARCH_EZ80 1
  723. # define LZO_INFO_ARCH "ez80"
  724. #elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
  725. # define LZO_ARCH_H8300 1
  726. # define LZO_INFO_ARCH "h8300"
  727. #elif defined(__hppa__) || defined(__hppa)
  728. # define LZO_ARCH_HPPA 1
  729. # define LZO_INFO_ARCH "hppa"
  730. #elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386)
  731. # define LZO_ARCH_I386 1
  732. # define LZO_ARCH_IA32 1
  733. # define LZO_INFO_ARCH "i386"
  734. #elif (LZO_CC_ZORTECHC && defined(__I86__))
  735. # define LZO_ARCH_I386 1
  736. # define LZO_ARCH_IA32 1
  737. # define LZO_INFO_ARCH "i386"
  738. #elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386)
  739. # define LZO_ARCH_I386 1
  740. # define LZO_ARCH_IA32 1
  741. # define LZO_INFO_ARCH "i386"
  742. #elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
  743. # define LZO_ARCH_IA64 1
  744. # define LZO_INFO_ARCH "ia64"
  745. #elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__)
  746. # define LZO_ARCH_M16C 1
  747. # define LZO_INFO_ARCH "m16c"
  748. #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__)
  749. # define LZO_ARCH_M16C 1
  750. # define LZO_INFO_ARCH "m16c"
  751. #elif defined(__m32r__)
  752. # define LZO_ARCH_M32R 1
  753. # define LZO_INFO_ARCH "m32r"
  754. #elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K)
  755. # define LZO_ARCH_M68K 1
  756. # define LZO_INFO_ARCH "m68k"
  757. #elif (UINT_MAX == LZO_0xffffL) && defined(__C251__)
  758. # define LZO_ARCH_MCS251 1
  759. # define LZO_INFO_ARCH "mcs251"
  760. #elif (UINT_MAX == LZO_0xffffL) && defined(__C51__)
  761. # define LZO_ARCH_MCS51 1
  762. # define LZO_INFO_ARCH "mcs51"
  763. #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__)
  764. # define LZO_ARCH_MCS51 1
  765. # define LZO_INFO_ARCH "mcs51"
  766. #elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000)
  767. # define LZO_ARCH_MIPS 1
  768. # define LZO_INFO_ARCH "mips"
  769. #elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__)
  770. # define LZO_ARCH_MSP430 1
  771. # define LZO_INFO_ARCH "msp430"
  772. #elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__)
  773. # define LZO_ARCH_MSP430 1
  774. # define LZO_INFO_ARCH "msp430"
  775. #elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR)
  776. # define LZO_ARCH_POWERPC 1
  777. # define LZO_INFO_ARCH "powerpc"
  778. #elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x)
  779. # define LZO_ARCH_S390 1
  780. # define LZO_INFO_ARCH "s390"
  781. #elif defined(__sh__) || defined(_M_SH)
  782. # define LZO_ARCH_SH 1
  783. # define LZO_INFO_ARCH "sh"
  784. #elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8)
  785. # define LZO_ARCH_SPARC 1
  786. # define LZO_INFO_ARCH "sparc"
  787. #elif defined(__SPU__)
  788. # define LZO_ARCH_SPU 1
  789. # define LZO_INFO_ARCH "spu"
  790. #elif (UINT_MAX == LZO_0xffffL) && defined(__z80)
  791. # define LZO_ARCH_Z80 1
  792. # define LZO_INFO_ARCH "z80"
  793. #elif (LZO_ARCH_CRAY_PVP)
  794. # if defined(_CRAYSV1)
  795. # define LZO_ARCH_CRAY_SV1 1
  796. # define LZO_INFO_ARCH "cray_sv1"
  797. # elif (_ADDR64)
  798. # define LZO_ARCH_CRAY_T90 1
  799. # define LZO_INFO_ARCH "cray_t90"
  800. # elif (_ADDR32)
  801. # define LZO_ARCH_CRAY_YMP 1
  802. # define LZO_INFO_ARCH "cray_ymp"
  803. # else
  804. # define LZO_ARCH_CRAY_XMP 1
  805. # define LZO_INFO_ARCH "cray_xmp"
  806. # endif
  807. #else
  808. # define LZO_ARCH_UNKNOWN 1
  809. # define LZO_INFO_ARCH "unknown"
  810. #endif
  811. #endif
  812. #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2)
  813. # error "FIXME - missing define for CPU architecture"
  814. #endif
  815. #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32)
  816. # error "FIXME - missing WIN32 define for CPU architecture"
  817. #endif
  818. #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64)
  819. # error "FIXME - missing WIN64 define for CPU architecture"
  820. #endif
  821. #if (LZO_OS_OS216 || LZO_OS_WIN16)
  822. # define LZO_ARCH_I086PM 1
  823. # define LZO_ARCH_IA16PM 1
  824. #elif 1 && (LZO_OS_DOS16 && defined(BLX286))
  825. # define LZO_ARCH_I086PM 1
  826. # define LZO_ARCH_IA16PM 1
  827. #elif 1 && (LZO_OS_DOS16 && defined(DOSX286))
  828. # define LZO_ARCH_I086PM 1
  829. # define LZO_ARCH_IA16PM 1
  830. #elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__))
  831. # define LZO_ARCH_I086PM 1
  832. # define LZO_ARCH_IA16PM 1
  833. #endif
  834. #if (LZO_ARCH_ARM_THUMB) && !(LZO_ARCH_ARM)
  835. # error "this should not happen"
  836. #endif
  837. #if (LZO_ARCH_I086PM) && !(LZO_ARCH_I086)
  838. # error "this should not happen"
  839. #endif
  840. #if (LZO_ARCH_I086)
  841. # if (UINT_MAX != LZO_0xffffL)
  842. # error "this should not happen"
  843. # endif
  844. # if (ULONG_MAX != LZO_0xffffffffL)
  845. # error "this should not happen"
  846. # endif
  847. #endif
  848. #if (LZO_ARCH_I386)
  849. # if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__)
  850. # error "this should not happen"
  851. # endif
  852. # if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__)
  853. # error "this should not happen"
  854. # endif
  855. # if (ULONG_MAX != LZO_0xffffffffL)
  856. # error "this should not happen"
  857. # endif
  858. #endif
  859. #if !defined(__LZO_MM_OVERRIDE)
  860. #if (LZO_ARCH_I086)
  861. #if (UINT_MAX != LZO_0xffffL)
  862. # error "this should not happen"
  863. #endif
  864. #if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM)
  865. # define LZO_MM_TINY 1
  866. #elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM)
  867. # define LZO_MM_HUGE 1
  868. #elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL)
  869. # define LZO_MM_SMALL 1
  870. #elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM)
  871. # define LZO_MM_MEDIUM 1
  872. #elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM)
  873. # define LZO_MM_COMPACT 1
  874. #elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL)
  875. # define LZO_MM_LARGE 1
  876. #elif (LZO_CC_AZTECC)
  877. # if defined(_LARGE_CODE) && defined(_LARGE_DATA)
  878. # define LZO_MM_LARGE 1
  879. # elif defined(_LARGE_CODE)
  880. # define LZO_MM_MEDIUM 1
  881. # elif defined(_LARGE_DATA)
  882. # define LZO_MM_COMPACT 1
  883. # else
  884. # define LZO_MM_SMALL 1
  885. # endif
  886. #elif (LZO_CC_ZORTECHC && defined(__VCM__))
  887. # define LZO_MM_LARGE 1
  888. #else
  889. # error "unknown memory model"
  890. #endif
  891. #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
  892. #define LZO_HAVE_MM_HUGE_PTR 1
  893. #define LZO_HAVE_MM_HUGE_ARRAY 1
  894. #if (LZO_MM_TINY)
  895. # undef LZO_HAVE_MM_HUGE_ARRAY
  896. #endif
  897. #if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC)
  898. # undef LZO_HAVE_MM_HUGE_PTR
  899. # undef LZO_HAVE_MM_HUGE_ARRAY
  900. #elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
  901. # undef LZO_HAVE_MM_HUGE_ARRAY
  902. #elif (LZO_CC_MSC && defined(_QC))
  903. # undef LZO_HAVE_MM_HUGE_ARRAY
  904. # if (_MSC_VER < 600)
  905. # undef LZO_HAVE_MM_HUGE_PTR
  906. # endif
  907. #elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295))
  908. # undef LZO_HAVE_MM_HUGE_ARRAY
  909. #endif
  910. #if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR)
  911. # if (LZO_OS_DOS16)
  912. # error "this should not happen"
  913. # elif (LZO_CC_ZORTECHC)
  914. # else
  915. # error "this should not happen"
  916. # endif
  917. #endif
  918. #ifdef __cplusplus
  919. extern "C" {
  920. #endif
  921. #if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200))
  922. extern void __near __cdecl _AHSHIFT(void);
  923. # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
  924. #elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
  925. extern void __near __cdecl _AHSHIFT(void);
  926. # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
  927. #elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC)
  928. extern void __near __cdecl _AHSHIFT(void);
  929. # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
  930. #elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295))
  931. extern void __near __cdecl _AHSHIFT(void);
  932. # define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
  933. #elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16)
  934. # define LZO_MM_AHSHIFT 12
  935. #elif (LZO_CC_WATCOMC)
  936. extern unsigned char _HShift;
  937. # define LZO_MM_AHSHIFT ((unsigned) _HShift)
  938. #else
  939. # error "FIXME - implement LZO_MM_AHSHIFT"
  940. #endif
  941. #ifdef __cplusplus
  942. }
  943. #endif
  944. #endif
  945. #elif (LZO_ARCH_C166)
  946. #if !defined(__MODEL__)
  947. # error "FIXME - C166 __MODEL__"
  948. #elif ((__MODEL__) == 0)
  949. # define LZO_MM_SMALL 1
  950. #elif ((__MODEL__) == 1)
  951. # define LZO_MM_SMALL 1
  952. #elif ((__MODEL__) == 2)
  953. # define LZO_MM_LARGE 1
  954. #elif ((__MODEL__) == 3)
  955. # define LZO_MM_TINY 1
  956. #elif ((__MODEL__) == 4)
  957. # define LZO_MM_XTINY 1
  958. #elif ((__MODEL__) == 5)
  959. # define LZO_MM_XSMALL 1
  960. #else
  961. # error "FIXME - C166 __MODEL__"
  962. #endif
  963. #elif (LZO_ARCH_MCS251)
  964. #if !defined(__MODEL__)
  965. # error "FIXME - MCS251 __MODEL__"
  966. #elif ((__MODEL__) == 0)
  967. # define LZO_MM_SMALL 1
  968. #elif ((__MODEL__) == 2)
  969. # define LZO_MM_LARGE 1
  970. #elif ((__MODEL__) == 3)
  971. # define LZO_MM_TINY 1
  972. #elif ((__MODEL__) == 4)
  973. # define LZO_MM_XTINY 1
  974. #elif ((__MODEL__) == 5)
  975. # define LZO_MM_XSMALL 1
  976. #else
  977. # error "FIXME - MCS251 __MODEL__"
  978. #endif
  979. #elif (LZO_ARCH_MCS51)
  980. #if !defined(__MODEL__)
  981. # error "FIXME - MCS51 __MODEL__"
  982. #elif ((__MODEL__) == 1)
  983. # define LZO_MM_SMALL 1
  984. #elif ((__MODEL__) == 2)
  985. # define LZO_MM_LARGE 1
  986. #elif ((__MODEL__) == 3)
  987. # define LZO_MM_TINY 1
  988. #elif ((__MODEL__) == 4)
  989. # define LZO_MM_XTINY 1
  990. #elif ((__MODEL__) == 5)
  991. # define LZO_MM_XSMALL 1
  992. #else
  993. # error "FIXME - MCS51 __MODEL__"
  994. #endif
  995. #elif (LZO_ARCH_CRAY_PVP)
  996. # define LZO_MM_PVP 1
  997. #else
  998. # define LZO_MM_FLAT 1
  999. #endif
  1000. #if (LZO_MM_COMPACT)
  1001. # define LZO_INFO_MM "compact"
  1002. #elif (LZO_MM_FLAT)
  1003. # define LZO_INFO_MM "flat"
  1004. #elif (LZO_MM_HUGE)
  1005. # define LZO_INFO_MM "huge"
  1006. #elif (LZO_MM_LARGE)
  1007. # define LZO_INFO_MM "large"
  1008. #elif (LZO_MM_MEDIUM)
  1009. # define LZO_INFO_MM "medium"
  1010. #elif (LZO_MM_PVP)
  1011. # define LZO_INFO_MM "pvp"
  1012. #elif (LZO_MM_SMALL)
  1013. # define LZO_INFO_MM "small"
  1014. #elif (LZO_MM_TINY)
  1015. # define LZO_INFO_MM "tiny"
  1016. #else
  1017. # error "unknown memory model"
  1018. #endif
  1019. #endif
  1020. #if defined(SIZEOF_SHORT)
  1021. # define LZO_SIZEOF_SHORT (SIZEOF_SHORT)
  1022. #endif
  1023. #if defined(SIZEOF_INT)
  1024. # define LZO_SIZEOF_INT (SIZEOF_INT)
  1025. #endif
  1026. #if defined(SIZEOF_LONG)
  1027. # define LZO_SIZEOF_LONG (SIZEOF_LONG)
  1028. #endif
  1029. #if defined(SIZEOF_LONG_LONG)
  1030. # define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG)
  1031. #endif
  1032. #if defined(SIZEOF___INT16)
  1033. # define LZO_SIZEOF___INT16 (SIZEOF___INT16)
  1034. #endif
  1035. #if defined(SIZEOF___INT32)
  1036. # define LZO_SIZEOF___INT32 (SIZEOF___INT32)
  1037. #endif
  1038. #if defined(SIZEOF___INT64)
  1039. # define LZO_SIZEOF___INT64 (SIZEOF___INT64)
  1040. #endif
  1041. #if defined(SIZEOF_VOID_P)
  1042. # define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P)
  1043. #endif
  1044. #if defined(SIZEOF_SIZE_T)
  1045. # define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T)
  1046. #endif
  1047. #if defined(SIZEOF_PTRDIFF_T)
  1048. # define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T)
  1049. #endif
  1050. #define __LZO_LSR(x,b) (((x)+0ul) >> (b))
  1051. #if !defined(LZO_SIZEOF_SHORT)
  1052. # if (LZO_ARCH_CRAY_PVP)
  1053. # define LZO_SIZEOF_SHORT 8
  1054. # elif (USHRT_MAX == LZO_0xffffL)
  1055. # define LZO_SIZEOF_SHORT 2
  1056. # elif (__LZO_LSR(USHRT_MAX,7) == 1)
  1057. # define LZO_SIZEOF_SHORT 1
  1058. # elif (__LZO_LSR(USHRT_MAX,15) == 1)
  1059. # define LZO_SIZEOF_SHORT 2
  1060. # elif (__LZO_LSR(USHRT_MAX,31) == 1)
  1061. # define LZO_SIZEOF_SHORT 4
  1062. # elif (__LZO_LSR(USHRT_MAX,63) == 1)
  1063. # define LZO_SIZEOF_SHORT 8
  1064. # elif (__LZO_LSR(USHRT_MAX,127) == 1)
  1065. # define LZO_SIZEOF_SHORT 16
  1066. # else
  1067. # error "LZO_SIZEOF_SHORT"
  1068. # endif
  1069. #endif
  1070. #if !defined(LZO_SIZEOF_INT)
  1071. # if (LZO_ARCH_CRAY_PVP)
  1072. # define LZO_SIZEOF_INT 8
  1073. # elif (UINT_MAX == LZO_0xffffL)
  1074. # define LZO_SIZEOF_INT 2
  1075. # elif (UINT_MAX == LZO_0xffffffffL)
  1076. # define LZO_SIZEOF_INT 4
  1077. # elif (__LZO_LSR(UINT_MAX,7) == 1)
  1078. # define LZO_SIZEOF_INT 1
  1079. # elif (__LZO_LSR(UINT_MAX,15) == 1)
  1080. # define LZO_SIZEOF_INT 2
  1081. # elif (__LZO_LSR(UINT_MAX,31) == 1)
  1082. # define LZO_SIZEOF_INT 4
  1083. # elif (__LZO_LSR(UINT_MAX,63) == 1)
  1084. # define LZO_SIZEOF_INT 8
  1085. # elif (__LZO_LSR(UINT_MAX,127) == 1)
  1086. # define LZO_SIZEOF_INT 16
  1087. # else
  1088. # error "LZO_SIZEOF_INT"
  1089. # endif
  1090. #endif
  1091. #if !defined(LZO_SIZEOF_LONG)
  1092. # if (ULONG_MAX == LZO_0xffffffffL)
  1093. # define LZO_SIZEOF_LONG 4
  1094. # elif (__LZO_LSR(ULONG_MAX,7) == 1)
  1095. # define LZO_SIZEOF_LONG 1
  1096. # elif (__LZO_LSR(ULONG_MAX,15) == 1)
  1097. # define LZO_SIZEOF_LONG 2
  1098. # elif (__LZO_LSR(ULONG_MAX,31) == 1)
  1099. # define LZO_SIZEOF_LONG 4
  1100. # elif (__LZO_LSR(ULONG_MAX,63) == 1)
  1101. # define LZO_SIZEOF_LONG 8
  1102. # elif (__LZO_LSR(ULONG_MAX,127) == 1)
  1103. # define LZO_SIZEOF_LONG 16
  1104. # else
  1105. # error "LZO_SIZEOF_LONG"
  1106. # endif
  1107. #endif
  1108. #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
  1109. #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
  1110. # if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__)
  1111. # if (LZO_CC_GNUC >= 0x030300ul)
  1112. # if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0)
  1113. # define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG
  1114. # elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1)
  1115. # define LZO_SIZEOF_LONG_LONG 4
  1116. # endif
  1117. # endif
  1118. # endif
  1119. #endif
  1120. #endif
  1121. #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
  1122. #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
  1123. #if (LZO_ARCH_I086 && LZO_CC_DMC)
  1124. #elif (LZO_CC_CILLY) && defined(__GNUC__)
  1125. # define LZO_SIZEOF_LONG_LONG 8
  1126. #elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1127. # define LZO_SIZEOF_LONG_LONG 8
  1128. #elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400))
  1129. # define LZO_SIZEOF_LONG_LONG 8
  1130. #elif (LZO_OS_WIN64 || defined(_WIN64))
  1131. # define LZO_SIZEOF___INT64 8
  1132. #elif (LZO_ARCH_I386 && (LZO_CC_DMC))
  1133. # define LZO_SIZEOF_LONG_LONG 8
  1134. #elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700)))
  1135. # define LZO_SIZEOF_LONG_LONG 8
  1136. #elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__)))
  1137. # define LZO_SIZEOF_LONG_LONG 8
  1138. #elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC))
  1139. # define LZO_SIZEOF_LONG_LONG 8
  1140. #elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC))
  1141. # define LZO_SIZEOF___INT64 8
  1142. #elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC))
  1143. # define LZO_SIZEOF___INT64 8
  1144. #elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520)))
  1145. # define LZO_SIZEOF___INT64 8
  1146. #elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100)))
  1147. # define LZO_SIZEOF___INT64 8
  1148. #elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64))
  1149. # define LZO_SIZEOF___INT64 8
  1150. #elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__)
  1151. # define LZO_SIZEOF_LONG_LONG 8
  1152. #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
  1153. # define LZO_SIZEOF_LONG_LONG 8
  1154. #elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2)
  1155. #elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
  1156. # define LZO_SIZEOF_LONG_LONG 8
  1157. #endif
  1158. #endif
  1159. #endif
  1160. #if defined(__cplusplus) && (LZO_CC_GNUC)
  1161. # if (LZO_CC_GNUC < 0x020800ul)
  1162. # undef LZO_SIZEOF_LONG_LONG
  1163. # endif
  1164. #endif
  1165. #if (LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG)
  1166. # undef LZO_SIZEOF_LONG_LONG
  1167. #endif
  1168. #if !defined(LZO_SIZEOF_VOID_P)
  1169. #if (LZO_ARCH_I086)
  1170. # define __LZO_WORDSIZE 2
  1171. # if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
  1172. # define LZO_SIZEOF_VOID_P 2
  1173. # elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
  1174. # define LZO_SIZEOF_VOID_P 4
  1175. # else
  1176. # error "LZO_MM"
  1177. # endif
  1178. #elif (LZO_ARCH_AVR || LZO_ARCH_Z80)
  1179. # define __LZO_WORDSIZE 1
  1180. # define LZO_SIZEOF_VOID_P 2
  1181. #elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430)
  1182. # define LZO_SIZEOF_VOID_P 2
  1183. #elif (LZO_ARCH_H8300)
  1184. # if defined(__NORMAL_MODE__)
  1185. # define __LZO_WORDSIZE 4
  1186. # define LZO_SIZEOF_VOID_P 2
  1187. # elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
  1188. # define __LZO_WORDSIZE 4
  1189. # define LZO_SIZEOF_VOID_P 4
  1190. # else
  1191. # define __LZO_WORDSIZE 2
  1192. # define LZO_SIZEOF_VOID_P 2
  1193. # endif
  1194. # if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4)
  1195. # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT
  1196. # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT
  1197. # endif
  1198. #elif (LZO_ARCH_M16C)
  1199. # define __LZO_WORDSIZE 2
  1200. # if defined(__m32c_cpu__) || defined(__m32cm_cpu__)
  1201. # define LZO_SIZEOF_VOID_P 4
  1202. # else
  1203. # define LZO_SIZEOF_VOID_P 2
  1204. # endif
  1205. #elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
  1206. # define __LZO_WORDSIZE 8
  1207. # define LZO_SIZEOF_VOID_P 4
  1208. #elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64)
  1209. # define __LZO_WORDSIZE 8
  1210. # define LZO_SIZEOF_VOID_P 8
  1211. #elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__)
  1212. # define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG
  1213. # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
  1214. # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
  1215. #elif (LZO_OS_OS400 || defined(__OS400__))
  1216. # define __LZO_WORDSIZE LZO_SIZEOF_LONG
  1217. # define LZO_SIZEOF_VOID_P 16
  1218. # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
  1219. # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
  1220. #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
  1221. # define LZO_SIZEOF_VOID_P 8
  1222. # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
  1223. # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
  1224. #elif (LZO_ARCH_SPU)
  1225. # if 0
  1226. # define __LZO_WORDSIZE 16
  1227. # endif
  1228. # define LZO_SIZEOF_VOID_P 4
  1229. #else
  1230. # define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG
  1231. #endif
  1232. #endif
  1233. #if !defined(LZO_WORDSIZE)
  1234. # if defined(__LZO_WORDSIZE)
  1235. # define LZO_WORDSIZE __LZO_WORDSIZE
  1236. # else
  1237. # define LZO_WORDSIZE LZO_SIZEOF_VOID_P
  1238. # endif
  1239. #endif
  1240. #if !defined(LZO_SIZEOF_SIZE_T)
  1241. #if (LZO_ARCH_I086 || LZO_ARCH_M16C)
  1242. # define LZO_SIZEOF_SIZE_T 2
  1243. #else
  1244. # define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P
  1245. #endif
  1246. #endif
  1247. #if !defined(LZO_SIZEOF_PTRDIFF_T)
  1248. #if (LZO_ARCH_I086)
  1249. # if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE)
  1250. # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P
  1251. # elif (LZO_MM_COMPACT || LZO_MM_LARGE)
  1252. # if (LZO_CC_BORLANDC || LZO_CC_TURBOC)
  1253. # define LZO_SIZEOF_PTRDIFF_T 4
  1254. # else
  1255. # define LZO_SIZEOF_PTRDIFF_T 2
  1256. # endif
  1257. # else
  1258. # error "LZO_MM"
  1259. # endif
  1260. #else
  1261. # define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T
  1262. #endif
  1263. #endif
  1264. #if (LZO_ABI_NEUTRAL_ENDIAN)
  1265. # undef LZO_ABI_BIG_ENDIAN
  1266. # undef LZO_ABI_LITTLE_ENDIAN
  1267. #elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN)
  1268. #if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP)
  1269. # define LZO_ABI_BIG_ENDIAN 1
  1270. #elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64)
  1271. # define LZO_ABI_LITTLE_ENDIAN 1
  1272. #elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430)
  1273. # define LZO_ABI_LITTLE_ENDIAN 1
  1274. #elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390)
  1275. # define LZO_ABI_BIG_ENDIAN 1
  1276. #elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__)
  1277. # if (__LITTLE_ENDIAN__ == 1)
  1278. # define LZO_ABI_LITTLE_ENDIAN 1
  1279. # else
  1280. # define LZO_ABI_BIG_ENDIAN 1
  1281. # endif
  1282. #elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
  1283. # define LZO_ABI_BIG_ENDIAN 1
  1284. #elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
  1285. # define LZO_ABI_LITTLE_ENDIAN 1
  1286. #elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__)
  1287. # define LZO_ABI_BIG_ENDIAN 1
  1288. #elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__)
  1289. # define LZO_ABI_LITTLE_ENDIAN 1
  1290. #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__)
  1291. # define LZO_ABI_BIG_ENDIAN 1
  1292. #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__)
  1293. # define LZO_ABI_LITTLE_ENDIAN 1
  1294. #endif
  1295. #endif
  1296. #if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN)
  1297. # error "this should not happen"
  1298. #endif
  1299. #if (LZO_ABI_BIG_ENDIAN)
  1300. # define LZO_INFO_ABI_ENDIAN "be"
  1301. #elif (LZO_ABI_LITTLE_ENDIAN)
  1302. # define LZO_INFO_ABI_ENDIAN "le"
  1303. #elif (LZO_ABI_NEUTRAL_ENDIAN)
  1304. # define LZO_INFO_ABI_ENDIAN "neutral"
  1305. #endif
  1306. #if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
  1307. # define LZO_ABI_I8LP16 1
  1308. # define LZO_INFO_ABI_PM "i8lp16"
  1309. #elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
  1310. # define LZO_ABI_ILP16 1
  1311. # define LZO_INFO_ABI_PM "ilp16"
  1312. #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4)
  1313. # define LZO_ABI_ILP32 1
  1314. # define LZO_INFO_ABI_PM "ilp32"
  1315. #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8)
  1316. # define LZO_ABI_LLP64 1
  1317. # define LZO_INFO_ABI_PM "llp64"
  1318. #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
  1319. # define LZO_ABI_LP64 1
  1320. # define LZO_INFO_ABI_PM "lp64"
  1321. #elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
  1322. # define LZO_ABI_ILP64 1
  1323. # define LZO_INFO_ABI_PM "ilp64"
  1324. #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4)
  1325. # define LZO_ABI_IP32L64 1
  1326. # define LZO_INFO_ABI_PM "ip32l64"
  1327. #endif
  1328. #if !defined(__LZO_LIBC_OVERRIDE)
  1329. #if (LZO_LIBC_NAKED)
  1330. # define LZO_INFO_LIBC "naked"
  1331. #elif (LZO_LIBC_FREESTANDING)
  1332. # define LZO_INFO_LIBC "freestanding"
  1333. #elif (LZO_LIBC_MOSTLY_FREESTANDING)
  1334. # define LZO_INFO_LIBC "mfreestanding"
  1335. #elif (LZO_LIBC_ISOC90)
  1336. # define LZO_INFO_LIBC "isoc90"
  1337. #elif (LZO_LIBC_ISOC99)
  1338. # define LZO_INFO_LIBC "isoc99"
  1339. #elif defined(__dietlibc__)
  1340. # define LZO_LIBC_DIETLIBC 1
  1341. # define LZO_INFO_LIBC "dietlibc"
  1342. #elif defined(_NEWLIB_VERSION)
  1343. # define LZO_LIBC_NEWLIB 1
  1344. # define LZO_INFO_LIBC "newlib"
  1345. #elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__)
  1346. # if defined(__UCLIBC_SUBLEVEL__)
  1347. # define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__)
  1348. # else
  1349. # define LZO_LIBC_UCLIBC 0x00090bL
  1350. # endif
  1351. # define LZO_INFO_LIBC "uclibc"
  1352. #elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
  1353. # define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100)
  1354. # define LZO_INFO_LIBC "glibc"
  1355. #elif (LZO_CC_MWERKS) && defined(__MSL__)
  1356. # define LZO_LIBC_MSL __MSL__
  1357. # define LZO_INFO_LIBC "msl"
  1358. #elif 1 && defined(__IAR_SYSTEMS_ICC__)
  1359. # define LZO_LIBC_ISOC90 1
  1360. # define LZO_INFO_LIBC "isoc90"
  1361. #else
  1362. # define LZO_LIBC_DEFAULT 1
  1363. # define LZO_INFO_LIBC "default"
  1364. #endif
  1365. #endif
  1366. #if !defined(__lzo_gnuc_extension__)
  1367. #if (LZO_CC_GNUC >= 0x020800ul)
  1368. # define __lzo_gnuc_extension__ __extension__
  1369. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1370. # define __lzo_gnuc_extension__ __extension__
  1371. #else
  1372. # define __lzo_gnuc_extension__ /*empty*/
  1373. #endif
  1374. #endif
  1375. #if !defined(__lzo_ua_volatile)
  1376. # define __lzo_ua_volatile volatile
  1377. #endif
  1378. #if !defined(__lzo_alignof)
  1379. #if (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
  1380. # define __lzo_alignof(e) __alignof__(e)
  1381. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700))
  1382. # define __lzo_alignof(e) __alignof__(e)
  1383. #elif (LZO_CC_MSC && (_MSC_VER >= 1300))
  1384. # define __lzo_alignof(e) __alignof(e)
  1385. #elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100))
  1386. # define __lzo_alignof(e) __alignof__(e)
  1387. #endif
  1388. #endif
  1389. #if defined(__lzo_alignof)
  1390. # define __lzo_HAVE_alignof 1
  1391. #endif
  1392. #if !defined(__lzo_constructor)
  1393. #if (LZO_CC_GNUC >= 0x030400ul)
  1394. # define __lzo_constructor __attribute__((__constructor__,__used__))
  1395. #elif (LZO_CC_GNUC >= 0x020700ul)
  1396. # define __lzo_constructor __attribute__((__constructor__))
  1397. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1398. # define __lzo_constructor __attribute__((__constructor__))
  1399. #endif
  1400. #endif
  1401. #if defined(__lzo_constructor)
  1402. # define __lzo_HAVE_constructor 1
  1403. #endif
  1404. #if !defined(__lzo_destructor)
  1405. #if (LZO_CC_GNUC >= 0x030400ul)
  1406. # define __lzo_destructor __attribute__((__destructor__,__used__))
  1407. #elif (LZO_CC_GNUC >= 0x020700ul)
  1408. # define __lzo_destructor __attribute__((__destructor__))
  1409. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1410. # define __lzo_destructor __attribute__((__destructor__))
  1411. #endif
  1412. #endif
  1413. #if defined(__lzo_destructor)
  1414. # define __lzo_HAVE_destructor 1
  1415. #endif
  1416. #if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor)
  1417. # error "this should not happen"
  1418. #endif
  1419. #if !defined(__lzo_inline)
  1420. #if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295))
  1421. #elif defined(__cplusplus)
  1422. # define __lzo_inline inline
  1423. #elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550))
  1424. # define __lzo_inline __inline
  1425. #elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
  1426. # define __lzo_inline __inline__
  1427. #elif (LZO_CC_DMC)
  1428. # define __lzo_inline __inline
  1429. #elif (LZO_CC_INTELC)
  1430. # define __lzo_inline __inline
  1431. #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405))
  1432. # define __lzo_inline __inline
  1433. #elif (LZO_CC_MSC && (_MSC_VER >= 900))
  1434. # define __lzo_inline __inline
  1435. #elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100))
  1436. # define __lzo_inline __inline__
  1437. #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
  1438. # define __lzo_inline inline
  1439. #endif
  1440. #endif
  1441. #if defined(__lzo_inline)
  1442. # define __lzo_HAVE_inline 1
  1443. #else
  1444. # define __lzo_inline /*empty*/
  1445. #endif
  1446. #if !defined(__lzo_forceinline)
  1447. #if (LZO_CC_GNUC >= 0x030200ul)
  1448. # define __lzo_forceinline __inline__ __attribute__((__always_inline__))
  1449. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC)
  1450. # define __lzo_forceinline __forceinline
  1451. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC)
  1452. # define __lzo_forceinline __inline__ __attribute__((__always_inline__))
  1453. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1454. # define __lzo_forceinline __inline__ __attribute__((__always_inline__))
  1455. #elif (LZO_CC_MSC && (_MSC_VER >= 1200))
  1456. # define __lzo_forceinline __forceinline
  1457. #elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100))
  1458. # define __lzo_forceinline __inline__ __attribute__((__always_inline__))
  1459. #endif
  1460. #endif
  1461. #if defined(__lzo_forceinline)
  1462. # define __lzo_HAVE_forceinline 1
  1463. #else
  1464. # define __lzo_forceinline /*empty*/
  1465. #endif
  1466. #if !defined(__lzo_noinline)
  1467. #if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul)
  1468. # define __lzo_noinline __attribute__((__noinline__,__used__))
  1469. #elif (LZO_CC_GNUC >= 0x030200ul)
  1470. # define __lzo_noinline __attribute__((__noinline__))
  1471. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC)
  1472. # define __lzo_noinline __declspec(noinline)
  1473. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC)
  1474. # define __lzo_noinline __attribute__((__noinline__))
  1475. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1476. # define __lzo_noinline __attribute__((__noinline__))
  1477. #elif (LZO_CC_MSC && (_MSC_VER >= 1300))
  1478. # define __lzo_noinline __declspec(noinline)
  1479. #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64))
  1480. # if defined(__cplusplus)
  1481. # else
  1482. # define __lzo_noinline __declspec(noinline)
  1483. # endif
  1484. #elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100))
  1485. # define __lzo_noinline __attribute__((__noinline__))
  1486. #endif
  1487. #endif
  1488. #if defined(__lzo_noinline)
  1489. # define __lzo_HAVE_noinline 1
  1490. #else
  1491. # define __lzo_noinline /*empty*/
  1492. #endif
  1493. #if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline)
  1494. # error "this should not happen"
  1495. #endif
  1496. #if !defined(__lzo_noreturn)
  1497. #if (LZO_CC_GNUC >= 0x020700ul)
  1498. # define __lzo_noreturn __attribute__((__noreturn__))
  1499. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC)
  1500. # define __lzo_noreturn __declspec(noreturn)
  1501. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC)
  1502. # define __lzo_noreturn __attribute__((__noreturn__))
  1503. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1504. # define __lzo_noreturn __attribute__((__noreturn__))
  1505. #elif (LZO_CC_MSC && (_MSC_VER >= 1200))
  1506. # define __lzo_noreturn __declspec(noreturn)
  1507. #endif
  1508. #endif
  1509. #if defined(__lzo_noreturn)
  1510. # define __lzo_HAVE_noreturn 1
  1511. #else
  1512. # define __lzo_noreturn /*empty*/
  1513. #endif
  1514. #if !defined(__lzo_nothrow)
  1515. #if (LZO_CC_GNUC >= 0x030300ul)
  1516. # define __lzo_nothrow __attribute__((__nothrow__))
  1517. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus)
  1518. # define __lzo_nothrow __declspec(nothrow)
  1519. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 900) && LZO_CC_SYNTAX_GNUC)
  1520. # define __lzo_nothrow __attribute__((__nothrow__))
  1521. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1522. # define __lzo_nothrow __attribute__((__nothrow__))
  1523. #elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus)
  1524. # define __lzo_nothrow __declspec(nothrow)
  1525. #endif
  1526. #endif
  1527. #if defined(__lzo_nothrow)
  1528. # define __lzo_HAVE_nothrow 1
  1529. #else
  1530. # define __lzo_nothrow /*empty*/
  1531. #endif
  1532. #if !defined(__lzo_restrict)
  1533. #if (LZO_CC_GNUC >= 0x030400ul)
  1534. # define __lzo_restrict __restrict__
  1535. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC)
  1536. # define __lzo_restrict __restrict__
  1537. #elif (LZO_CC_CLANG || LZO_CC_LLVM)
  1538. # define __lzo_restrict __restrict__
  1539. #elif (LZO_CC_MSC && (_MSC_VER >= 1400))
  1540. # define __lzo_restrict __restrict
  1541. #endif
  1542. #endif
  1543. #if defined(__lzo_restrict)
  1544. # define __lzo_HAVE_restrict 1
  1545. #else
  1546. # define __lzo_restrict /*empty*/
  1547. #endif
  1548. #if !defined(__lzo_likely) && !defined(__lzo_unlikely)
  1549. #if (LZO_CC_GNUC >= 0x030200ul)
  1550. # define __lzo_likely(e) (__builtin_expect(!!(e),1))
  1551. # define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
  1552. #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
  1553. # define __lzo_likely(e) (__builtin_expect(!!(e),1))
  1554. # define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
  1555. #elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1556. # define __lzo_likely(e) (__builtin_expect(!!(e),1))
  1557. # define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
  1558. #endif
  1559. #endif
  1560. #if defined(__lzo_likely)
  1561. # define __lzo_HAVE_likely 1
  1562. #else
  1563. # define __lzo_likely(e) (e)
  1564. #endif
  1565. #if defined(__lzo_unlikely)
  1566. # define __lzo_HAVE_unlikely 1
  1567. #else
  1568. # define __lzo_unlikely(e) (e)
  1569. #endif
  1570. #if !defined(LZO_UNUSED)
  1571. # if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
  1572. # define LZO_UNUSED(var) ((void) &var)
  1573. # elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC)
  1574. # define LZO_UNUSED(var) if (&var) ; else
  1575. # elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1576. # define LZO_UNUSED(var) ((void) var)
  1577. # elif (LZO_CC_MSC && (_MSC_VER < 900))
  1578. # define LZO_UNUSED(var) if (&var) ; else
  1579. # elif (LZO_CC_KEILC)
  1580. # define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];}
  1581. # elif (LZO_CC_PACIFICC)
  1582. # define LZO_UNUSED(var) ((void) sizeof(var))
  1583. # elif (LZO_CC_WATCOMC) && defined(__cplusplus)
  1584. # define LZO_UNUSED(var) ((void) var)
  1585. # else
  1586. # define LZO_UNUSED(var) ((void) &var)
  1587. # endif
  1588. #endif
  1589. #if !defined(LZO_UNUSED_FUNC)
  1590. # if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
  1591. # define LZO_UNUSED_FUNC(func) ((void) func)
  1592. # elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC)
  1593. # define LZO_UNUSED_FUNC(func) if (func) ; else
  1594. # elif (LZO_CC_CLANG || LZO_CC_LLVM)
  1595. # define LZO_UNUSED_FUNC(func) ((void) &func)
  1596. # elif (LZO_CC_MSC && (_MSC_VER < 900))
  1597. # define LZO_UNUSED_FUNC(func) if (func) ; else
  1598. # elif (LZO_CC_MSC)
  1599. # define LZO_UNUSED_FUNC(func) ((void) &func)
  1600. # elif (LZO_CC_KEILC || LZO_CC_PELLESC)
  1601. # define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];}
  1602. # else
  1603. # define LZO_UNUSED_FUNC(func) ((void) func)
  1604. # endif
  1605. #endif
  1606. #if !defined(LZO_UNUSED_LABEL)
  1607. # if (LZO_CC_WATCOMC) && defined(__cplusplus)
  1608. # define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l
  1609. # elif (LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC)
  1610. # define LZO_UNUSED_LABEL(l) if (0) goto l
  1611. # else
  1612. # define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l
  1613. # endif
  1614. #endif
  1615. #if !defined(LZO_DEFINE_UNINITIALIZED_VAR)
  1616. # if 0
  1617. # define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var
  1618. # elif 0 && (LZO_CC_GNUC)
  1619. # define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var
  1620. # else
  1621. # define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init
  1622. # endif
  1623. #endif
  1624. #if !defined(LZO_UNCONST_CAST)
  1625. # if 0 && defined(__cplusplus)
  1626. # define LZO_UNCONST_CAST(t,e) (const_cast<t> (e))
  1627. # elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
  1628. # define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((lzo_uintptr_t) ((const void *) (e))))))
  1629. # else
  1630. # define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((const void *) (e)))))
  1631. # endif
  1632. #endif
  1633. #if !defined(LZO_COMPILE_TIME_ASSERT_HEADER)
  1634. # if (LZO_CC_AZTECC || LZO_CC_ZORTECHC)
  1635. # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)];
  1636. # elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
  1637. # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)];
  1638. # elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
  1639. # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)];
  1640. # else
  1641. # define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)];
  1642. # endif
  1643. #endif
  1644. #if !defined(LZO_COMPILE_TIME_ASSERT)
  1645. # if (LZO_CC_AZTECC)
  1646. # define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];}
  1647. # elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
  1648. # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
  1649. # elif (LZO_CC_MSC && (_MSC_VER < 900))
  1650. # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
  1651. # elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
  1652. # define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
  1653. # else
  1654. # define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];}
  1655. # endif
  1656. #endif
  1657. #if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
  1658. # if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC)
  1659. # elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
  1660. # define __lzo_cdecl __cdecl
  1661. # define __lzo_cdecl_atexit /*empty*/
  1662. # define __lzo_cdecl_main __cdecl
  1663. # if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
  1664. # define __lzo_cdecl_qsort __pascal
  1665. # elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
  1666. # define __lzo_cdecl_qsort _stdcall
  1667. # else
  1668. # define __lzo_cdecl_qsort __cdecl
  1669. # endif
  1670. # elif (LZO_CC_WATCOMC)
  1671. # define __lzo_cdecl __cdecl
  1672. # else
  1673. # define __lzo_cdecl __cdecl
  1674. # define __lzo_cdecl_atexit __cdecl
  1675. # define __lzo_cdecl_main __cdecl
  1676. # define __lzo_cdecl_qsort __cdecl
  1677. # endif
  1678. # if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC)
  1679. # elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
  1680. # define __lzo_cdecl_sighandler __pascal
  1681. # elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
  1682. # define __lzo_cdecl_sighandler _stdcall
  1683. # elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE)
  1684. # define __lzo_cdecl_sighandler __clrcall
  1685. # elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700))
  1686. # if defined(_DLL)
  1687. # define __lzo_cdecl_sighandler _far _cdecl _loadds
  1688. # elif defined(_MT)
  1689. # define __lzo_cdecl_sighandler _far _cdecl
  1690. # else
  1691. # define __lzo_cdecl_sighandler _cdecl
  1692. # endif
  1693. # else
  1694. # define __lzo_cdecl_sighandler __cdecl
  1695. # endif
  1696. #elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC)
  1697. # define __lzo_cdecl __cdecl
  1698. #elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
  1699. # define __lzo_cdecl cdecl
  1700. #endif
  1701. #if !defined(__lzo_cdecl)
  1702. # define __lzo_cdecl /*empty*/
  1703. #endif
  1704. #if !defined(__lzo_cdecl_atexit)
  1705. # define __lzo_cdecl_atexit /*empty*/
  1706. #endif
  1707. #if !defined(__lzo_cdecl_main)
  1708. # define __lzo_cdecl_main /*empty*/
  1709. #endif
  1710. #if !defined(__lzo_cdecl_qsort)
  1711. # define __lzo_cdecl_qsort /*empty*/
  1712. #endif
  1713. #if !defined(__lzo_cdecl_sighandler)
  1714. # define __lzo_cdecl_sighandler /*empty*/
  1715. #endif
  1716. #if !defined(__lzo_cdecl_va)
  1717. # define __lzo_cdecl_va __lzo_cdecl
  1718. #endif
  1719. #if !(LZO_CFG_NO_WINDOWS_H)
  1720. #if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64)
  1721. # if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000))
  1722. # elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
  1723. # elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul)))
  1724. # else
  1725. # define LZO_HAVE_WINDOWS_H 1
  1726. # endif
  1727. #endif
  1728. #endif
  1729. #if (LZO_ARCH_ALPHA)
  1730. # define LZO_OPT_AVOID_UINT_INDEX 1
  1731. # define LZO_OPT_AVOID_SHORT 1
  1732. # define LZO_OPT_AVOID_USHORT 1
  1733. #elif (LZO_ARCH_AMD64)
  1734. # define LZO_OPT_AVOID_INT_INDEX 1
  1735. # define LZO_OPT_AVOID_UINT_INDEX 1
  1736. # define LZO_OPT_UNALIGNED16 1
  1737. # define LZO_OPT_UNALIGNED32 1
  1738. # define LZO_OPT_UNALIGNED64 1
  1739. #elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB)
  1740. #elif (LZO_ARCH_ARM)
  1741. # define LZO_OPT_AVOID_SHORT 1
  1742. # define LZO_OPT_AVOID_USHORT 1
  1743. #elif (LZO_ARCH_CRIS)
  1744. # define LZO_OPT_UNALIGNED16 1
  1745. # define LZO_OPT_UNALIGNED32 1
  1746. #elif (LZO_ARCH_I386)
  1747. # define LZO_OPT_UNALIGNED16 1
  1748. # define LZO_OPT_UNALIGNED32 1
  1749. #elif (LZO_ARCH_IA64)
  1750. # define LZO_OPT_AVOID_INT_INDEX 1
  1751. # define LZO_OPT_AVOID_UINT_INDEX 1
  1752. # define LZO_OPT_PREFER_POSTINC 1
  1753. #elif (LZO_ARCH_M68K)
  1754. # define LZO_OPT_PREFER_POSTINC 1
  1755. # define LZO_OPT_PREFER_PREDEC 1
  1756. # if defined(__mc68020__) && !defined(__mcoldfire__)
  1757. # define LZO_OPT_UNALIGNED16 1
  1758. # define LZO_OPT_UNALIGNED32 1
  1759. # endif
  1760. #elif (LZO_ARCH_MIPS)
  1761. # define LZO_OPT_AVOID_UINT_INDEX 1
  1762. #elif (LZO_ARCH_POWERPC)
  1763. # define LZO_OPT_PREFER_PREINC 1
  1764. # define LZO_OPT_PREFER_PREDEC 1
  1765. # if (LZO_ABI_BIG_ENDIAN)
  1766. # define LZO_OPT_UNALIGNED16 1
  1767. # define LZO_OPT_UNALIGNED32 1
  1768. # endif
  1769. #elif (LZO_ARCH_S390)
  1770. # define LZO_OPT_UNALIGNED16 1
  1771. # define LZO_OPT_UNALIGNED32 1
  1772. # if (LZO_SIZEOF_SIZE_T == 8)
  1773. # define LZO_OPT_UNALIGNED64 1
  1774. # endif
  1775. #elif (LZO_ARCH_SH)
  1776. # define LZO_OPT_PREFER_POSTINC 1
  1777. # define LZO_OPT_PREFER_PREDEC 1
  1778. #endif
  1779. #ifndef LZO_CFG_NO_INLINE_ASM
  1780. #if (LZO_CC_LLVM)
  1781. # define LZO_CFG_NO_INLINE_ASM 1
  1782. #endif
  1783. #endif
  1784. #ifndef LZO_CFG_NO_UNALIGNED
  1785. #if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC)
  1786. # define LZO_CFG_NO_UNALIGNED 1
  1787. #endif
  1788. #endif
  1789. #if (LZO_CFG_NO_UNALIGNED)
  1790. # undef LZO_OPT_UNALIGNED16
  1791. # undef LZO_OPT_UNALIGNED32
  1792. # undef LZO_OPT_UNALIGNED64
  1793. #endif
  1794. #if (LZO_CFG_NO_INLINE_ASM)
  1795. #elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
  1796. # define LZO_ASM_SYNTAX_MSC 1
  1797. #elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
  1798. #elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul))
  1799. #elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
  1800. # define LZO_ASM_SYNTAX_GNUC 1
  1801. #elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
  1802. # define LZO_ASM_SYNTAX_GNUC 1
  1803. #endif
  1804. #if (LZO_ASM_SYNTAX_GNUC)
  1805. #if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
  1806. # define __LZO_ASM_CLOBBER "ax"
  1807. #elif (LZO_CC_INTELC)
  1808. # define __LZO_ASM_CLOBBER "memory"
  1809. #else
  1810. # define __LZO_ASM_CLOBBER "cc", "memory"
  1811. #endif
  1812. #endif
  1813. #if defined(__LZO_INFOSTR_MM)
  1814. #elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM))
  1815. # define __LZO_INFOSTR_MM ""
  1816. #elif defined(LZO_INFO_MM)
  1817. # define __LZO_INFOSTR_MM "." LZO_INFO_MM
  1818. #else
  1819. # define __LZO_INFOSTR_MM ""
  1820. #endif
  1821. #if defined(__LZO_INFOSTR_PM)
  1822. #elif defined(LZO_INFO_ABI_PM)
  1823. # define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM
  1824. #else
  1825. # define __LZO_INFOSTR_PM ""
  1826. #endif
  1827. #if defined(__LZO_INFOSTR_ENDIAN)
  1828. #elif defined(LZO_INFO_ABI_ENDIAN)
  1829. # define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN
  1830. #else
  1831. # define __LZO_INFOSTR_ENDIAN ""
  1832. #endif
  1833. #if defined(__LZO_INFOSTR_OSNAME)
  1834. #elif defined(LZO_INFO_OS_CONSOLE)
  1835. # define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE
  1836. #elif defined(LZO_INFO_OS_POSIX)
  1837. # define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX
  1838. #else
  1839. # define __LZO_INFOSTR_OSNAME LZO_INFO_OS
  1840. #endif
  1841. #if defined(__LZO_INFOSTR_LIBC)
  1842. #elif defined(LZO_INFO_LIBC)
  1843. # define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC
  1844. #else
  1845. # define __LZO_INFOSTR_LIBC ""
  1846. #endif
  1847. #if defined(__LZO_INFOSTR_CCVER)
  1848. #elif defined(LZO_INFO_CCVER)
  1849. # define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER
  1850. #else
  1851. # define __LZO_INFOSTR_CCVER ""
  1852. #endif
  1853. #define LZO_INFO_STRING \
  1854. LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \
  1855. " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER
  1856. #endif
  1857. #endif
  1858. #undef LZO_HAVE_CONFIG_H
  1859. #include "minilzo.h"
  1860. #if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2040)
  1861. # error "version mismatch in miniLZO source files"
  1862. #endif
  1863. #ifdef MINILZO_HAVE_CONFIG_H
  1864. # define LZO_HAVE_CONFIG_H 1
  1865. #endif
  1866. #ifndef __LZO_CONF_H
  1867. #define __LZO_CONF_H 1
  1868. #if !defined(__LZO_IN_MINILZO)
  1869. #if (LZO_CFG_FREESTANDING)
  1870. # define LZO_LIBC_FREESTANDING 1
  1871. # define LZO_OS_FREESTANDING 1
  1872. # define ACC_LIBC_FREESTANDING 1
  1873. # define ACC_OS_FREESTANDING 1
  1874. #endif
  1875. #if (LZO_CFG_NO_UNALIGNED)
  1876. # define ACC_CFG_NO_UNALIGNED 1
  1877. #endif
  1878. #if (LZO_ARCH_GENERIC)
  1879. # define ACC_ARCH_GENERIC 1
  1880. #endif
  1881. #if (LZO_ABI_NEUTRAL_ENDIAN)
  1882. # define ACC_ABI_NEUTRAL_ENDIAN 1
  1883. #endif
  1884. #if (LZO_HAVE_CONFIG_H)
  1885. # define ACC_CONFIG_NO_HEADER 1
  1886. #endif
  1887. #if defined(LZO_CFG_EXTRA_CONFIG_HEADER)
  1888. # include LZO_CFG_EXTRA_CONFIG_HEADER
  1889. #endif
  1890. #if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED)
  1891. # error "include this file first"
  1892. #endif
  1893. #include "lzo/lzoconf.h"
  1894. #endif
  1895. #if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED)
  1896. # error "version mismatch"
  1897. #endif
  1898. #if (LZO_CC_BORLANDC && LZO_ARCH_I086)
  1899. # pragma option -h
  1900. #endif
  1901. #if (LZO_CC_MSC && (_MSC_VER >= 1000))
  1902. # pragma warning(disable: 4127 4701)
  1903. #endif
  1904. #if (LZO_CC_MSC && (_MSC_VER >= 1300))
  1905. # pragma warning(disable: 4820)
  1906. # pragma warning(disable: 4514 4710 4711)
  1907. #endif
  1908. #if (LZO_CC_SUNPROC)
  1909. #if !defined(__cplusplus)
  1910. # pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED)
  1911. # pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP)
  1912. # pragma error_messages(off,E_STATEMENT_NOT_REACHED)
  1913. #endif
  1914. #endif
  1915. #if (__LZO_MMODEL_HUGE) && !(LZO_HAVE_MM_HUGE_PTR)
  1916. # error "this should not happen - check defines for __huge"
  1917. #endif
  1918. #if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING)
  1919. #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
  1920. # define ACC_WANT_ACC_INCD_H 1
  1921. # define ACC_WANT_ACC_INCE_H 1
  1922. # define ACC_WANT_ACC_INCI_H 1
  1923. #elif 1
  1924. # include <string.h>
  1925. #else
  1926. # define ACC_WANT_ACC_INCD_H 1
  1927. #endif
  1928. #if (LZO_ARCH_I086)
  1929. # define ACC_MM_AHSHIFT LZO_MM_AHSHIFT
  1930. # define ACC_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0])
  1931. # define ACC_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1])
  1932. # define ACC_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o)))
  1933. #endif
  1934. #if !defined(lzo_uintptr_t)
  1935. # if defined(__LZO_MMODEL_HUGE)
  1936. # define lzo_uintptr_t unsigned long
  1937. # elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16)
  1938. # define __LZO_UINTPTR_T_IS_POINTER 1
  1939. typedef char* lzo_uintptr_t;
  1940. # define lzo_uintptr_t lzo_uintptr_t
  1941. # elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P)
  1942. # define lzo_uintptr_t size_t
  1943. # elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P)
  1944. # define lzo_uintptr_t unsigned long
  1945. # elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P)
  1946. # define lzo_uintptr_t unsigned int
  1947. # elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P)
  1948. # define lzo_uintptr_t unsigned long long
  1949. # else
  1950. # define lzo_uintptr_t size_t
  1951. # endif
  1952. #endif
  1953. LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp))
  1954. #if 1 && !defined(LZO_CFG_FREESTANDING)
  1955. #if 1 && !defined(HAVE_STRING_H)
  1956. #define HAVE_STRING_H 1
  1957. #endif
  1958. #if 1 && !defined(HAVE_MEMCMP)
  1959. #define HAVE_MEMCMP 1
  1960. #endif
  1961. #if 1 && !defined(HAVE_MEMCPY)
  1962. #define HAVE_MEMCPY 1
  1963. #endif
  1964. #if 1 && !defined(HAVE_MEMMOVE)
  1965. #define HAVE_MEMMOVE 1
  1966. #endif
  1967. #if 1 && !defined(HAVE_MEMSET)
  1968. #define HAVE_MEMSET 1
  1969. #endif
  1970. #endif
  1971. #if 1 && defined(HAVE_STRING_H)
  1972. #include <string.h>
  1973. #endif
  1974. #if (LZO_CFG_FREESTANDING)
  1975. # undef HAVE_MEMCMP
  1976. # undef HAVE_MEMCPY
  1977. # undef HAVE_MEMMOVE
  1978. # undef HAVE_MEMSET
  1979. #endif
  1980. #if !(HAVE_MEMCMP)
  1981. # undef memcmp
  1982. # define memcmp(a,b,c) lzo_memcmp(a,b,c)
  1983. #elif !(__LZO_MMODEL_HUGE)
  1984. # undef lzo_memcmp
  1985. # define lzo_memcmp(a,b,c) memcmp(a,b,c)
  1986. #endif
  1987. #if !(HAVE_MEMCPY)
  1988. # undef memcpy
  1989. # define memcpy(a,b,c) lzo_memcpy(a,b,c)
  1990. #elif !(__LZO_MMODEL_HUGE)
  1991. # undef lzo_memcpy
  1992. # define lzo_memcpy(a,b,c) memcpy(a,b,c)
  1993. #endif
  1994. #if !(HAVE_MEMMOVE)
  1995. # undef memmove
  1996. # define memmove(a,b,c) lzo_memmove(a,b,c)
  1997. #elif !(__LZO_MMODEL_HUGE)
  1998. # undef lzo_memmove
  1999. # define lzo_memmove(a,b,c) memmove(a,b,c)
  2000. #endif
  2001. #if !(HAVE_MEMSET)
  2002. # undef memset
  2003. # define memset(a,b,c) lzo_memset(a,b,c)
  2004. #elif !(__LZO_MMODEL_HUGE)
  2005. # undef lzo_memset
  2006. # define lzo_memset(a,b,c) memset(a,b,c)
  2007. #endif
  2008. #undef NDEBUG
  2009. #if (LZO_CFG_FREESTANDING)
  2010. # undef LZO_DEBUG
  2011. # define NDEBUG 1
  2012. # undef assert
  2013. # define assert(e) ((void)0)
  2014. #else
  2015. # if !defined(LZO_DEBUG)
  2016. # define NDEBUG 1
  2017. # endif
  2018. # include <assert.h>
  2019. #endif
  2020. #if 0 && defined(__BOUNDS_CHECKING_ON)
  2021. # include <unchecked.h>
  2022. #else
  2023. # define BOUNDS_CHECKING_OFF_DURING(stmt) stmt
  2024. # define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr)
  2025. #endif
  2026. #if !defined(__lzo_inline)
  2027. # define __lzo_inline /*empty*/
  2028. #endif
  2029. #if !defined(__lzo_forceinline)
  2030. # define __lzo_forceinline /*empty*/
  2031. #endif
  2032. #if !defined(__lzo_noinline)
  2033. # define __lzo_noinline /*empty*/
  2034. #endif
  2035. #if (LZO_CFG_PGO)
  2036. # undef __acc_likely
  2037. # undef __acc_unlikely
  2038. # undef __lzo_likely
  2039. # undef __lzo_unlikely
  2040. # define __acc_likely(e) (e)
  2041. # define __acc_unlikely(e) (e)
  2042. # define __lzo_likely(e) (e)
  2043. # define __lzo_unlikely(e) (e)
  2044. #endif
  2045. #if 1
  2046. # define LZO_BYTE(x) ((unsigned char) (x))
  2047. #else
  2048. # define LZO_BYTE(x) ((unsigned char) ((x) & 0xff))
  2049. #endif
  2050. #define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b))
  2051. #define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b))
  2052. #define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c))
  2053. #define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c))
  2054. #define lzo_sizeof(type) ((lzo_uint) (sizeof(type)))
  2055. #define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array))))
  2056. #define LZO_SIZE(bits) (1u << (bits))
  2057. #define LZO_MASK(bits) (LZO_SIZE(bits) - 1)
  2058. #define LZO_LSIZE(bits) (1ul << (bits))
  2059. #define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1)
  2060. #define LZO_USIZE(bits) ((lzo_uint) 1 << (bits))
  2061. #define LZO_UMASK(bits) (LZO_USIZE(bits) - 1)
  2062. #if !defined(DMUL)
  2063. #if 0
  2064. # define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b)))
  2065. #else
  2066. # define DMUL(a,b) ((lzo_xint) ((a) * (b)))
  2067. #endif
  2068. #endif
  2069. #if 1 && !(LZO_CFG_NO_UNALIGNED)
  2070. #if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386 || LZO_ARCH_POWERPC)
  2071. # if (LZO_SIZEOF_SHORT == 2)
  2072. # define LZO_UNALIGNED_OK_2 1
  2073. # endif
  2074. # if (LZO_SIZEOF_INT == 4)
  2075. # define LZO_UNALIGNED_OK_4 1
  2076. # endif
  2077. #endif
  2078. #endif
  2079. #if defined(LZO_UNALIGNED_OK_2)
  2080. LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(short) == 2)
  2081. #endif
  2082. #if defined(LZO_UNALIGNED_OK_4)
  2083. LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4)
  2084. #elif defined(LZO_ALIGNED_OK_4)
  2085. LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4)
  2086. #endif
  2087. #undef COPY4
  2088. #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
  2089. # if 1 && defined(ACC_UA_COPY32)
  2090. # define COPY4(d,s) ACC_UA_COPY32(d,s)
  2091. # else
  2092. # define COPY4(d,s) (* (__lzo_ua_volatile lzo_uint32p)(__lzo_ua_volatile lzo_voidp)(d) = * (__lzo_ua_volatile const lzo_uint32p)(__lzo_ua_volatile const lzo_voidp)(s))
  2093. # endif
  2094. #endif
  2095. #define MEMCPY8_DS(dest,src,len) \
  2096. lzo_memcpy(dest,src,len); dest += len; src += len
  2097. #define BZERO8_PTR(s,l,n) \
  2098. lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n))
  2099. #define MEMCPY_DS(dest,src,len) \
  2100. do *dest++ = *src++; while (--len > 0)
  2101. LZO_EXTERN(const lzo_bytep) lzo_copyright(void);
  2102. #ifndef __LZO_PTR_H
  2103. #define __LZO_PTR_H 1
  2104. #ifdef __cplusplus
  2105. extern "C" {
  2106. #endif
  2107. #if !defined(lzo_uintptr_t)
  2108. # if (__LZO_MMODEL_HUGE)
  2109. # define lzo_uintptr_t unsigned long
  2110. # else
  2111. # define lzo_uintptr_t acc_uintptr_t
  2112. # ifdef __ACC_INTPTR_T_IS_POINTER
  2113. # define __LZO_UINTPTR_T_IS_POINTER 1
  2114. # endif
  2115. # endif
  2116. #endif
  2117. #if (LZO_ARCH_I086)
  2118. #define PTR(a) ((lzo_bytep) (a))
  2119. #define PTR_ALIGNED_4(a) ((ACC_PTR_FP_OFF(a) & 3) == 0)
  2120. #define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0)
  2121. #elif (LZO_MM_PVP)
  2122. #define PTR(a) ((lzo_bytep) (a))
  2123. #define PTR_ALIGNED_8(a) ((((lzo_uintptr_t)(a)) >> 61) == 0)
  2124. #define PTR_ALIGNED2_8(a,b) ((((lzo_uintptr_t)(a)|(lzo_uintptr_t)(b)) >> 61) == 0)
  2125. #else
  2126. #define PTR(a) ((lzo_uintptr_t) (a))
  2127. #define PTR_LINEAR(a) PTR(a)
  2128. #define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0)
  2129. #define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0)
  2130. #define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0)
  2131. #define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0)
  2132. #endif
  2133. #define PTR_LT(a,b) (PTR(a) < PTR(b))
  2134. #define PTR_GE(a,b) (PTR(a) >= PTR(b))
  2135. #define PTR_DIFF(a,b) (PTR(a) - PTR(b))
  2136. #define pd(a,b) ((lzo_uint) ((a)-(b)))
  2137. LZO_EXTERN(lzo_uintptr_t)
  2138. __lzo_ptr_linear(const lzo_voidp ptr);
  2139. typedef union
  2140. {
  2141. char a_char;
  2142. unsigned char a_uchar;
  2143. short a_short;
  2144. unsigned short a_ushort;
  2145. int a_int;
  2146. unsigned int a_uint;
  2147. long a_long;
  2148. unsigned long a_ulong;
  2149. lzo_int a_lzo_int;
  2150. lzo_uint a_lzo_uint;
  2151. lzo_int32 a_lzo_int32;
  2152. lzo_uint32 a_lzo_uint32;
  2153. ptrdiff_t a_ptrdiff_t;
  2154. lzo_uintptr_t a_lzo_uintptr_t;
  2155. lzo_voidp a_lzo_voidp;
  2156. void * a_void_p;
  2157. lzo_bytep a_lzo_bytep;
  2158. lzo_bytepp a_lzo_bytepp;
  2159. lzo_uintp a_lzo_uintp;
  2160. lzo_uint * a_lzo_uint_p;
  2161. lzo_uint32p a_lzo_uint32p;
  2162. lzo_uint32 * a_lzo_uint32_p;
  2163. unsigned char * a_uchar_p;
  2164. char * a_char_p;
  2165. }
  2166. lzo_full_align_t;
  2167. #ifdef __cplusplus
  2168. }
  2169. #endif
  2170. #endif
  2171. #define LZO_DETERMINISTIC 1
  2172. #define LZO_DICT_USE_PTR 1
  2173. #if 0 && (LZO_ARCH_I086)
  2174. # undef LZO_DICT_USE_PTR
  2175. #endif
  2176. #if (LZO_DICT_USE_PTR)
  2177. # define lzo_dict_t const lzo_bytep
  2178. # define lzo_dict_p lzo_dict_t __LZO_MMODEL *
  2179. #else
  2180. # define lzo_dict_t lzo_uint
  2181. # define lzo_dict_p lzo_dict_t __LZO_MMODEL *
  2182. #endif
  2183. #endif
  2184. #if !defined(MINILZO_CFG_SKIP_LZO_PTR)
  2185. LZO_PUBLIC(lzo_uintptr_t)
  2186. __lzo_ptr_linear(const lzo_voidp ptr)
  2187. {
  2188. lzo_uintptr_t p;
  2189. #if (LZO_ARCH_I086)
  2190. p = (((lzo_uintptr_t)(ACC_PTR_FP_SEG(ptr))) << (16 - ACC_MM_AHSHIFT)) + (ACC_PTR_FP_OFF(ptr));
  2191. #elif (LZO_MM_PVP)
  2192. p = (lzo_uintptr_t) (ptr);
  2193. p = (p << 3) | (p >> 61);
  2194. #else
  2195. p = (lzo_uintptr_t) PTR_LINEAR(ptr);
  2196. #endif
  2197. return p;
  2198. }
  2199. LZO_PUBLIC(unsigned)
  2200. __lzo_align_gap(const lzo_voidp ptr, lzo_uint size)
  2201. {
  2202. #if defined(__LZO_UINTPTR_T_IS_POINTER)
  2203. size_t n = (size_t) ptr;
  2204. n = (((n + size - 1) / size) * size) - n;
  2205. #else
  2206. lzo_uintptr_t p, n;
  2207. p = __lzo_ptr_linear(ptr);
  2208. n = (((p + size - 1) / size) * size) - p;
  2209. #endif
  2210. assert(size > 0);
  2211. assert((long)n >= 0);
  2212. assert(n <= size);
  2213. return (unsigned)n;
  2214. }
  2215. #endif
  2216. #if !defined(MINILZO_CFG_SKIP_LZO_UTIL)
  2217. /* If you use the LZO library in a product, I would appreciate that you
  2218. * keep this copyright string in the executable of your product.
  2219. */
  2220. static const char __lzo_copyright[] =
  2221. #if !defined(__LZO_IN_MINLZO)
  2222. LZO_VERSION_STRING;
  2223. #else
  2224. "\r\n\n"
  2225. "LZO data compression library.\n"
  2226. "$Copyright: LZO Copyright (C) 1996-2010 Markus Franz Xaver Johannes Oberhumer\n"
  2227. "<markus@oberhumer.com>\n"
  2228. "http://www.oberhumer.com $\n\n"
  2229. "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n"
  2230. "$Info: " LZO_INFO_STRING " $\n";
  2231. #endif
  2232. LZO_PUBLIC(const lzo_bytep)
  2233. lzo_copyright(void)
  2234. {
  2235. #if (LZO_OS_DOS16 && LZO_CC_TURBOC)
  2236. return (lzo_voidp) __lzo_copyright;
  2237. #else
  2238. return (const lzo_bytep) __lzo_copyright;
  2239. #endif
  2240. }
  2241. LZO_PUBLIC(unsigned)
  2242. lzo_version(void)
  2243. {
  2244. return LZO_VERSION;
  2245. }
  2246. LZO_PUBLIC(const char *)
  2247. lzo_version_string(void)
  2248. {
  2249. return LZO_VERSION_STRING;
  2250. }
  2251. LZO_PUBLIC(const char *)
  2252. lzo_version_date(void)
  2253. {
  2254. return LZO_VERSION_DATE;
  2255. }
  2256. LZO_PUBLIC(const lzo_charp)
  2257. _lzo_version_string(void)
  2258. {
  2259. return LZO_VERSION_STRING;
  2260. }
  2261. LZO_PUBLIC(const lzo_charp)
  2262. _lzo_version_date(void)
  2263. {
  2264. return LZO_VERSION_DATE;
  2265. }
  2266. #define LZO_BASE 65521u
  2267. #define LZO_NMAX 5552
  2268. #define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1
  2269. #define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1);
  2270. #define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2);
  2271. #define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4);
  2272. #define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8);
  2273. LZO_PUBLIC(lzo_uint32)
  2274. lzo_adler32(lzo_uint32 adler, const lzo_bytep buf, lzo_uint len)
  2275. {
  2276. lzo_uint32 s1 = adler & 0xffff;
  2277. lzo_uint32 s2 = (adler >> 16) & 0xffff;
  2278. unsigned k;
  2279. if (buf == NULL)
  2280. return 1;
  2281. while (len > 0)
  2282. {
  2283. k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX;
  2284. len -= k;
  2285. if (k >= 16) do
  2286. {
  2287. LZO_DO16(buf,0);
  2288. buf += 16;
  2289. k -= 16;
  2290. } while (k >= 16);
  2291. if (k != 0) do
  2292. {
  2293. s1 += *buf++;
  2294. s2 += s1;
  2295. } while (--k > 0);
  2296. s1 %= LZO_BASE;
  2297. s2 %= LZO_BASE;
  2298. }
  2299. return (s2 << 16) | s1;
  2300. }
  2301. #undef LZO_DO1
  2302. #undef LZO_DO2
  2303. #undef LZO_DO4
  2304. #undef LZO_DO8
  2305. #undef LZO_DO16
  2306. #endif
  2307. #if !defined(MINILZO_CFG_SKIP_LZO_STRING)
  2308. #undef lzo_memcmp
  2309. #undef lzo_memcpy
  2310. #undef lzo_memmove
  2311. #undef lzo_memset
  2312. #if !defined(__LZO_MMODEL_HUGE)
  2313. # undef LZO_HAVE_MM_HUGE_PTR
  2314. #endif
  2315. #define lzo_hsize_t lzo_uint
  2316. #define lzo_hvoid_p lzo_voidp
  2317. #define lzo_hbyte_p lzo_bytep
  2318. #define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f
  2319. #define lzo_hmemcmp lzo_memcmp
  2320. #define lzo_hmemcpy lzo_memcpy
  2321. #define lzo_hmemmove lzo_memmove
  2322. #define lzo_hmemset lzo_memset
  2323. #define __LZOLIB_HMEMCPY_CH_INCLUDED 1
  2324. #if !defined(LZOLIB_PUBLIC)
  2325. # define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f)
  2326. #endif
  2327. LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len)
  2328. {
  2329. #if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP)
  2330. const lzo_hbyte_p p1 = (const lzo_hbyte_p) s1;
  2331. const lzo_hbyte_p p2 = (const lzo_hbyte_p) s2;
  2332. if __lzo_likely(len > 0) do
  2333. {
  2334. int d = *p1 - *p2;
  2335. if (d != 0)
  2336. return d;
  2337. p1++; p2++;
  2338. } while __lzo_likely(--len > 0);
  2339. return 0;
  2340. #else
  2341. return memcmp(s1, s2, len);
  2342. #endif
  2343. }
  2344. LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len)
  2345. {
  2346. #if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY)
  2347. lzo_hbyte_p p1 = (lzo_hbyte_p) dest;
  2348. const lzo_hbyte_p p2 = (const lzo_hbyte_p) src;
  2349. if (!(len > 0) || p1 == p2)
  2350. return dest;
  2351. do
  2352. *p1++ = *p2++;
  2353. while __lzo_likely(--len > 0);
  2354. return dest;
  2355. #else
  2356. return memcpy(dest, src, len);
  2357. #endif
  2358. }
  2359. LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len)
  2360. {
  2361. #if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE)
  2362. lzo_hbyte_p p1 = (lzo_hbyte_p) dest;
  2363. const lzo_hbyte_p p2 = (const lzo_hbyte_p) src;
  2364. if (!(len > 0) || p1 == p2)
  2365. return dest;
  2366. if (p1 < p2)
  2367. {
  2368. do
  2369. *p1++ = *p2++;
  2370. while __lzo_likely(--len > 0);
  2371. }
  2372. else
  2373. {
  2374. p1 += len;
  2375. p2 += len;
  2376. do
  2377. *--p1 = *--p2;
  2378. while __lzo_likely(--len > 0);
  2379. }
  2380. return dest;
  2381. #else
  2382. return memmove(dest, src, len);
  2383. #endif
  2384. }
  2385. LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int c, lzo_hsize_t len)
  2386. {
  2387. #if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET)
  2388. lzo_hbyte_p p = (lzo_hbyte_p) s;
  2389. if __lzo_likely(len > 0) do
  2390. *p++ = (unsigned char) c;
  2391. while __lzo_likely(--len > 0);
  2392. return s;
  2393. #else
  2394. return memset(s, c, len);
  2395. #endif
  2396. }
  2397. #undef LZOLIB_PUBLIC
  2398. #endif
  2399. #if !defined(MINILZO_CFG_SKIP_LZO_INIT)
  2400. #if !defined(__LZO_IN_MINILZO)
  2401. #define ACC_WANT_ACC_CHK_CH 1
  2402. #undef ACCCHK_ASSERT
  2403. ACCCHK_ASSERT_IS_SIGNED_T(lzo_int)
  2404. ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint)
  2405. ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32)
  2406. ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32)
  2407. ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0)
  2408. ACCCHK_ASSERT(sizeof(lzo_uint32) >= 4)
  2409. #if !defined(__LZO_UINTPTR_T_IS_POINTER)
  2410. ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t)
  2411. #endif
  2412. ACCCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp))
  2413. ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint)
  2414. ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint32))
  2415. ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint))
  2416. ACCCHK_ASSERT(sizeof(lzo_xint) == sizeof(lzo_uint32) || sizeof(lzo_xint) == sizeof(lzo_uint))
  2417. #endif
  2418. #undef ACCCHK_ASSERT
  2419. #if 0
  2420. #define u2p(ptr,off) ((lzo_voidp) (((lzo_bytep)(lzo_voidp)(ptr)) + (off)))
  2421. #else
  2422. static __lzo_noinline lzo_voidp u2p(lzo_voidp ptr, lzo_uint off)
  2423. {
  2424. return (lzo_voidp) ((lzo_bytep) ptr + off);
  2425. }
  2426. #endif
  2427. LZO_PUBLIC(int)
  2428. _lzo_config_check(void)
  2429. {
  2430. lzo_bool r = 1;
  2431. union {
  2432. lzo_xint a[2]; unsigned char b[2*sizeof(lzo_xint)];
  2433. unsigned short x[2]; lzo_uint32 y[2]; lzo_uint z[2];
  2434. } u;
  2435. lzo_voidp p;
  2436. u.a[0] = u.a[1] = 0;
  2437. p = u2p(&u, 0);
  2438. r &= ((* (lzo_bytep) p) == 0);
  2439. #if !defined(LZO_CFG_NO_CONFIG_CHECK)
  2440. #if defined(LZO_ABI_BIG_ENDIAN)
  2441. u.a[0] = u.a[1] = 0; u.b[sizeof(lzo_uint) - 1] = 128;
  2442. p = u2p(&u, 0);
  2443. r &= ((* (lzo_uintp) p) == 128);
  2444. #endif
  2445. #if defined(LZO_ABI_LITTLE_ENDIAN)
  2446. u.a[0] = u.a[1] = 0; u.b[0] = 128;
  2447. p = u2p(&u, 0);
  2448. r &= ((* (lzo_uintp) p) == 128);
  2449. #endif
  2450. #if defined(LZO_UNALIGNED_OK_2)
  2451. u.a[0] = u.a[1] = 0;
  2452. u.b[0] = 1; u.b[sizeof(unsigned short) + 1] = 2;
  2453. p = u2p(&u, 1);
  2454. r &= ((* (lzo_ushortp) p) == 0);
  2455. #endif
  2456. #if defined(LZO_UNALIGNED_OK_4)
  2457. u.a[0] = u.a[1] = 0;
  2458. u.b[0] = 3; u.b[sizeof(lzo_uint32) + 1] = 4;
  2459. p = u2p(&u, 1);
  2460. r &= ((* (lzo_uint32p) p) == 0);
  2461. #endif
  2462. #endif
  2463. return r == 1 ? LZO_E_OK : LZO_E_ERROR;
  2464. }
  2465. LZO_PUBLIC(int)
  2466. __lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5,
  2467. int s6, int s7, int s8, int s9)
  2468. {
  2469. int r;
  2470. #if defined(__LZO_IN_MINILZO)
  2471. #elif (LZO_CC_MSC && ((_MSC_VER) < 700))
  2472. #else
  2473. #define ACC_WANT_ACC_CHK_CH 1
  2474. #undef ACCCHK_ASSERT
  2475. #define ACCCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr)
  2476. #endif
  2477. #undef ACCCHK_ASSERT
  2478. if (v == 0)
  2479. return LZO_E_ERROR;
  2480. r = (s1 == -1 || s1 == (int) sizeof(short)) &&
  2481. (s2 == -1 || s2 == (int) sizeof(int)) &&
  2482. (s3 == -1 || s3 == (int) sizeof(long)) &&
  2483. (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) &&
  2484. (s5 == -1 || s5 == (int) sizeof(lzo_uint)) &&
  2485. (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) &&
  2486. (s7 == -1 || s7 == (int) sizeof(char *)) &&
  2487. (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) &&
  2488. (s9 == -1 || s9 == (int) sizeof(lzo_callback_t));
  2489. if (!r)
  2490. return LZO_E_ERROR;
  2491. r = _lzo_config_check();
  2492. if (r != LZO_E_OK)
  2493. return r;
  2494. return r;
  2495. }
  2496. #if !defined(__LZO_IN_MINILZO)
  2497. #if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD)
  2498. #if 0
  2499. BOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment,
  2500. WORD wHeapSize, LPSTR lpszCmdLine )
  2501. #else
  2502. int __far __pascal LibMain ( int a, short b, short c, long d )
  2503. #endif
  2504. {
  2505. LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d);
  2506. return 1;
  2507. }
  2508. #endif
  2509. #endif
  2510. #endif
  2511. #define LZO1X 1
  2512. #define LZO_EOF_CODE 1
  2513. #define M2_MAX_OFFSET 0x0800
  2514. #if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS)
  2515. #define LZO_NEED_DICT_H 1
  2516. #define D_BITS 14
  2517. #define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5)
  2518. #define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f)
  2519. #ifndef __LZO_CONFIG1X_H
  2520. #define __LZO_CONFIG1X_H 1
  2521. #if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z)
  2522. # define LZO1X 1
  2523. #endif
  2524. #if !defined(__LZO_IN_MINILZO)
  2525. #include "lzo/lzo1x.h"
  2526. #endif
  2527. #ifndef LZO_EOF_CODE
  2528. #define LZO_EOF_CODE 1
  2529. #endif
  2530. #undef LZO_DETERMINISTIC
  2531. #define M1_MAX_OFFSET 0x0400
  2532. #ifndef M2_MAX_OFFSET
  2533. #define M2_MAX_OFFSET 0x0800
  2534. #endif
  2535. #define M3_MAX_OFFSET 0x4000
  2536. #define M4_MAX_OFFSET 0xbfff
  2537. #define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET)
  2538. #define M1_MIN_LEN 2
  2539. #define M1_MAX_LEN 2
  2540. #define M2_MIN_LEN 3
  2541. #ifndef M2_MAX_LEN
  2542. #define M2_MAX_LEN 8
  2543. #endif
  2544. #define M3_MIN_LEN 3
  2545. #define M3_MAX_LEN 33
  2546. #define M4_MIN_LEN 3
  2547. #define M4_MAX_LEN 9
  2548. #define M1_MARKER 0
  2549. #define M2_MARKER 64
  2550. #define M3_MARKER 32
  2551. #define M4_MARKER 16
  2552. #ifndef MIN_LOOKAHEAD
  2553. #define MIN_LOOKAHEAD (M2_MAX_LEN + 1)
  2554. #endif
  2555. #if defined(LZO_NEED_DICT_H)
  2556. #ifndef LZO_HASH
  2557. #define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B
  2558. #endif
  2559. #define DL_MIN_LEN M2_MIN_LEN
  2560. #ifndef __LZO_DICT_H
  2561. #define __LZO_DICT_H 1
  2562. #ifdef __cplusplus
  2563. extern "C" {
  2564. #endif
  2565. #if !defined(D_BITS) && defined(DBITS)
  2566. # define D_BITS DBITS
  2567. #endif
  2568. #if !defined(D_BITS)
  2569. # error "D_BITS is not defined"
  2570. #endif
  2571. #if (D_BITS < 16)
  2572. # define D_SIZE LZO_SIZE(D_BITS)
  2573. # define D_MASK LZO_MASK(D_BITS)
  2574. #else
  2575. # define D_SIZE LZO_USIZE(D_BITS)
  2576. # define D_MASK LZO_UMASK(D_BITS)
  2577. #endif
  2578. #define D_HIGH ((D_MASK >> 1) + 1)
  2579. #if !defined(DD_BITS)
  2580. # define DD_BITS 0
  2581. #endif
  2582. #define DD_SIZE LZO_SIZE(DD_BITS)
  2583. #define DD_MASK LZO_MASK(DD_BITS)
  2584. #if !defined(DL_BITS)
  2585. # define DL_BITS (D_BITS - DD_BITS)
  2586. #endif
  2587. #if (DL_BITS < 16)
  2588. # define DL_SIZE LZO_SIZE(DL_BITS)
  2589. # define DL_MASK LZO_MASK(DL_BITS)
  2590. #else
  2591. # define DL_SIZE LZO_USIZE(DL_BITS)
  2592. # define DL_MASK LZO_UMASK(DL_BITS)
  2593. #endif
  2594. #if (D_BITS != DL_BITS + DD_BITS)
  2595. # error "D_BITS does not match"
  2596. #endif
  2597. #if (D_BITS < 6 || D_BITS > 18)
  2598. # error "invalid D_BITS"
  2599. #endif
  2600. #if (DL_BITS < 6 || DL_BITS > 20)
  2601. # error "invalid DL_BITS"
  2602. #endif
  2603. #if (DD_BITS < 0 || DD_BITS > 6)
  2604. # error "invalid DD_BITS"
  2605. #endif
  2606. #if !defined(DL_MIN_LEN)
  2607. # define DL_MIN_LEN 3
  2608. #endif
  2609. #if !defined(DL_SHIFT)
  2610. # define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN)
  2611. #endif
  2612. #define LZO_HASH_GZIP 1
  2613. #define LZO_HASH_GZIP_INCREMENTAL 2
  2614. #define LZO_HASH_LZO_INCREMENTAL_A 3
  2615. #define LZO_HASH_LZO_INCREMENTAL_B 4
  2616. #if !defined(LZO_HASH)
  2617. # error "choose a hashing strategy"
  2618. #endif
  2619. #undef DM
  2620. #undef DX
  2621. #if (DL_MIN_LEN == 3)
  2622. # define _DV2_A(p,shift1,shift2) \
  2623. (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2])
  2624. # define _DV2_B(p,shift1,shift2) \
  2625. (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0])
  2626. # define _DV3_B(p,shift1,shift2,shift3) \
  2627. ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0])
  2628. #elif (DL_MIN_LEN == 2)
  2629. # define _DV2_A(p,shift1,shift2) \
  2630. (( (lzo_xint)(p[0]) << shift1) ^ p[1])
  2631. # define _DV2_B(p,shift1,shift2) \
  2632. (( (lzo_xint)(p[1]) << shift1) ^ p[2])
  2633. #else
  2634. # error "invalid DL_MIN_LEN"
  2635. #endif
  2636. #define _DV_A(p,shift) _DV2_A(p,shift,shift)
  2637. #define _DV_B(p,shift) _DV2_B(p,shift,shift)
  2638. #define DA2(p,s1,s2) \
  2639. (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0])
  2640. #define DS2(p,s1,s2) \
  2641. (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0])
  2642. #define DX2(p,s1,s2) \
  2643. (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0])
  2644. #define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0])
  2645. #define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0])
  2646. #define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0])
  2647. #define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s)))
  2648. #define DM(v) DMS(v,0)
  2649. #if (LZO_HASH == LZO_HASH_GZIP)
  2650. # define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT))
  2651. #elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL)
  2652. # define __LZO_HASH_INCREMENTAL 1
  2653. # define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT)
  2654. # define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2])
  2655. # define _DINDEX(dv,p) (dv)
  2656. # define DVAL_LOOKAHEAD DL_MIN_LEN
  2657. #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A)
  2658. # define __LZO_HASH_INCREMENTAL 1
  2659. # define DVAL_FIRST(dv,p) dv = _DV_A((p),5)
  2660. # define DVAL_NEXT(dv,p) \
  2661. dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2])
  2662. # define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5)
  2663. # define DVAL_LOOKAHEAD DL_MIN_LEN
  2664. #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B)
  2665. # define __LZO_HASH_INCREMENTAL 1
  2666. # define DVAL_FIRST(dv,p) dv = _DV_B((p),5)
  2667. # define DVAL_NEXT(dv,p) \
  2668. dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5)))
  2669. # define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5)
  2670. # define DVAL_LOOKAHEAD DL_MIN_LEN
  2671. #else
  2672. # error "choose a hashing strategy"
  2673. #endif
  2674. #ifndef DINDEX
  2675. #define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS)
  2676. #endif
  2677. #if !defined(DINDEX1) && defined(D_INDEX1)
  2678. #define DINDEX1 D_INDEX1
  2679. #endif
  2680. #if !defined(DINDEX2) && defined(D_INDEX2)
  2681. #define DINDEX2 D_INDEX2
  2682. #endif
  2683. #if !defined(__LZO_HASH_INCREMENTAL)
  2684. # define DVAL_FIRST(dv,p) ((void) 0)
  2685. # define DVAL_NEXT(dv,p) ((void) 0)
  2686. # define DVAL_LOOKAHEAD 0
  2687. #endif
  2688. #if !defined(DVAL_ASSERT)
  2689. #if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG)
  2690. #if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_LLVM)
  2691. static void __attribute__((__unused__))
  2692. #else
  2693. static void
  2694. #endif
  2695. DVAL_ASSERT(lzo_xint dv, const lzo_bytep p)
  2696. {
  2697. lzo_xint df;
  2698. DVAL_FIRST(df,(p));
  2699. assert(DINDEX(dv,p) == DINDEX(df,p));
  2700. }
  2701. #else
  2702. # define DVAL_ASSERT(dv,p) ((void) 0)
  2703. #endif
  2704. #endif
  2705. #if defined(LZO_DICT_USE_PTR)
  2706. # define DENTRY(p,in) (p)
  2707. # define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex]
  2708. #else
  2709. # define DENTRY(p,in) ((lzo_uint) ((p)-(in)))
  2710. # define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex]
  2711. #endif
  2712. #if (DD_BITS == 0)
  2713. # define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in)
  2714. # define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in)
  2715. # define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in)
  2716. #else
  2717. # define UPDATE_D(dict,drun,dv,p,in) \
  2718. dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
  2719. # define UPDATE_I(dict,drun,index,p,in) \
  2720. dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
  2721. # define UPDATE_P(ptr,drun,p,in) \
  2722. (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK
  2723. #endif
  2724. #if defined(LZO_DICT_USE_PTR)
  2725. #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
  2726. (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset)
  2727. #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
  2728. (BOUNDS_CHECKING_OFF_IN_EXPR(( \
  2729. m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \
  2730. PTR_LT(m_pos,in) || \
  2731. (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \
  2732. m_off > max_offset )))
  2733. #else
  2734. #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
  2735. (m_off == 0 || \
  2736. ((m_off = pd(ip, in) - m_off) > max_offset) || \
  2737. (m_pos = (ip) - (m_off), 0) )
  2738. #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
  2739. (pd(ip, in) <= m_off || \
  2740. ((m_off = pd(ip, in) - m_off) > max_offset) || \
  2741. (m_pos = (ip) - (m_off), 0) )
  2742. #endif
  2743. #if defined(LZO_DETERMINISTIC)
  2744. # define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET
  2745. #else
  2746. # define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET
  2747. #endif
  2748. #ifdef __cplusplus
  2749. }
  2750. #endif
  2751. #endif
  2752. #endif
  2753. #endif
  2754. #define do_compress _lzo1x_1_do_compress
  2755. #define DO_COMPRESS lzo1x_1_compress
  2756. #if 1 && defined(DO_COMPRESS) && !defined(do_compress)
  2757. # define do_compress LZO_CPP_ECONCAT2(DO_COMPRESS,_core)
  2758. #endif
  2759. static __lzo_noinline lzo_uint
  2760. do_compress ( const lzo_bytep in , lzo_uint in_len,
  2761. lzo_bytep out, lzo_uintp out_len,
  2762. lzo_voidp wrkmem )
  2763. {
  2764. register const lzo_bytep ip;
  2765. lzo_bytep op;
  2766. const lzo_bytep const in_end = in + in_len;
  2767. const lzo_bytep const ip_end = in + in_len - M2_MAX_LEN - 5;
  2768. const lzo_bytep ii;
  2769. lzo_dict_p const dict = (lzo_dict_p) wrkmem;
  2770. op = out;
  2771. ip = in;
  2772. ii = ip;
  2773. ip += 4;
  2774. for (;;)
  2775. {
  2776. register const lzo_bytep m_pos;
  2777. LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0);
  2778. lzo_uint m_len;
  2779. lzo_uint dindex;
  2780. DINDEX1(dindex,ip);
  2781. GINDEX(m_pos,m_off,dict,dindex,in);
  2782. if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
  2783. goto literal;
  2784. #if 1
  2785. if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
  2786. goto try_match;
  2787. DINDEX2(dindex,ip);
  2788. #endif
  2789. GINDEX(m_pos,m_off,dict,dindex,in);
  2790. if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
  2791. goto literal;
  2792. if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
  2793. goto try_match;
  2794. goto literal;
  2795. try_match:
  2796. #if 1 && defined(LZO_UNALIGNED_OK_2)
  2797. if (* (const lzo_ushortp) (const lzo_voidp) m_pos != * (const lzo_ushortp) (const lzo_voidp) ip)
  2798. #else
  2799. if (m_pos[0] != ip[0] || m_pos[1] != ip[1])
  2800. #endif
  2801. {
  2802. }
  2803. else
  2804. {
  2805. if __lzo_likely(m_pos[2] == ip[2])
  2806. {
  2807. #if 0
  2808. if (m_off <= M2_MAX_OFFSET)
  2809. goto match;
  2810. if (lit <= 3)
  2811. goto match;
  2812. if (lit == 3)
  2813. {
  2814. assert(op - 2 > out); op[-2] |= LZO_BYTE(3);
  2815. *op++ = *ii++; *op++ = *ii++; *op++ = *ii++;
  2816. goto code_match;
  2817. }
  2818. if (m_pos[3] == ip[3])
  2819. #endif
  2820. goto match;
  2821. }
  2822. else
  2823. {
  2824. #if 0
  2825. #if 0
  2826. if (m_off <= M1_MAX_OFFSET && lit > 0 && lit <= 3)
  2827. #else
  2828. if (m_off <= M1_MAX_OFFSET && lit == 3)
  2829. #endif
  2830. {
  2831. register lzo_uint t;
  2832. t = lit;
  2833. assert(op - 2 > out); op[-2] |= LZO_BYTE(t);
  2834. do *op++ = *ii++; while (--t > 0);
  2835. assert(ii == ip);
  2836. m_off -= 1;
  2837. *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2));
  2838. *op++ = LZO_BYTE(m_off >> 2);
  2839. ip += 2;
  2840. goto match_done;
  2841. }
  2842. #endif
  2843. }
  2844. }
  2845. literal:
  2846. UPDATE_I(dict,0,dindex,ip,in);
  2847. ++ip;
  2848. if __lzo_unlikely(ip >= ip_end)
  2849. break;
  2850. continue;
  2851. match:
  2852. UPDATE_I(dict,0,dindex,ip,in);
  2853. if (pd(ip,ii) > 0)
  2854. {
  2855. register lzo_uint t = pd(ip,ii);
  2856. if (t <= 3)
  2857. {
  2858. assert(op - 2 > out);
  2859. op[-2] |= LZO_BYTE(t);
  2860. }
  2861. else if (t <= 18)
  2862. *op++ = LZO_BYTE(t - 3);
  2863. else
  2864. {
  2865. register lzo_uint tt = t - 18;
  2866. *op++ = 0;
  2867. while (tt > 255)
  2868. {
  2869. tt -= 255;
  2870. *op++ = 0;
  2871. }
  2872. assert(tt > 0);
  2873. *op++ = LZO_BYTE(tt);
  2874. }
  2875. do *op++ = *ii++; while (--t > 0);
  2876. }
  2877. assert(ii == ip);
  2878. ip += 3;
  2879. if (m_pos[3] != *ip++ || m_pos[4] != *ip++ || m_pos[5] != *ip++ ||
  2880. m_pos[6] != *ip++ || m_pos[7] != *ip++ || m_pos[8] != *ip++
  2881. #ifdef LZO1Y
  2882. || m_pos[ 9] != *ip++ || m_pos[10] != *ip++ || m_pos[11] != *ip++
  2883. || m_pos[12] != *ip++ || m_pos[13] != *ip++ || m_pos[14] != *ip++
  2884. #endif
  2885. )
  2886. {
  2887. --ip;
  2888. m_len = pd(ip, ii);
  2889. assert(m_len >= 3); assert(m_len <= M2_MAX_LEN);
  2890. if (m_off <= M2_MAX_OFFSET)
  2891. {
  2892. m_off -= 1;
  2893. #if defined(LZO1X)
  2894. *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2));
  2895. *op++ = LZO_BYTE(m_off >> 3);
  2896. #elif defined(LZO1Y)
  2897. *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2));
  2898. *op++ = LZO_BYTE(m_off >> 2);
  2899. #endif
  2900. }
  2901. else if (m_off <= M3_MAX_OFFSET)
  2902. {
  2903. m_off -= 1;
  2904. *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
  2905. goto m3_m4_offset;
  2906. }
  2907. else
  2908. #if defined(LZO1X)
  2909. {
  2910. m_off -= 0x4000;
  2911. assert(m_off > 0); assert(m_off <= 0x7fff);
  2912. *op++ = LZO_BYTE(M4_MARKER |
  2913. ((m_off & 0x4000) >> 11) | (m_len - 2));
  2914. goto m3_m4_offset;
  2915. }
  2916. #elif defined(LZO1Y)
  2917. goto m4_match;
  2918. #endif
  2919. }
  2920. else
  2921. {
  2922. {
  2923. const lzo_bytep end = in_end;
  2924. const lzo_bytep m = m_pos + M2_MAX_LEN + 1;
  2925. while (ip < end && *m == *ip)
  2926. m++, ip++;
  2927. m_len = pd(ip, ii);
  2928. }
  2929. assert(m_len > M2_MAX_LEN);
  2930. if (m_off <= M3_MAX_OFFSET)
  2931. {
  2932. m_off -= 1;
  2933. if (m_len <= 33)
  2934. *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
  2935. else
  2936. {
  2937. m_len -= 33;
  2938. *op++ = M3_MARKER | 0;
  2939. goto m3_m4_len;
  2940. }
  2941. }
  2942. else
  2943. {
  2944. #if defined(LZO1Y)
  2945. m4_match:
  2946. #endif
  2947. m_off -= 0x4000;
  2948. assert(m_off > 0); assert(m_off <= 0x7fff);
  2949. if (m_len <= M4_MAX_LEN)
  2950. *op++ = LZO_BYTE(M4_MARKER |
  2951. ((m_off & 0x4000) >> 11) | (m_len - 2));
  2952. else
  2953. {
  2954. m_len -= M4_MAX_LEN;
  2955. *op++ = LZO_BYTE(M4_MARKER | ((m_off & 0x4000) >> 11));
  2956. m3_m4_len:
  2957. while (m_len > 255)
  2958. {
  2959. m_len -= 255;
  2960. *op++ = 0;
  2961. }
  2962. assert(m_len > 0);
  2963. *op++ = LZO_BYTE(m_len);
  2964. }
  2965. }
  2966. m3_m4_offset:
  2967. *op++ = LZO_BYTE((m_off & 63) << 2);
  2968. *op++ = LZO_BYTE(m_off >> 6);
  2969. }
  2970. #if 0
  2971. match_done:
  2972. #endif
  2973. ii = ip;
  2974. if __lzo_unlikely(ip >= ip_end)
  2975. break;
  2976. }
  2977. *out_len = pd(op, out);
  2978. return pd(in_end,ii);
  2979. }
  2980. LZO_PUBLIC(int)
  2981. DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len,
  2982. lzo_bytep out, lzo_uintp out_len,
  2983. lzo_voidp wrkmem )
  2984. {
  2985. lzo_bytep op = out;
  2986. lzo_uint t;
  2987. if __lzo_unlikely(in_len <= M2_MAX_LEN + 5)
  2988. t = in_len;
  2989. else
  2990. {
  2991. t = do_compress(in,in_len,op,out_len,wrkmem);
  2992. op += *out_len;
  2993. }
  2994. if (t > 0)
  2995. {
  2996. const lzo_bytep ii = in + in_len - t;
  2997. if (op == out && t <= 238)
  2998. *op++ = LZO_BYTE(17 + t);
  2999. else if (t <= 3)
  3000. op[-2] |= LZO_BYTE(t);
  3001. else if (t <= 18)
  3002. *op++ = LZO_BYTE(t - 3);
  3003. else
  3004. {
  3005. lzo_uint tt = t - 18;
  3006. *op++ = 0;
  3007. while (tt > 255)
  3008. {
  3009. tt -= 255;
  3010. *op++ = 0;
  3011. }
  3012. assert(tt > 0);
  3013. *op++ = LZO_BYTE(tt);
  3014. }
  3015. do *op++ = *ii++; while (--t > 0);
  3016. }
  3017. *op++ = M4_MARKER | 1;
  3018. *op++ = 0;
  3019. *op++ = 0;
  3020. *out_len = pd(op, out);
  3021. return LZO_E_OK;
  3022. }
  3023. #endif
  3024. #undef do_compress
  3025. #undef DO_COMPRESS
  3026. #undef LZO_HASH
  3027. #undef LZO_TEST_OVERRUN
  3028. #undef DO_DECOMPRESS
  3029. #define DO_DECOMPRESS lzo1x_decompress
  3030. #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS)
  3031. #if defined(LZO_TEST_OVERRUN)
  3032. # if !defined(LZO_TEST_OVERRUN_INPUT)
  3033. # define LZO_TEST_OVERRUN_INPUT 2
  3034. # endif
  3035. # if !defined(LZO_TEST_OVERRUN_OUTPUT)
  3036. # define LZO_TEST_OVERRUN_OUTPUT 2
  3037. # endif
  3038. # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND)
  3039. # define LZO_TEST_OVERRUN_LOOKBEHIND 1
  3040. # endif
  3041. #endif
  3042. #undef TEST_IP
  3043. #undef TEST_OP
  3044. #undef TEST_LB
  3045. #undef TEST_LBO
  3046. #undef NEED_IP
  3047. #undef NEED_OP
  3048. #undef HAVE_TEST_IP
  3049. #undef HAVE_TEST_OP
  3050. #undef HAVE_NEED_IP
  3051. #undef HAVE_NEED_OP
  3052. #undef HAVE_ANY_IP
  3053. #undef HAVE_ANY_OP
  3054. #if defined(LZO_TEST_OVERRUN_INPUT)
  3055. # if (LZO_TEST_OVERRUN_INPUT >= 1)
  3056. # define TEST_IP (ip < ip_end)
  3057. # endif
  3058. # if (LZO_TEST_OVERRUN_INPUT >= 2)
  3059. # define NEED_IP(x) \
  3060. if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun
  3061. # endif
  3062. #endif
  3063. #if defined(LZO_TEST_OVERRUN_OUTPUT)
  3064. # if (LZO_TEST_OVERRUN_OUTPUT >= 1)
  3065. # define TEST_OP (op <= op_end)
  3066. # endif
  3067. # if (LZO_TEST_OVERRUN_OUTPUT >= 2)
  3068. # undef TEST_OP
  3069. # define NEED_OP(x) \
  3070. if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun
  3071. # endif
  3072. #endif
  3073. #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
  3074. # define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun
  3075. # define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun
  3076. #else
  3077. # define TEST_LB(m_pos) ((void) 0)
  3078. # define TEST_LBO(m_pos,o) ((void) 0)
  3079. #endif
  3080. #if !defined(LZO_EOF_CODE) && !defined(TEST_IP)
  3081. # define TEST_IP (ip < ip_end)
  3082. #endif
  3083. #if defined(TEST_IP)
  3084. # define HAVE_TEST_IP 1
  3085. #else
  3086. # define TEST_IP 1
  3087. #endif
  3088. #if defined(TEST_OP)
  3089. # define HAVE_TEST_OP 1
  3090. #else
  3091. # define TEST_OP 1
  3092. #endif
  3093. #if defined(NEED_IP)
  3094. # define HAVE_NEED_IP 1
  3095. #else
  3096. # define NEED_IP(x) ((void) 0)
  3097. #endif
  3098. #if defined(NEED_OP)
  3099. # define HAVE_NEED_OP 1
  3100. #else
  3101. # define NEED_OP(x) ((void) 0)
  3102. #endif
  3103. #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP)
  3104. # define HAVE_ANY_IP 1
  3105. #endif
  3106. #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP)
  3107. # define HAVE_ANY_OP 1
  3108. #endif
  3109. #if defined(DO_DECOMPRESS)
  3110. LZO_PUBLIC(int)
  3111. DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len,
  3112. lzo_bytep out, lzo_uintp out_len,
  3113. lzo_voidp wrkmem )
  3114. #endif
  3115. {
  3116. register lzo_bytep op;
  3117. register const lzo_bytep ip;
  3118. register lzo_uint t;
  3119. #if defined(COPY_DICT)
  3120. lzo_uint m_off;
  3121. const lzo_bytep dict_end;
  3122. #else
  3123. register const lzo_bytep m_pos;
  3124. #endif
  3125. const lzo_bytep const ip_end = in + in_len;
  3126. #if defined(HAVE_ANY_OP)
  3127. lzo_bytep const op_end = out + *out_len;
  3128. #endif
  3129. #if defined(LZO1Z)
  3130. lzo_uint last_m_off = 0;
  3131. #endif
  3132. LZO_UNUSED(wrkmem);
  3133. #if defined(COPY_DICT)
  3134. if (dict)
  3135. {
  3136. if (dict_len > M4_MAX_OFFSET)
  3137. {
  3138. dict += dict_len - M4_MAX_OFFSET;
  3139. dict_len = M4_MAX_OFFSET;
  3140. }
  3141. dict_end = dict + dict_len;
  3142. }
  3143. else
  3144. {
  3145. dict_len = 0;
  3146. dict_end = NULL;
  3147. }
  3148. #endif
  3149. *out_len = 0;
  3150. op = out;
  3151. ip = in;
  3152. if (*ip > 17)
  3153. {
  3154. t = *ip++ - 17;
  3155. if (t < 4)
  3156. goto match_next;
  3157. assert(t > 0); NEED_OP(t); NEED_IP(t+1);
  3158. do *op++ = *ip++; while (--t > 0);
  3159. goto first_literal_run;
  3160. }
  3161. while (TEST_IP && TEST_OP)
  3162. {
  3163. t = *ip++;
  3164. if (t >= 16)
  3165. goto match;
  3166. if (t == 0)
  3167. {
  3168. NEED_IP(1);
  3169. while (*ip == 0)
  3170. {
  3171. t += 255;
  3172. ip++;
  3173. NEED_IP(1);
  3174. }
  3175. t += 15 + *ip++;
  3176. }
  3177. assert(t > 0); NEED_OP(t+3); NEED_IP(t+4);
  3178. #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
  3179. #if !defined(LZO_UNALIGNED_OK_4)
  3180. if (PTR_ALIGNED2_4(op,ip))
  3181. {
  3182. #endif
  3183. COPY4(op,ip);
  3184. op += 4; ip += 4;
  3185. if (--t > 0)
  3186. {
  3187. if (t >= 4)
  3188. {
  3189. do {
  3190. COPY4(op,ip);
  3191. op += 4; ip += 4; t -= 4;
  3192. } while (t >= 4);
  3193. if (t > 0) do *op++ = *ip++; while (--t > 0);
  3194. }
  3195. else
  3196. do *op++ = *ip++; while (--t > 0);
  3197. }
  3198. #if !defined(LZO_UNALIGNED_OK_4)
  3199. }
  3200. else
  3201. #endif
  3202. #endif
  3203. #if !defined(LZO_UNALIGNED_OK_4)
  3204. {
  3205. *op++ = *ip++; *op++ = *ip++; *op++ = *ip++;
  3206. do *op++ = *ip++; while (--t > 0);
  3207. }
  3208. #endif
  3209. first_literal_run:
  3210. t = *ip++;
  3211. if (t >= 16)
  3212. goto match;
  3213. #if defined(COPY_DICT)
  3214. #if defined(LZO1Z)
  3215. m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
  3216. last_m_off = m_off;
  3217. #else
  3218. m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2);
  3219. #endif
  3220. NEED_OP(3);
  3221. t = 3; COPY_DICT(t,m_off)
  3222. #else
  3223. #if defined(LZO1Z)
  3224. t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
  3225. m_pos = op - t;
  3226. last_m_off = t;
  3227. #else
  3228. m_pos = op - (1 + M2_MAX_OFFSET);
  3229. m_pos -= t >> 2;
  3230. m_pos -= *ip++ << 2;
  3231. #endif
  3232. TEST_LB(m_pos); NEED_OP(3);
  3233. *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos;
  3234. #endif
  3235. goto match_done;
  3236. do {
  3237. match:
  3238. if (t >= 64)
  3239. {
  3240. #if defined(COPY_DICT)
  3241. #if defined(LZO1X)
  3242. m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3);
  3243. t = (t >> 5) - 1;
  3244. #elif defined(LZO1Y)
  3245. m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2);
  3246. t = (t >> 4) - 3;
  3247. #elif defined(LZO1Z)
  3248. m_off = t & 0x1f;
  3249. if (m_off >= 0x1c)
  3250. m_off = last_m_off;
  3251. else
  3252. {
  3253. m_off = 1 + (m_off << 6) + (*ip++ >> 2);
  3254. last_m_off = m_off;
  3255. }
  3256. t = (t >> 5) - 1;
  3257. #endif
  3258. #else
  3259. #if defined(LZO1X)
  3260. m_pos = op - 1;
  3261. m_pos -= (t >> 2) & 7;
  3262. m_pos -= *ip++ << 3;
  3263. t = (t >> 5) - 1;
  3264. #elif defined(LZO1Y)
  3265. m_pos = op - 1;
  3266. m_pos -= (t >> 2) & 3;
  3267. m_pos -= *ip++ << 2;
  3268. t = (t >> 4) - 3;
  3269. #elif defined(LZO1Z)
  3270. {
  3271. lzo_uint off = t & 0x1f;
  3272. m_pos = op;
  3273. if (off >= 0x1c)
  3274. {
  3275. assert(last_m_off > 0);
  3276. m_pos -= last_m_off;
  3277. }
  3278. else
  3279. {
  3280. off = 1 + (off << 6) + (*ip++ >> 2);
  3281. m_pos -= off;
  3282. last_m_off = off;
  3283. }
  3284. }
  3285. t = (t >> 5) - 1;
  3286. #endif
  3287. TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
  3288. goto copy_match;
  3289. #endif
  3290. }
  3291. else if (t >= 32)
  3292. {
  3293. t &= 31;
  3294. if (t == 0)
  3295. {
  3296. NEED_IP(1);
  3297. while (*ip == 0)
  3298. {
  3299. t += 255;
  3300. ip++;
  3301. NEED_IP(1);
  3302. }
  3303. t += 31 + *ip++;
  3304. }
  3305. #if defined(COPY_DICT)
  3306. #if defined(LZO1Z)
  3307. m_off = 1 + (ip[0] << 6) + (ip[1] >> 2);
  3308. last_m_off = m_off;
  3309. #else
  3310. m_off = 1 + (ip[0] >> 2) + (ip[1] << 6);
  3311. #endif
  3312. #else
  3313. #if defined(LZO1Z)
  3314. {
  3315. lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2);
  3316. m_pos = op - off;
  3317. last_m_off = off;
  3318. }
  3319. #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
  3320. m_pos = op - 1;
  3321. m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2;
  3322. #else
  3323. m_pos = op - 1;
  3324. m_pos -= (ip[0] >> 2) + (ip[1] << 6);
  3325. #endif
  3326. #endif
  3327. ip += 2;
  3328. }
  3329. else if (t >= 16)
  3330. {
  3331. #if defined(COPY_DICT)
  3332. m_off = (t & 8) << 11;
  3333. #else
  3334. m_pos = op;
  3335. m_pos -= (t & 8) << 11;
  3336. #endif
  3337. t &= 7;
  3338. if (t == 0)
  3339. {
  3340. NEED_IP(1);
  3341. while (*ip == 0)
  3342. {
  3343. t += 255;
  3344. ip++;
  3345. NEED_IP(1);
  3346. }
  3347. t += 7 + *ip++;
  3348. }
  3349. #if defined(COPY_DICT)
  3350. #if defined(LZO1Z)
  3351. m_off += (ip[0] << 6) + (ip[1] >> 2);
  3352. #else
  3353. m_off += (ip[0] >> 2) + (ip[1] << 6);
  3354. #endif
  3355. ip += 2;
  3356. if (m_off == 0)
  3357. goto eof_found;
  3358. m_off += 0x4000;
  3359. #if defined(LZO1Z)
  3360. last_m_off = m_off;
  3361. #endif
  3362. #else
  3363. #if defined(LZO1Z)
  3364. m_pos -= (ip[0] << 6) + (ip[1] >> 2);
  3365. #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
  3366. m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2;
  3367. #else
  3368. m_pos -= (ip[0] >> 2) + (ip[1] << 6);
  3369. #endif
  3370. ip += 2;
  3371. if (m_pos == op)
  3372. goto eof_found;
  3373. m_pos -= 0x4000;
  3374. #if defined(LZO1Z)
  3375. last_m_off = pd((const lzo_bytep)op, m_pos);
  3376. #endif
  3377. #endif
  3378. }
  3379. else
  3380. {
  3381. #if defined(COPY_DICT)
  3382. #if defined(LZO1Z)
  3383. m_off = 1 + (t << 6) + (*ip++ >> 2);
  3384. last_m_off = m_off;
  3385. #else
  3386. m_off = 1 + (t >> 2) + (*ip++ << 2);
  3387. #endif
  3388. NEED_OP(2);
  3389. t = 2; COPY_DICT(t,m_off)
  3390. #else
  3391. #if defined(LZO1Z)
  3392. t = 1 + (t << 6) + (*ip++ >> 2);
  3393. m_pos = op - t;
  3394. last_m_off = t;
  3395. #else
  3396. m_pos = op - 1;
  3397. m_pos -= t >> 2;
  3398. m_pos -= *ip++ << 2;
  3399. #endif
  3400. TEST_LB(m_pos); NEED_OP(2);
  3401. *op++ = *m_pos++; *op++ = *m_pos;
  3402. #endif
  3403. goto match_done;
  3404. }
  3405. #if defined(COPY_DICT)
  3406. NEED_OP(t+3-1);
  3407. t += 3-1; COPY_DICT(t,m_off)
  3408. #else
  3409. TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
  3410. #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
  3411. #if !defined(LZO_UNALIGNED_OK_4)
  3412. if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos))
  3413. {
  3414. assert((op - m_pos) >= 4);
  3415. #else
  3416. if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4)
  3417. {
  3418. #endif
  3419. COPY4(op,m_pos);
  3420. op += 4; m_pos += 4; t -= 4 - (3 - 1);
  3421. do {
  3422. COPY4(op,m_pos);
  3423. op += 4; m_pos += 4; t -= 4;
  3424. } while (t >= 4);
  3425. if (t > 0) do *op++ = *m_pos++; while (--t > 0);
  3426. }
  3427. else
  3428. #endif
  3429. {
  3430. copy_match:
  3431. *op++ = *m_pos++; *op++ = *m_pos++;
  3432. do *op++ = *m_pos++; while (--t > 0);
  3433. }
  3434. #endif
  3435. match_done:
  3436. #if defined(LZO1Z)
  3437. t = ip[-1] & 3;
  3438. #else
  3439. t = ip[-2] & 3;
  3440. #endif
  3441. if (t == 0)
  3442. break;
  3443. match_next:
  3444. assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1);
  3445. #if 0
  3446. do *op++ = *ip++; while (--t > 0);
  3447. #else
  3448. *op++ = *ip++;
  3449. if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } }
  3450. #endif
  3451. t = *ip++;
  3452. } while (TEST_IP && TEST_OP);
  3453. }
  3454. #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP)
  3455. *out_len = pd(op, out);
  3456. return LZO_E_EOF_NOT_FOUND;
  3457. #endif
  3458. eof_found:
  3459. assert(t == 1);
  3460. *out_len = pd(op, out);
  3461. return (ip == ip_end ? LZO_E_OK :
  3462. (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
  3463. #if defined(HAVE_NEED_IP)
  3464. input_overrun:
  3465. *out_len = pd(op, out);
  3466. return LZO_E_INPUT_OVERRUN;
  3467. #endif
  3468. #if defined(HAVE_NEED_OP)
  3469. output_overrun:
  3470. *out_len = pd(op, out);
  3471. return LZO_E_OUTPUT_OVERRUN;
  3472. #endif
  3473. #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
  3474. lookbehind_overrun:
  3475. *out_len = pd(op, out);
  3476. return LZO_E_LOOKBEHIND_OVERRUN;
  3477. #endif
  3478. }
  3479. #endif
  3480. #define LZO_TEST_OVERRUN 1
  3481. #undef DO_DECOMPRESS
  3482. #define DO_DECOMPRESS lzo1x_decompress_safe
  3483. #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE)
  3484. #if defined(LZO_TEST_OVERRUN)
  3485. # if !defined(LZO_TEST_OVERRUN_INPUT)
  3486. # define LZO_TEST_OVERRUN_INPUT 2
  3487. # endif
  3488. # if !defined(LZO_TEST_OVERRUN_OUTPUT)
  3489. # define LZO_TEST_OVERRUN_OUTPUT 2
  3490. # endif
  3491. # if !defined(LZO_TEST_OVERRUN_LOOKBEHIND)
  3492. # define LZO_TEST_OVERRUN_LOOKBEHIND 1
  3493. # endif
  3494. #endif
  3495. #undef TEST_IP
  3496. #undef TEST_OP
  3497. #undef TEST_LB
  3498. #undef TEST_LBO
  3499. #undef NEED_IP
  3500. #undef NEED_OP
  3501. #undef HAVE_TEST_IP
  3502. #undef HAVE_TEST_OP
  3503. #undef HAVE_NEED_IP
  3504. #undef HAVE_NEED_OP
  3505. #undef HAVE_ANY_IP
  3506. #undef HAVE_ANY_OP
  3507. #if defined(LZO_TEST_OVERRUN_INPUT)
  3508. # if (LZO_TEST_OVERRUN_INPUT >= 1)
  3509. # define TEST_IP (ip < ip_end)
  3510. # endif
  3511. # if (LZO_TEST_OVERRUN_INPUT >= 2)
  3512. # define NEED_IP(x) \
  3513. if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun
  3514. # endif
  3515. #endif
  3516. #if defined(LZO_TEST_OVERRUN_OUTPUT)
  3517. # if (LZO_TEST_OVERRUN_OUTPUT >= 1)
  3518. # define TEST_OP (op <= op_end)
  3519. # endif
  3520. # if (LZO_TEST_OVERRUN_OUTPUT >= 2)
  3521. # undef TEST_OP
  3522. # define NEED_OP(x) \
  3523. if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun
  3524. # endif
  3525. #endif
  3526. #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
  3527. # define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun
  3528. # define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun
  3529. #else
  3530. # define TEST_LB(m_pos) ((void) 0)
  3531. # define TEST_LBO(m_pos,o) ((void) 0)
  3532. #endif
  3533. #if !defined(LZO_EOF_CODE) && !defined(TEST_IP)
  3534. # define TEST_IP (ip < ip_end)
  3535. #endif
  3536. #if defined(TEST_IP)
  3537. # define HAVE_TEST_IP 1
  3538. #else
  3539. # define TEST_IP 1
  3540. #endif
  3541. #if defined(TEST_OP)
  3542. # define HAVE_TEST_OP 1
  3543. #else
  3544. # define TEST_OP 1
  3545. #endif
  3546. #if defined(NEED_IP)
  3547. # define HAVE_NEED_IP 1
  3548. #else
  3549. # define NEED_IP(x) ((void) 0)
  3550. #endif
  3551. #if defined(NEED_OP)
  3552. # define HAVE_NEED_OP 1
  3553. #else
  3554. # define NEED_OP(x) ((void) 0)
  3555. #endif
  3556. #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP)
  3557. # define HAVE_ANY_IP 1
  3558. #endif
  3559. #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP)
  3560. # define HAVE_ANY_OP 1
  3561. #endif
  3562. #if defined(DO_DECOMPRESS)
  3563. LZO_PUBLIC(int)
  3564. DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len,
  3565. lzo_bytep out, lzo_uintp out_len,
  3566. lzo_voidp wrkmem )
  3567. #endif
  3568. {
  3569. register lzo_bytep op;
  3570. register const lzo_bytep ip;
  3571. register lzo_uint t;
  3572. #if defined(COPY_DICT)
  3573. lzo_uint m_off;
  3574. const lzo_bytep dict_end;
  3575. #else
  3576. register const lzo_bytep m_pos;
  3577. #endif
  3578. const lzo_bytep const ip_end = in + in_len;
  3579. #if defined(HAVE_ANY_OP)
  3580. lzo_bytep const op_end = out + *out_len;
  3581. #endif
  3582. #if defined(LZO1Z)
  3583. lzo_uint last_m_off = 0;
  3584. #endif
  3585. LZO_UNUSED(wrkmem);
  3586. #if defined(COPY_DICT)
  3587. if (dict)
  3588. {
  3589. if (dict_len > M4_MAX_OFFSET)
  3590. {
  3591. dict += dict_len - M4_MAX_OFFSET;
  3592. dict_len = M4_MAX_OFFSET;
  3593. }
  3594. dict_end = dict + dict_len;
  3595. }
  3596. else
  3597. {
  3598. dict_len = 0;
  3599. dict_end = NULL;
  3600. }
  3601. #endif
  3602. *out_len = 0;
  3603. op = out;
  3604. ip = in;
  3605. if (*ip > 17)
  3606. {
  3607. t = *ip++ - 17;
  3608. if (t < 4)
  3609. goto match_next;
  3610. assert(t > 0); NEED_OP(t); NEED_IP(t+1);
  3611. do *op++ = *ip++; while (--t > 0);
  3612. goto first_literal_run;
  3613. }
  3614. while (TEST_IP && TEST_OP)
  3615. {
  3616. t = *ip++;
  3617. if (t >= 16)
  3618. goto match;
  3619. if (t == 0)
  3620. {
  3621. NEED_IP(1);
  3622. while (*ip == 0)
  3623. {
  3624. t += 255;
  3625. ip++;
  3626. NEED_IP(1);
  3627. }
  3628. t += 15 + *ip++;
  3629. }
  3630. assert(t > 0); NEED_OP(t+3); NEED_IP(t+4);
  3631. #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
  3632. #if !defined(LZO_UNALIGNED_OK_4)
  3633. if (PTR_ALIGNED2_4(op,ip))
  3634. {
  3635. #endif
  3636. COPY4(op,ip);
  3637. op += 4; ip += 4;
  3638. if (--t > 0)
  3639. {
  3640. if (t >= 4)
  3641. {
  3642. do {
  3643. COPY4(op,ip);
  3644. op += 4; ip += 4; t -= 4;
  3645. } while (t >= 4);
  3646. if (t > 0) do *op++ = *ip++; while (--t > 0);
  3647. }
  3648. else
  3649. do *op++ = *ip++; while (--t > 0);
  3650. }
  3651. #if !defined(LZO_UNALIGNED_OK_4)
  3652. }
  3653. else
  3654. #endif
  3655. #endif
  3656. #if !defined(LZO_UNALIGNED_OK_4)
  3657. {
  3658. *op++ = *ip++; *op++ = *ip++; *op++ = *ip++;
  3659. do *op++ = *ip++; while (--t > 0);
  3660. }
  3661. #endif
  3662. first_literal_run:
  3663. t = *ip++;
  3664. if (t >= 16)
  3665. goto match;
  3666. #if defined(COPY_DICT)
  3667. #if defined(LZO1Z)
  3668. m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
  3669. last_m_off = m_off;
  3670. #else
  3671. m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2);
  3672. #endif
  3673. NEED_OP(3);
  3674. t = 3; COPY_DICT(t,m_off)
  3675. #else
  3676. #if defined(LZO1Z)
  3677. t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
  3678. m_pos = op - t;
  3679. last_m_off = t;
  3680. #else
  3681. m_pos = op - (1 + M2_MAX_OFFSET);
  3682. m_pos -= t >> 2;
  3683. m_pos -= *ip++ << 2;
  3684. #endif
  3685. TEST_LB(m_pos); NEED_OP(3);
  3686. *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos;
  3687. #endif
  3688. goto match_done;
  3689. do {
  3690. match:
  3691. if (t >= 64)
  3692. {
  3693. #if defined(COPY_DICT)
  3694. #if defined(LZO1X)
  3695. m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3);
  3696. t = (t >> 5) - 1;
  3697. #elif defined(LZO1Y)
  3698. m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2);
  3699. t = (t >> 4) - 3;
  3700. #elif defined(LZO1Z)
  3701. m_off = t & 0x1f;
  3702. if (m_off >= 0x1c)
  3703. m_off = last_m_off;
  3704. else
  3705. {
  3706. m_off = 1 + (m_off << 6) + (*ip++ >> 2);
  3707. last_m_off = m_off;
  3708. }
  3709. t = (t >> 5) - 1;
  3710. #endif
  3711. #else
  3712. #if defined(LZO1X)
  3713. m_pos = op - 1;
  3714. m_pos -= (t >> 2) & 7;
  3715. m_pos -= *ip++ << 3;
  3716. t = (t >> 5) - 1;
  3717. #elif defined(LZO1Y)
  3718. m_pos = op - 1;
  3719. m_pos -= (t >> 2) & 3;
  3720. m_pos -= *ip++ << 2;
  3721. t = (t >> 4) - 3;
  3722. #elif defined(LZO1Z)
  3723. {
  3724. lzo_uint off = t & 0x1f;
  3725. m_pos = op;
  3726. if (off >= 0x1c)
  3727. {
  3728. assert(last_m_off > 0);
  3729. m_pos -= last_m_off;
  3730. }
  3731. else
  3732. {
  3733. off = 1 + (off << 6) + (*ip++ >> 2);
  3734. m_pos -= off;
  3735. last_m_off = off;
  3736. }
  3737. }
  3738. t = (t >> 5) - 1;
  3739. #endif
  3740. TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
  3741. goto copy_match;
  3742. #endif
  3743. }
  3744. else if (t >= 32)
  3745. {
  3746. t &= 31;
  3747. if (t == 0)
  3748. {
  3749. NEED_IP(1);
  3750. while (*ip == 0)
  3751. {
  3752. t += 255;
  3753. ip++;
  3754. NEED_IP(1);
  3755. }
  3756. t += 31 + *ip++;
  3757. }
  3758. #if defined(COPY_DICT)
  3759. #if defined(LZO1Z)
  3760. m_off = 1 + (ip[0] << 6) + (ip[1] >> 2);
  3761. last_m_off = m_off;
  3762. #else
  3763. m_off = 1 + (ip[0] >> 2) + (ip[1] << 6);
  3764. #endif
  3765. #else
  3766. #if defined(LZO1Z)
  3767. {
  3768. lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2);
  3769. m_pos = op - off;
  3770. last_m_off = off;
  3771. }
  3772. #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
  3773. m_pos = op - 1;
  3774. m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2;
  3775. #else
  3776. m_pos = op - 1;
  3777. m_pos -= (ip[0] >> 2) + (ip[1] << 6);
  3778. #endif
  3779. #endif
  3780. ip += 2;
  3781. }
  3782. else if (t >= 16)
  3783. {
  3784. #if defined(COPY_DICT)
  3785. m_off = (t & 8) << 11;
  3786. #else
  3787. m_pos = op;
  3788. m_pos -= (t & 8) << 11;
  3789. #endif
  3790. t &= 7;
  3791. if (t == 0)
  3792. {
  3793. NEED_IP(1);
  3794. while (*ip == 0)
  3795. {
  3796. t += 255;
  3797. ip++;
  3798. NEED_IP(1);
  3799. }
  3800. t += 7 + *ip++;
  3801. }
  3802. #if defined(COPY_DICT)
  3803. #if defined(LZO1Z)
  3804. m_off += (ip[0] << 6) + (ip[1] >> 2);
  3805. #else
  3806. m_off += (ip[0] >> 2) + (ip[1] << 6);
  3807. #endif
  3808. ip += 2;
  3809. if (m_off == 0)
  3810. goto eof_found;
  3811. m_off += 0x4000;
  3812. #if defined(LZO1Z)
  3813. last_m_off = m_off;
  3814. #endif
  3815. #else
  3816. #if defined(LZO1Z)
  3817. m_pos -= (ip[0] << 6) + (ip[1] >> 2);
  3818. #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
  3819. m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2;
  3820. #else
  3821. m_pos -= (ip[0] >> 2) + (ip[1] << 6);
  3822. #endif
  3823. ip += 2;
  3824. if (m_pos == op)
  3825. goto eof_found;
  3826. m_pos -= 0x4000;
  3827. #if defined(LZO1Z)
  3828. last_m_off = pd((const lzo_bytep)op, m_pos);
  3829. #endif
  3830. #endif
  3831. }
  3832. else
  3833. {
  3834. #if defined(COPY_DICT)
  3835. #if defined(LZO1Z)
  3836. m_off = 1 + (t << 6) + (*ip++ >> 2);
  3837. last_m_off = m_off;
  3838. #else
  3839. m_off = 1 + (t >> 2) + (*ip++ << 2);
  3840. #endif
  3841. NEED_OP(2);
  3842. t = 2; COPY_DICT(t,m_off)
  3843. #else
  3844. #if defined(LZO1Z)
  3845. t = 1 + (t << 6) + (*ip++ >> 2);
  3846. m_pos = op - t;
  3847. last_m_off = t;
  3848. #else
  3849. m_pos = op - 1;
  3850. m_pos -= t >> 2;
  3851. m_pos -= *ip++ << 2;
  3852. #endif
  3853. TEST_LB(m_pos); NEED_OP(2);
  3854. *op++ = *m_pos++; *op++ = *m_pos;
  3855. #endif
  3856. goto match_done;
  3857. }
  3858. #if defined(COPY_DICT)
  3859. NEED_OP(t+3-1);
  3860. t += 3-1; COPY_DICT(t,m_off)
  3861. #else
  3862. TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
  3863. #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
  3864. #if !defined(LZO_UNALIGNED_OK_4)
  3865. if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos))
  3866. {
  3867. assert((op - m_pos) >= 4);
  3868. #else
  3869. if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4)
  3870. {
  3871. #endif
  3872. COPY4(op,m_pos);
  3873. op += 4; m_pos += 4; t -= 4 - (3 - 1);
  3874. do {
  3875. COPY4(op,m_pos);
  3876. op += 4; m_pos += 4; t -= 4;
  3877. } while (t >= 4);
  3878. if (t > 0) do *op++ = *m_pos++; while (--t > 0);
  3879. }
  3880. else
  3881. #endif
  3882. {
  3883. copy_match:
  3884. *op++ = *m_pos++; *op++ = *m_pos++;
  3885. do *op++ = *m_pos++; while (--t > 0);
  3886. }
  3887. #endif
  3888. match_done:
  3889. #if defined(LZO1Z)
  3890. t = ip[-1] & 3;
  3891. #else
  3892. t = ip[-2] & 3;
  3893. #endif
  3894. if (t == 0)
  3895. break;
  3896. match_next:
  3897. assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1);
  3898. #if 0
  3899. do *op++ = *ip++; while (--t > 0);
  3900. #else
  3901. *op++ = *ip++;
  3902. if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } }
  3903. #endif
  3904. t = *ip++;
  3905. } while (TEST_IP && TEST_OP);
  3906. }
  3907. #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP)
  3908. *out_len = pd(op, out);
  3909. return LZO_E_EOF_NOT_FOUND;
  3910. #endif
  3911. eof_found:
  3912. assert(t == 1);
  3913. *out_len = pd(op, out);
  3914. return (ip == ip_end ? LZO_E_OK :
  3915. (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
  3916. #if defined(HAVE_NEED_IP)
  3917. input_overrun:
  3918. *out_len = pd(op, out);
  3919. return LZO_E_INPUT_OVERRUN;
  3920. #endif
  3921. #if defined(HAVE_NEED_OP)
  3922. output_overrun:
  3923. *out_len = pd(op, out);
  3924. return LZO_E_OUTPUT_OVERRUN;
  3925. #endif
  3926. #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
  3927. lookbehind_overrun:
  3928. *out_len = pd(op, out);
  3929. return LZO_E_LOOKBEHIND_OVERRUN;
  3930. #endif
  3931. }
  3932. #endif
  3933. /***** End of minilzo.c *****/