FreeBSD NetBSDのprintf(9)にまつわるあれこれ

ちょっとprintfの出力で困ったことがあったので聞いてみたところから、FreeBSD,NetBSDのカーネルメッセージを出すためのprintfに関して教えてもらったこと。
10
Takanori Watanabe 💉💉 @takawata19

そいえば、文字列長さが何らかの方法でわかってるnulターミネートされていない可変長の文字列を表示するライブラリ関数あるのかな。 バッファにコピーしてNULターミネートすればおしまいではあるんだが。

2013-05-10 20:08:57
対鉱物用武装 @kikairoya

@takawata19 表示が何を指すのか分からんけど、 stdout に出せばいいなら fwrite すればよい

2013-05-10 20:10:28
SODA Noriyuki @n_soda

@takawata19 printf(3) で、フォーマット文字列に "%.*s" でいけます。

2013-05-10 20:10:46
tnozaki @tnozaki

ライブラリ関数がlibcでなくlibkernとかの可能性が

2013-05-10 20:13:36
Takanori Watanabe 💉💉 @takawata19

case '*': if (!dot) { width = va_arg(ap, int); if (width < 0) { ladjust = !ladjust; width = -width; } } ..

2013-05-10 20:27:58
Takanori Watanabe 💉💉 @takawata19

@n_soda @tnozaki でFreeBSDのは行けたんで。たすかりますた。

2013-05-10 20:25:05
tnozaki @tnozaki

Nはlibkernの方はprintfってwidth supportあるんだっけか、libstandはpatch書いた記憶あるけど

2013-05-10 20:14:49
SODA Noriyuki @n_soda

@takawata19 @tnozaki それは良かった。ソースをチラ見しただけだけど、Nのも大丈夫っぽいっす。

2013-05-10 20:28:05
Takanori Watanabe 💉💉 @takawata19

[base] Diff of /head/sys/kern/subr_prf.c http://t.co/1x7GHwfq6S FreeBSDでは1996年頃か。

2013-05-10 20:58:37
tnozaki @tnozaki

@cvsync @n_soda @takawata19 libsaはオプションつければwidth有効になるpatchを以前mergeして貰ってますね http://t.co/1Wm7Y8dNSI

2013-05-10 20:39:25
SODA Noriyuki @n_soda

@tnozaki @cvsync @takawata19 お、どーも。#ifdef を目が勝手にスキップしてました。;-)

2013-05-10 20:54:38
tnozaki @tnozaki

みんなprintfのデザインはダメダメだと思っても真っ先に欲しくなるふしぎ!

2013-05-10 20:45:14
tnozaki @tnozaki

そいえばtime_tをprintfで扱うのにPRIマクロ追加しろの議論あるたびにstrftimeしろバーヤバーヤいってたけど、strftime(9)はないわけでそっちの人達の発想なんだな、と今気づいた

2013-05-10 20:53:37
tnozaki @tnozaki

@tsutsuii @n_soda そもそもなぜ自由なkernel内でレガシーなprintfを使うのか(意識高い系)

2013-05-10 21:08:45
Izumi Tsutsui @tsutsuii

@tnozaki @n_soda そもそも「いかに美しく警告を消すか」という本末転倒派の存在

2013-05-10 21:10:14