| 1019 | } |
| 1020 | |
| 1021 | __attribute__((format (printf, 2, 3))) |
| 1022 | void |
| 1023 | strappendf (StringBuilder *dest, const char *fmt, ...) |
| 1024 | { |
| 1025 | va_list args; |
| 1026 | int len; |
| 1027 | size_t new_offset; |
| 1028 | |
| 1029 | va_start (args, fmt); |
| 1030 | len = vsnprintf (dest->str + dest->offset, dest->size - dest->offset, fmt, args); |
| 1031 | va_end (args); |
| 1032 | if (len < 0) |
| 1033 | die_with_error ("vsnprintf"); |
| 1034 | new_offset = xadd (dest->offset, len); |
| 1035 | if (new_offset >= dest->size) |
| 1036 | { |
| 1037 | dest->size = xmul (xadd (new_offset, 1), 2); |
| 1038 | dest->str = xrealloc (dest->str, dest->size); |
| 1039 | va_start (args, fmt); |
| 1040 | len = vsnprintf (dest->str + dest->offset, dest->size - dest->offset, fmt, args); |
| 1041 | va_end (args); |
| 1042 | if (len < 0) |
| 1043 | die_with_error ("vsnprintf"); |
| 1044 | } |
| 1045 | |
| 1046 | dest->offset = new_offset; |
| 1047 | } |
| 1048 | |
| 1049 | void |
| 1050 | strappend_escape_for_mount_options (StringBuilder *dest, const char *src) |