Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-21978

make my_vsnprintf to use gcc-compatible format extensions

    XMLWordPrintable

    Details

      Description

      my_vsnprintf() is used internally in the server as a portable printf replacement. And it's also exported to plugins as a service.

      It supports a subset of printf formats and three extensions:

      • %`s means that a string should be quoted like an `identifier`
      • %b means that it's a binary string, not zero-terminated; printing won't stop at \0, so one should always specify the field width (like %.100b)
      • %M is used in error messages and prints the integer (errno) and the corresponding strerror() for it

      gcc knows printf formats and check whether actual arguments match the format string and issue a warning if they don't. Unfortunately there seems to be no easy way to teach gcc our extensions, so for now we have to disable printf format checks.

      An better approach would be to use gcc compatible format extensions, like Linux kernel does. We should migrate to a different syntax for our extensions

      • %sI to mean "print as an identifier"
      • %sB to mean "print a binary string"
      • %uE to mean "print an errno"
      • %sT to put a "..." as truncation indicator

      old formats can still be supported or they can be removed and in the latter case the major version of the service should be increased to signal an incompatible change.

      All error messages and all usages of my_vsnprintf should be changed to use the new syntax and gcc printf format checks should be enabled.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              serg Sergei Golubchik
              Reporter:
              serg Sergei Golubchik
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Dates

                Created:
                Updated: