Узнал много нового — спасибо! Для меня ядро — это что-то непонятное и даже страшное!.. А уж добавить или исправить в нём что-то — это вообще необъяснимое и недостижимое!.. Может быть и я когда-нибудь смогу сделать патч для ядра, но пока в это слабо верится.
Я хочу в будущем написать статью, рассказывающую что новичок может улучшить или исправить в ядре. Забегая вперёд, могу подсказать следующую задачу (подразумевается владение английским хоть какое, понимание как работать c Git, азы языка Си и самое главное — рвение сделать это): в ядре ещё не до конца вычистили куски, где можно использовать %*ph. Такие места ищутся просто по паттернам %02x[ :-]02x[ :-]02x. Если есть интерес и желание, могу помочь более детально. Мой JID: andriy@jabber.ru.
Хм. Эти суффиксные модификаторы, во-первых, ломают обратную совместимость. А во-вторых, приводят к неочевидному парсированию — нужно помнить все суффиксы, чтобы отличать их от просто букв, которые должны напечататься как есть.
Можно же было префиксами выразиться, пусть даже ценой увеличения форматной строки на один символ.
Мы — в MySQL в свое время — как раз стали расширять префиксами и новыми модификаторами. Суффиксы — они не в стиле printf, это что-то новое. У нас все как раз соответствовало духу printf. был модификатор `, использовался как "%`s", был новый символ формата b, использовался как "%b". Минусы такого решения — в редакторе подсветка синтаксиса их не подсвечивает (мне-то пофиг, у меня vim, я его и подкрутить могу, другим мешает). И особенно неприятно — компилятор все время предупреждения выдает на неправильную форматную строку. А суффиксное решение компилятор не отвлекает.
Сделаем код чище: Специальные расширения vsnprintf() в ядре Linux