sasairc / clangsay Goto Github PK
View Code? Open in Web Editor NEWThe classic cowsay program, written in C.
License: Do What The F*ck You Want To Public License
The classic cowsay program, written in C.
License: Do What The F*ck You Want To Public License
#97 に続き844196さんからの報告。こちらはShared Library生成方法の差異(dylib)によるものなので、libbenly側のMakefile修正で対応可能であると思われる。
- macでビルド出来ないその1
soname
なんてオプションねーよと怒られる(https://stackoverflow.com/questions/4580789/ld-unknown-option-soname-on-os-x)
- macでビルドできないその2
% make libbenly_cmd.so cc -c cmd.c -o cmd.o -fPIC -DLOCALE=\"\" cc cmd.o -o libbenly_cmd.so -shared -Wl,-install_name,libbenly_cmd.so.1 Undefined symbols for architecture x86_64: "_str_to_args", referenced from: _set_cmd_val in cmd.o "_trim", referenced from: _set_io_val in cmd.o _set_cmd_val in cmd.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [libbenly_cmd.so] Error 1
vesafb
やuvesafb
を利用した場合、256色表示ができない。KMS
を利用した場合の挙動は未把握ソースツリーをcows/asciiart
とcows/pixelart
に分けた後、
make install-cows-asciiart
でアスキーアートなcowfileをインストールmake install-cows-pixelart
でドット絵なcowfileをインストールmake install-cows
で従来通り、全cowfileをインストール上記のよう修正し、インストール時の柔軟性を高めたい。
今までに素敵なcowfileを作成して頂いた方(複数形ではない)へ、Collaborators権限を追加しました。
以上の権限を持つ方は、PRで私の認可を得ることなく、自由に追加や変更を行うことができます。
master
ブランチへpush
して下さい。AUTHORS
へ作成したファイル名を含むクレジットを記述して下さい。master
ブランチ宛であれば、別途作業ブランチを作成して頂いて構いません。基本的に、ソースコードの修正はw_0.0.0
のような「次期バージョン名」ブランチ上で行っているので、master
へ変更があれば、本ブランチへマージします。
また、./cows
及びAUTHORS
以外のファイルの編集に関しては、事前にtwitterやissueでご一報下さい。
% dpkg -L cowsay | sort
/.
/usr
/usr/games
/usr/games/cowsay
/usr/games/cowthink
/usr/share
/usr/share/cowsay
/usr/share/cowsay/cows
/usr/share/cowsay/cows/apt.cow
/usr/share/cowsay/cows/beavis.zen.cow
/usr/share/cowsay/cows/bong.cow
/usr/share/cowsay/cows/bud-frogs.cow
/usr/share/cowsay/cows/bunny.cow
/usr/share/cowsay/cows/calvin.cow
/usr/share/cowsay/cows/cheese.cow
/usr/share/cowsay/cows/cock.cow
/usr/share/cowsay/cows/cower.cow
/usr/share/cowsay/cows/daemon.cow
/usr/share/cowsay/cows/default.cow
/usr/share/cowsay/cows/dragon-and-cow.cow
/usr/share/cowsay/cows/dragon.cow
/usr/share/cowsay/cows/duck.cow
/usr/share/cowsay/cows/elephant-in-snake.cow
/usr/share/cowsay/cows/elephant.cow
/usr/share/cowsay/cows/eyes.cow
/usr/share/cowsay/cows/flaming-sheep.cow
/usr/share/cowsay/cows/ghostbusters.cow
/usr/share/cowsay/cows/gnu.cow
/usr/share/cowsay/cows/head-in.cow
/usr/share/cowsay/cows/hellokitty.cow
/usr/share/cowsay/cows/kiss.cow
/usr/share/cowsay/cows/kitty.cow
/usr/share/cowsay/cows/koala.cow
/usr/share/cowsay/cows/kosh.cow
/usr/share/cowsay/cows/luke-koala.cow
/usr/share/cowsay/cows/mech-and-cow.cow
/usr/share/cowsay/cows/meow.cow
/usr/share/cowsay/cows/milk.cow
/usr/share/cowsay/cows/moofasa.cow
/usr/share/cowsay/cows/moose.cow
/usr/share/cowsay/cows/mutilated.cow
/usr/share/cowsay/cows/pony-smaller.cow
/usr/share/cowsay/cows/pony.cow
/usr/share/cowsay/cows/ren.cow
/usr/share/cowsay/cows/sheep.cow
/usr/share/cowsay/cows/skeleton.cow
/usr/share/cowsay/cows/snowman.cow
/usr/share/cowsay/cows/sodomized-sheep.cow
/usr/share/cowsay/cows/stegosaurus.cow
/usr/share/cowsay/cows/stimpy.cow
/usr/share/cowsay/cows/suse.cow
/usr/share/cowsay/cows/three-eyes.cow
/usr/share/cowsay/cows/turkey.cow
/usr/share/cowsay/cows/turtle.cow
/usr/share/cowsay/cows/tux.cow
/usr/share/cowsay/cows/unipony-smaller.cow
/usr/share/cowsay/cows/unipony.cow
/usr/share/cowsay/cows/vader-koala.cow
/usr/share/cowsay/cows/vader.cow
/usr/share/cowsay/cows/www.cow
/usr/share/doc
/usr/share/doc/cowsay
/usr/share/doc/cowsay/README
/usr/share/doc/cowsay/changelog.Debian.gz
/usr/share/doc/cowsay/changelog.gz
/usr/share/doc/cowsay/copyright
/usr/share/doc/cowsay/examples
/usr/share/doc/cowsay/examples/cowsay_random
/usr/share/man
/usr/share/man/man6
/usr/share/man/man6/cowsay.6.gz
/usr/share/man/man6/cowthink.6.gz
% dpkg -L clangsay | sort
/.
/usr
/usr/bin
/usr/bin/clangsay
/usr/share
/usr/share/clangsay
/usr/share/clangsay/compdef
/usr/share/clangsay/compdef/_clangsay.zsh
/usr/share/cowsay
/usr/share/cowsay/cows
/usr/share/cowsay/cows/charlie.cow
/usr/share/cowsay/cows/darvish.cow
/usr/share/cowsay/cows/drwtsn.cow
/usr/share/cowsay/cows/hand.cow
/usr/share/cowsay/cows/happy_mac.cow
/usr/share/cowsay/cows/hiyoko.cow
/usr/share/cowsay/cows/ibm.cow
/usr/share/cowsay/cows/iwashi.cow
/usr/share/cowsay/cows/karl_marx.cow
/usr/share/cowsay/cows/msdos.cow
/usr/share/cowsay/cows/null.cow
/usr/share/cowsay/cows/renge.cow
/usr/share/cowsay/cows/respawn.cow
/usr/share/cowsay/cows/sachiko.cow
/usr/share/cowsay/cows/shinsei.cow
/usr/share/cowsay/cows/steroid_hage.cow
/usr/share/cowsay/cows/threader.cow
/usr/share/cowsay/cows/vim.cow
/usr/share/cowsay/cows/yasuna.cow
/usr/share/cowsay/cows/yasuna_2.cow
/usr/share/cowsay/cows/yasuna_3.cow
/usr/share/cowsay/cows/yasuna_3a.cow
/usr/share/cowsay/cows/yasuna_4.cow
/usr/share/cowsay/cows/yasuna_5.cow
/usr/share/cowsay/cows/yasuna_6.cow
/usr/share/cowsay/cows/yasuna_7.cow
/usr/share/cowsay/cows/yasuna_8.cow
/usr/share/cowsay/cows/yasuna_9.cow
/usr/share/cowsay/cows/ymd_udon.cow
/usr/share/cowsay/cows/zen-noh-milk.cow
/usr/share/doc
/usr/share/doc/clangsay
/usr/share/doc/clangsay/AUTHORS
/usr/share/doc/clangsay/changelog.Debian.gz
/usr/share/doc/clangsay/copyright
/usr/share/man
/usr/share/man/ja
/usr/share/man/ja/man6
/usr/share/man/ja/man6/clangsay.6.gz
% ls -1 /usr/share/cowsay/cows | wc -l
82
結構溜まったし、そろそろ外しても問題ない・・・はず
こっちからキャッシュの破棄を送ってみましたがダメでした。
良さげなイメージ待ってます
844196さんからの報告。
-R
がセグフォで落ちる(コンテナビルド版)% docker run -it --entrypoint /bin/ash --rm clangsay:latest / # cd src /src # clangsay hoge _____ < hoge > ----- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || /src # clangsay -R 5 hoge Segmentation fault /src # echo $? 139
Debian GNU Linux (amd64, armhf) および、Travis CIでは再現性無し。
twitterでの報告からするに、recursive_msg()
内で落ちているようなので、同関数内にbpを設定し追ってみたい所。画像をみた所、最初の子プロセス生成時には正しく動いているようであり、2回目で何らかの理由によりSIGSEGV
が起きている模様。
Docker環境構築しないと再現しないのかね・・・?
判断つかないので起票
末尾にEOC
がないcowfileを指定し実行した際、cowsay
の場合は「EOC
が見つからない」としてエラーになるが、
$ renge | cowsay -f ./cows/respawn.cow
cowsay: Can't find string terminator "EOC" anywhere before EOF at cows/respawn.cow line 1, <STDIN> line 1.
clangsay
では特にエラーもなく正常終了する。
$ renge | clangsay -f ./cows/respawn.cow
略
これは期待される正しい挙動でしょうか?
今のところ末尾にEOC
のないお行儀の悪いcowfileはrespawn.cow
のみなので、確認が取れ次第修正プルリクエストを送ります...
初Issueです
現在メンテしてる844196/RengeSay ですが、機能自体はrenge.cow
の同梱とcowsay
のエイリアスなので、高機能版のclangsay
に統合していただければそれはとっても嬉しいなって(MDK)
その他、charlie.cow
も提供したく思います。同意が得られたらPRを切ります。
charlie.cow
パイプの読み込み先として、存在しないコマンドを指定した際に起こるバグの修正。
p_read_file_char()
にて、x = y = 0
だった場合の処理が抜けていた。mbstrlen()
で無限ループに陥るmblen()
が-1
を返すため。mblen()
が-1
を返した場合、return 0
として関数を出る。おおかた修正したので、コミットに対して紐付けをし、しばらく経ったらcloseします。
亀さんのほうが早い。
Makefileの21行目に定義されているCOWPATHを、make
時に置き換えるようにし、
make install
した時に、_clangsayも一括でインストールしたい。
$fpath
が、zshのインストール方法によって左右されるパイプの読み込み先として、存在しないコマンドの標準出力を指定した場合、現状では
% a | clangsay
zsh: command not found: a
_-
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
という結果になり、加えてファイルにリダイレクトさせた場合は
% a | clangsay > test.txt
zsh: command not found: a
% cat test.txt
_-
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
という具合に「言葉を失った可哀想な牛さん」のみ書き込みされてしまいます。
私自身、この振る舞いを以前から把握しており、本家cowsay
も同じ振る舞いをすることに加えて、
特に不都合(バグではない訳だし、この振る舞いは好き)が無かったので放置をしていました。
これはあくまで一個人での判断ですので、もし不都合があれば「stdin
にデータが無い場合、その時点でプログラムを終了させる」よう修正したいと思います。
「別にこのままで良いよ」という場合は、現状の状態を維持しますので、何かしら意見を書いて頂ければ嬉しいです。
最初は甘く見てしまいトップディレクトリにベタ置きしていたけれど、
結構ファイルが増えてきて「大きくもなければ小さくもない」微妙な規模なので悩む。
.
├── AUTHORS
├── Makefile
├── compdef
│ ├── Makefile
│ └── _clangsay.zsh
├── cows
│ ├── Makefile
│ ├── charlie.cow
│ ├── default.cow
│ ├── hand.cow
│ ├── hiyoko.cow
│ ├── ibm.cow
│ ├── iwashi.cow
│ ├── karl_marx.cow
│ ├── milk.cow
│ ├── null.cow
│ ├── renge.cow
│ ├── respawn.cow
│ ├── shinsei.cow
│ ├── threader.cow
│ ├── vim.cow
│ ├── yasuna.cow
│ ├── yasuna_2.cow
│ ├── yasuna_3.cow
│ ├── yasuna_3a.cow
│ ├── yasuna_4.cow
│ ├── yasuna_5.cow
│ ├── yasuna_6.cow
│ ├── yasuna_7.cow
│ ├── ymd_udon.cow
│ └── zen-noh-milk.cow
└── src
├── Makefile
├── clangsay.c
├── clangsay.h
├── config.h
├── file.c
├── file.h
├── info.c
├── info.h
├── memory.c
├── memory.h
├── string.c
├── string.h
├── subset.c
└── subset.h
うーん・・・
いつか書く
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.