X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f X-Recipient: djgpp-workers AT delorie DOT com X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=QYJL6bZO0LMfBCq9XOmnKtk2VH3qEbno+jrZD0LlDGE=; b=xCfZG+8xlrv1UOPwdvPgFR+TMKeRyy1Xh2tY7gDWxR2YOMLuDVjzJIIJPOE7nCEZAP H6CDTP6QDIXTJkbT9hhxFggftvDmsNOXNABD9rCPW0FxUcZw+8OWKoPAAB3fYBfKSVZ7 9j+TfC5J5CHfAsuQ0sxiwN3y6XW5owaAxylAJZwtBAUY5YAxQnF4Dn2RGfpG5ozSknwL tR+sh5LeE4K/if0KdmTyfPysq4bBvn1y1o1HvJps4PT9ztI1dCE9pBxjWB8uGuzSUbmW 826A5oSgGpd50FD7iY/Z5h3T9wh9N8J8prSfWlJdDvR79Z2mzwqtxKljE5oQJvB7nJh8 wWiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=QYJL6bZO0LMfBCq9XOmnKtk2VH3qEbno+jrZD0LlDGE=; b=ZgbPaklrpXQ5TFDWMdnDZQZXKUmh/oOHtHCCikvG8vZlGK06VeSTOzKVQjEdYntwGY uclZKuxd9BpSj50QOJprF+1rmCnMm37GwUwC739VwGnKhKprE01suNFAxVpaqEAce/cl z6mYZC8kWctmq077vq06xGnlrQZWUPV4xEsYg82XFDbOOtGF1g+yZcq4ytBa/EcBv64V DkAUkB9+2lr6CnMqQ40c425GtUgxX6kJ10eTPOcBy/xCjw2cPCydNuN25Wzxvv0Xs+YW aTsEjXKNRYBesRdMVW4nl89Xp8GyPyZtzTWBAZZVz0JQIxtFCStAARQupjaX2cATdKpT 8m4Q== X-Gm-Message-State: AEkoouudFkr68S2yo5jGI2ZTb8DVONy3fmZoGWIBLFM5acVlcnVQ6f+TMEPUQmbS6pjDCf2oTDLg8OPrrFkDzQ== X-Received: by 10.36.53.214 with SMTP id k205mr10592369ita.85.1470503434281; Sat, 06 Aug 2016 10:10:34 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: From: "Ozkan Sezer (sezeroz AT gmail DOT com) [via djgpp-workers AT delorie DOT com]" Date: Sat, 6 Aug 2016 20:10:33 +0300 Message-ID: Subject: Re: linking more bloat from ctime.c To: djgpp-workers AT delorie DOT com Content-Type: multipart/mixed; boundary=001a114aa6bed7a6a005396a42f0 Reply-To: djgpp-workers AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp-workers AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk --001a114aa6bed7a6a005396a42f0 Content-Type: text/plain; charset=UTF-8 On 8/6/16, Rugxulo (rugxulo AT gmail DOT com) [via djgpp-workers AT delorie DOT com] wrote: > Hi, guys, > > (Okay, so this isn't a hugely critical issue, nor a priority, so > please don't think I'm complaining. I just wanted to mention it for > completeness.) > > We've already discussed the bloat of ctime.c several times over the > years. The most recent discussion was two years ago (2014/04/21), from > Ozkan Sezer, titled "ctime.c changes add about 4.5k more size". > > (I found that entire thread chain by searching my email archives and > then further searching on > http://www.delorie.com/djgpp/mail-archives/search.cgi with the > keywords "+crazy +changes +mktime".) > > http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/2014/04/21/02:44:35 > > Here's the real problem: *printf (or, more specifically, doprnt.o). A > lot has changed since 2.03p2. One very simple test of mine showed > this: > > (2.03p2): > LITE EXE 44,032 > SCANF EXE 47,616 > PRINTF EXE 51,712 > BOTH EXE 55,296 > > (2.05): > LITE EXE 72,192 > SCANF EXE 84,480 > PRINTF EXE 89,088 > BOTH EXE 100,352 > > Yes, I know, hard drives are cheap. And of course 99% of all C > programs actually need and want to use *printf. But, even > acknowledging that, I think it's a mistake to link in the full > doprnt.o just for a single line in an (here by me) unused routine in > ctime.c by default. > > // === badprint.c begins === > /* > re: DJGPP 2.05 (DJDEV-/DJLSR205.ZIP) ... > > I only want a simple call to time(), but that needs gettimeofday(), > and gettimeofday() needs mktime() and localtime(), both of which > are included inside ctime.o !! > > We must stop ctime.o from pulling in sprintf()'s (bloated) doprnt.o !! > > text data bss dec hex filename > 10832 2644 14464 27940 6d24 ctime.o > 15712 188 8 15908 3e24 doprnt.o > > sprintf() is called by asctime_r(), which itself is called by > asctime(), but ctime() also calls asctime() and ctime_r() also > calls asctime_r() !! > > The single offending sprintf format string is as follows: > > "%.3s %.3s%3d %02d:%02d:%02d %d\n" > > This should be easy to simulate without needing to include the > full doprnt.o !! > */ > > #include > > int sprintf(char* buffer, const char* format, ...) > { > fputs("Someone is calling me??? I'm a (fake) sprintf() stub!!!",stderr); > return 0; > } > // === badprint.c ends === > > P.S. In one minimal program of mine, the solution I found recently was > to not use time() at all (for srand() ), instead relying on > (non-standard!) Turbo C's gettime(), which doesn't need all the bloat > (since I was already avoiding printf() there as unnecessary). My point > is that I assume ctime.c can be "fixed" to not need sprintf() at all, > which would be more ideal than either of these kludges, right? > To overcome the bloat from ctime.c, I have been using the attached djtime.c for some time. It also avoids all timezone thingies. Maybe it would be useful to you and-or to someone else. --001a114aa6bed7a6a005396a42f0 Content-Type: text/x-csrc; charset=US-ASCII; name="djtime.c" Content-Disposition: attachment; filename="djtime.c" Content-Transfer-Encoding: base64 X-Attachment-Id: file1 c3RydWN0IHRtICpnbXRpbWUgKGNvbnN0IHRpbWVfdCAqdHQpCnsKICAgIHN0YXRpYyBjaGFyIG1v bnRodGFibGVbXSA9IHsKICAgIC8qIEphbkZlYk1hckFwck1heUp1bkp1bEF1Z1NlcE9rdE5vdiAq LwogICAgICAgMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAKICAgIH07CiAgICBzdGF0 aWMgc3RydWN0IHRtIF9teXRtOwoKICAgIHN0cnVjdCB0bSAqdG0gPSAmX215dG07CiAgICBzaWdu ZWQgbG9uZyB0aW07CiAgICBpbnQgbGVhcGRheSA9IDAsIGxlYXB5ZWFyID0gMCwgaTsKCiAgICB0 aW0gPSAqdHQ7CgogICAgdG0tPnRtX3NlYyA9IHRpbSAlIDYwOwogICAgdGltIC89IDYwOwoKICAg IHRtLT50bV9taW4gPSB0aW0gJSA2MDsKICAgIHRpbSAvPSA2MDsKCiAgICAvKgoJNzE5MTYyIG51 bWJlciBvZiBkYXlzIGJldHdlZW4gMS4xLjEgYW5kIDEuMS4xOTcwIGlmIHRoZSBjYWxlbmRhcgoJ d291bGQgZ28gc28gZmFyIHdoaWNoIGl0IGRvZXNuJ3QgOi0pIHRoaXMgaXMgdHJ1ZSBmb3IgYWxs IG9mIHRoZQoJZm9sbG93aW5nLgogICAgKi8KICAgIHRtLT50bV9ob3VyID0gdGltICUgMjQ7CiAg ICB0aW0gPSB0aW0gLyAyNCArIDcxOTE2MjsKCiAgICB0bS0+dG1fd2RheSA9ICh0aW0gKyAxKSAl IDc7CgogICAgLyogMTQ2MDk3IG51bWJlciBvZiBkYXlzIGZyb20gMS4xLjEgdG8gMS4xLjQwMSAq LwogICAgdG0tPnRtX3llYXIgPSB0aW0gLyAxNDYwOTcgKiA0MDAgLSAxODk5OwogICAgdGltICU9 IDE0NjA5NzsKCiAgICAvKiAxNDU3MzEgbnVtYmVyIG9mIGRheXMgZnJvbSAxLjEuMSB0byAxLjEu NDAwICovCiAgICBpZiAodGltID49IDE0NTczMSkKICAgIHsKCWxlYXB5ZWFyKys7IC8qIFRoZSBk YXkgaXMgaW4gb25lIG9mIHRoZSA0MDB0aCAqLwoKCS8qIEJlIGNhcmVmdWw6IFRoZSBsYXN0IG9m IHRoZSA0IGNlbnR1cmllcyBpcyAxIGRheSBsb25nZXIgKi8KCWlmICh0aW0gPT0gMTQ2MDk2KQoJ ewoJICAgIHRpbS0tOwoJICAgIGxlYXBkYXkrKzsKCX0KICAgIH0KCiAgICAvKiAzNjUyNCBudW1i ZXIgb2YgZGF5cyBmcm9tIDEuMS4xIHRvIDEuMS4xMDEgKi8KICAgIHRtLT50bV95ZWFyICs9IHRp bSAvIDM2NTI0ICogMTAwOwogICAgdGltICU9IDM2NTI0OwoKICAgIC8qIDM2MTU5IG51bWJlciBv ZiBkYXlzIGZyb20gMS4xLjEgdG8gMS4xLjEwMCAqLwogICAgaWYgKHRpbSA+PSAzNjE1OSkKCWxl YXB5ZWFyLS07IC8qIFRoZSBkYXkgaXMgaW4gb25lIG9mIHRoZSAxMDB0aCAqLwoKICAgIC8qIDE0 NjEgbnVtYmVyIG9mIGRheXMgZnJvbSAxLjEuMSB0byAxLjEuNSAqLwogICAgdG0tPnRtX3llYXIg Kz0gdGltIC8gMTQ2MSAqIDQ7CiAgICB0aW0gJT0gMTQ2MTsKCiAgICAvKiAxMDk1IG51bWJlciBv ZiBkYXlzIGZyb20gMS4xLjEgdG8gMS4xLjQgKi8KICAgIGlmICh0aW0gPj0gMTA5NSkKICAgIHsK CWxlYXB5ZWFyKys7IC8qIFRoZSBkYXkgaXMgaW4gb25lIG9mIHRoZSA0dGggKi8KCgkvKiBCZSBj YXJlZnVsOiBUaGUgNHRoIHllYXIgaXMgMSBkYXkgbG9uZ2VyICovCglpZiAodGltID09IDE0NjAp Cgl7CgkgICAgdGltLS07CgkgICAgbGVhcGRheSsrOwoJfQogICAgfQoKICAgIC8qIDM2NSBkYXlz IGluIGEgbm9ybWFsIHllYXIgKi8KICAgIHRtLT50bV95ZWFyICs9IHRpbSAvIDM2NTsKICAgIHRp bSA9IHRpbSAlIDM2NSArIGxlYXBkYXk7CgogICAgdG0tPnRtX3lkYXkgPSB0aW07CgogICAgaWYg KCFsZWFweWVhciAmJiB0aW0gPj0gMzErMjgpCgl0aW0rKzsgLyogYWRkIDEgZm9yIDI5LUZlYiBp ZiBubyBsZWFwIHllYXIgKi8KCiAgICAvKiBGaW5kIHRoZSBtb250aCAqLwogICAgZm9yIChpPTA7 IGk8MTE7IGkrKykKICAgIHsKCWlmICh0aW0gPCBtb250aHRhYmxlW2ldKQoJICAgIGJyZWFrOwoK CXRpbS09bW9udGh0YWJsZVtpXTsKICAgIH0KCiAgICB0bS0+dG1fbW9uID0gaTsKICAgIHRtLT50 bV9tZGF5ID0gdGltICsgMTsKCiAgICB0bS0+dG1faXNkc3QgPSAtMTsKCiAgICByZXR1cm4gdG07 Cn0Kc3RydWN0IHRtICpsb2NhbHRpbWUoY29uc3QgdGltZV90ICopIF9fYXR0cmlidXRlX18oKGFs aWFzKCJnbXRpbWUiKSkpOwoKY2hhciAqYXNjdGltZSAoY29uc3Qgc3RydWN0IHRtICp0bSkKewog ICAgc3RhdGljIGNvbnN0IGNoYXIgd2RheV9uYW1lWzddWzNdID0gewogICAgICAiU3VuIiwgIk1v biIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IgogICAgfTsKICAgIHN0YXRpYyBj b25zdCBjaGFyIG1vbl9uYW1lWzEyXVszXSA9IHsKICAgICAgIkphbiIsICJGZWIiLCAiTWFyIiwg IkFwciIsICJNYXkiLCAiSnVuIiwKICAgICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJO b3YiLCAiRGVjIgogICAgfTsKICAgIHN0YXRpYyBjaGFyIGJ1ZmZlclsyNl07CgogICAgc3ByaW50 ZihidWZmZXIsICIlLjNzICUuM3MlM2QgJTAyZDolMDJkOiUwMmQgJWRcbiIsCiAgICAgIHdkYXlf bmFtZVt0bS0+dG1fd2RheV0sIG1vbl9uYW1lW3RtLT50bV9tb25dLAogICAgICB0bS0+dG1fbWRh eSwgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCiAgICAgIDE5MDAgKyB0bS0+ dG1feWVhcik7CiAgICByZXR1cm4gYnVmZmVyOwp9CgpjaGFyICpjdGltZSAoY29uc3QgdGltZV90 ICp0dCkKewogICAgcmV0dXJuIGFzY3RpbWUgKGxvY2FsdGltZSAodHQpKTsKfQoKdGltZV90IG1r dGltZSAoc3RydWN0IHRtICp1dGltKQp7CiAgICBzdGF0aWMgY2hhciBtb250aHRhYmxlW10gPSB7 CiAgICAvKiBKYW5GZWJNYXJBcHJNYXlKdW5KdWxBdWdTZXBPa3ROb3YgKi8KICAgICAgIDMxLDI4 LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwCiAgICB9OwoKICAgIHRpbWVfdCB0dDsKICAgIGlu dCAgbGVhcHllYXIsIGRheXMsIHllYXIsIGk7CgogICAgLyogVE9ETzogQWRkIHN0cnVjdCB0bSBu b3JtYWxpemF0aW9uIGNvZGUgaGVyZSAqLwoKICAgIC8qIENvbXB1dGUgbnVtYmVyIG9mIGRheXMg aW4gdGhlIHllYXJzIGJlZm9yZSB0aGlzIHllYXIgYW5kIGFmdGVyIDE5NzAuCiAgICAgKiAxOTcy IGlzIHRoZSBmaXJzdCBsZWFweWVhcgogICAgICovCiAgICB5ZWFyID0gdXRpbS0+dG1feWVhci0x OwogICAgZGF5cyA9IDM2NSooeWVhci02OSkgKyAoeWVhci02OCkvNCAtIHllYXIvMTAwICsgKHll YXIrMzAwKS80MDA7CgogICAgLyogQWRkIHRoZSBkYXkgb2YgdGhlIG1vbnRocyBiZWZvcmUgdGhp cyBtb250aCAqLwogICAgZm9yIChpPTA7IGk8dXRpbS0+dG1fbW9uOyBpKyspCiAgICB7CiAgICAg ICAgZGF5cyArPSBtb250aHRhYmxlW2ldOwogICAgfQoKICAgIC8qIElzIHRoaXMgYSBsZWFweWVh ciA/ICovCiAgICB5ZWFyID0gdXRpbS0+dG1feWVhcjsKICAgIGxlYXB5ZWFyID0geWVhciU0PT0w ICYmICh5ZWFyJTEwMCE9MCB8fCAoeWVhciszMDApJTQwMD09MCk7CiAgICBpZiAobGVhcHllYXIg JiYgdXRpbS0+dG1fbW9uPjEpIGRheXMrKzsKCiAgICAvKiBBZGQgZGF5IGluIHRoZSBjdXJyZW50 IG1vbnRoICovCiAgICBkYXlzICs9IHV0aW0tPnRtX21kYXkgLSAxOwoKICAgIHR0ID0gKCAoZGF5 cyoyNCt1dGltLT50bV9ob3VyKSo2MCArIHV0aW0tPnRtX21pbiApKjYwICsgdXRpbS0+dG1fc2Vj OwoKICAgIHJldHVybiB0dDsKfQoKdm9pZCB0enNldCh2b2lkKQp7CiAgLyogbm90IHVzaW5nIHRp bWV6b25lcyAqLwp9CnZvaWQgc2V0X3V0Y19vZmZzZXQodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxp YXMoInR6c2V0IikpKTsJLyogZm9yIHdhdHQzMiBnZXR0b2QuYyAqLwp2b2lkIF9fdHpzZXQodm9p ZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoInR6c2V0IikpKTsKCnN0YXRpYyB2b2lkIGdldF96b25l IChzdHJ1Y3QgdGltZXpvbmUgKnR6LCB0aW1lX3Qgbm93KSB7CS8qIGZvciB3YXR0MzIgZ2V0dG9k LmMgKi8KICAodm9pZClub3c7CiAgaWYgKHR6KQogICAgdHotPnR6X21pbnV0ZXN3ZXN0ID0gdHot PnR6X2RzdHRpbWUgPSAwOwp9CgppbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwg c3RydWN0IHRpbWV6b25lICp0eikKewogIF9fZHBtaV9yZWdzIHI7CiAgc3RydWN0IHRtIHRtYmxr OwogIHN0cnVjdCB0aW1ldmFsIHR2X3RtcDsKCiAgaWYgKCF0dikKICAgIHR2ID0gJnR2X3RtcDsK CiAgci5oLmFoID0gMHgyYzsKICBfX2RwbWlfaW50KDB4MjEsICZyKTsKCiAgdHYtPnR2X3VzZWMg PSByLmguZGwgKiAxMDAwMDsKICB0bWJsay50bV9zZWMgPSByLmguZGg7CiAgdG1ibGsudG1fbWlu ID0gci5oLmNsOwogIHRtYmxrLnRtX2hvdXIgPSByLmguY2g7CgogIHIuaC5haCA9IDB4MmE7CiAg X19kcG1pX2ludCgweDIxLCAmcik7CgogIHRtYmxrLnRtX21kYXkgPSByLmguZGw7CiAgdG1ibGsu dG1fbW9uID0gci5oLmRoIC0gMTsKICB0bWJsay50bV95ZWFyID0gKHIueC5jeCAmIDB4N2ZmKSAt IDE5MDA7CgogIHRtYmxrLnRtX3dkYXkgPSB0bWJsay50bV95ZGF5ID0gdG1ibGsudG1fZ210b2Zm ID0gMDsKICB0bWJsay50bV96b25lID0gMDsKICB0bWJsay50bV9pc2RzdCA9IC0xOwoKICB0di0+ dHZfc2VjID0gbWt0aW1lKCZ0bWJsayk7CgogIGlmKHR6KQogICAgdHotPnR6X21pbnV0ZXN3ZXN0 ID0gdHotPnR6X2RzdHRpbWUgPSAwOy8qIG5vdCB1c2luZyB0aW1lem9uZXMgKi8KICByZXR1cm4g MDsKfQppbnQgX19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0IHRpbWV6b25l ICopIF9fYXR0cmlidXRlX18oKGFsaWFzKCJnZXR0aW1lb2ZkYXkiKSkpOwoKdGltZV90IHRpbWUg KHRpbWVfdCAqIHRsb2MpCnsKICAgIHN0cnVjdCB0aW1ldmFsIHR2OwogICAgZ2V0dGltZW9mZGF5 KCZ0diwgTlVMTCk7CiAgICBpZiAodGxvYykKICAgICAgICAqdGxvYyA9IHR2LnR2X3NlYzsKICAg IHJldHVybiB0di50dl9zZWM7Cn0K --001a114aa6bed7a6a005396a42f0--