Advertisement
alansam

sprintf_deprecated

May 30th, 2023 (edited)
918
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.89 KB | Source Code | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdint.h>
  5. #include <inttypes.h>
  6. #include <ctype.h>
  7.  
  8. //  MARK: - Definitions.
  9. typedef uint8_t octet;
  10.  
  11. int snap(FILE * fp, void const * opvar, size_t op_l);
  12.  
  13. /*
  14.  *  MARK: main()
  15.  */
  16. int main(int argc, char const * argv[]) {
  17.   char bfr[1024] = { '\0', };
  18.   size_t bfr_sz = sizeof bfr / sizeof *bfr;
  19.   int onek = 1024;
  20.   double G333 = 6.333;
  21.   char const * alan_kana = "アラン";
  22.   char const * alan_kanaU = "\u30a2\u30e9\u30f3"; // UTF-8: 0xE3 0x82 0xA2 - 0xE3 0x83 0xA9 - 0xE3 0x83 0xB3
  23.   char const * alan_hira = "あらん";
  24.   char const * alan_hiraU = "\u3042\u3089\u3093"; // UTF-8: 0xE3 0x81 0x82 - 0xE3 0x82 0x89 - 0xE3 0x82 0x93
  25.  
  26.   sprintf(bfr, "%5d %7.3f %08x %s %s", onek, G333, onek, alan_kana, alan_hira);
  27.   printf("%4zu: %s\n", strlen(bfr), bfr);
  28.  
  29.   snprintf(bfr, bfr_sz, "%5d %7.3f %08x %s %s", onek, G333, onek, alan_kanaU, alan_hiraU);
  30.   printf("%4zu: %s\n", strlen(bfr), bfr);
  31.  
  32.   snap(stdout, bfr, strlen(bfr) + 1);
  33.  
  34.   return 0;
  35. }
  36.  
  37. /*
  38.  *  MARK: snap()
  39.  *  SVC 51 (0A33)
  40.  */
  41. int snap(FILE * fp, void const * opvar, size_t op_l) {
  42.  
  43.   octet const * op = (octet const *) opvar;
  44.   int chr_ct = 0;
  45.  
  46.   size_t const LL = 0x20; //  snap line length (32)
  47.   size_t const GP = 0x08; //  distance between print gaps
  48.   octet const * op_end = op + op_l;
  49.   octet const * op_now = op;
  50.  
  51.   chr_ct += fprintf(fp, "%p:\n", (void *) op);
  52.   while (op_now < op_end) {
  53.     octet const * hex_p = op_now;
  54.     octet const * chr_p = op_now;
  55.  
  56.     chr_ct += fprintf(fp, "%04" PRIxPTR ": ", hex_p - op);
  57.     for (size_t xc = 0, sp = 1; xc < LL; ++xc) {
  58.       octet const * loc = hex_p++;
  59.       if (loc < op_end) {
  60.         octet x_ = *loc;
  61.         chr_ct += fprintf(fp, "%02" PRIx8 "%s", x_, (sp++ % GP == 0) ? " " : "");
  62.       }
  63.       else {
  64.         chr_ct += fprintf(fp, "  %s", (sp++ % GP == 0) ? " " : "");
  65.       }
  66.     }
  67.     chr_ct += fprintf(fp, " ");
  68.  
  69.     for (size_t cc = 0, sp = 1; cc < LL; ++cc) {
  70.       octet const * loc = chr_p++;
  71.       octet c_ = loc < op_end ? *loc : ' ';
  72.       chr_ct += fprintf(fp, "%c%s", isprint(c_) ? c_ : '.', (sp++ % GP == 0) ? " " : "");
  73.     }
  74.     chr_ct += fprintf(fp, "\n");
  75.     op_now += LL;
  76.   }
  77.   chr_ct += fprintf(fp, "\n");
  78.  
  79.   return chr_ct;
  80. }
  81.  
  82. /*
  83. $ clang -Wall -Wpedantic -Werror=vla -fsanitize=address -std=gnu2x -o ../bin/sprintf_dep sprintf_dep.c && ../bin/sprintf_dep
  84. sprintf_dep.c:26:3: warning: 'sprintf' is deprecated: This function is provided for compatibility reasons only.  Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead. [-Wdeprecated-declarations]
  85.   sprintf(bfr, "%5d %7.3f %08x %s %s", onek, G333, onek, alan_kana, alan_hira);
  86.   ^
  87. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdio.h:188:1: note: 'sprintf' has been explicitly marked deprecated here
  88. __deprecated_msg("This function is provided for compatibility reasons only.  Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead.")
  89. ^
  90. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/cdefs.h:215:48: note: expanded from macro '__deprecated_msg'
  91.         #define __deprecated_msg(_msg) __attribute__((__deprecated__(_msg)))
  92.                                                       ^
  93. 1 warning generated.
  94. sprintf_dep(12209,0x114b9d600) malloc: nano zone abandoned due to inability to preallocate reserved vm space.
  95.   42:  1024   6.333 00000400 アラン あらん
  96.   42:  1024   6.333 00000400 アラン あらん
  97. 0x7ff7b7269ec0:
  98. 0000: 2031303234202020 362e333333203030 30303034303020e3 82a2e383a9e383b3   1024    6.333 00 000400 . ........
  99. 0020: 20e38182e38289e3 829300                                               ....... ...                        
  100. $
  101. */
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement