最高の連休にしようと思ったがFloraRPCのUNCパス対応の調査がしたくなったのであんまり最高ではないな
ボンクラプログラマー
頭とお腹が弱い。
最近は個人鯖の @shibafu528 がメインです。
⚠️ CW設定のない下品な発言が非常に多いです。これは仕様ですのでご了承下さい。
ℹ️ spam対策でフォロー承認制にしています。上の一文が構わないという方ならお気軽にどうぞ。
FINAL FANTASY XIV 関連の著作物は
(C) SQUARE ENIX CO., LTD. All Rights Reserved.
最高の連休にしようと思ったがFloraRPCのUNCパス対応の調査がしたくなったのであんまり最高ではないな
しかしどのレイヤーかなあ、Win32のCreateFileとかは普通に食えるよなあ
Floraのやつ、今コード忘れた状態で立ててる仮説としてはQtの型で取り回せば問題ないがフルパスのstd::stringを得るみたいな感じのAPIを使っててそこでUNCパスでのホスト情報とかが落ちたとか
室長へ Tissue検索ヒット件数だと26件ですがもっと使ってると思います しばふより
@akkiesoft 今はスタンドアロンのアプリでJavaを使うなら、ユーザーにシステムグローバルにインストールさせるんじゃなくて、そのアプリ内にバンドルする形でJavaを配れってのが推されてたと思う
自分のWindows機、D:\99とかいうクッソ適当なファイルパスにDesktopへのsymlinkが作ってあるの思い出して笑った
libprotobufのImporterでDiskSourceTreeクラスを使ってるんだけど、これ名前の通りローカルファイルシステムを前提としてるから無理やな
libprotobufだとopen()を使ってるけど、どうせこれも最終的にCreateFile()に行き着くんだろうし、まあ処理のどこでダメそうかを順々に潰していくしかないかな
最悪の場合、libprotobufが持ってるDiskSourceTreeみたいなクラスの自前実装版を作る必要が出てくる……かなー
Qtが全部パスを/に正規化してるのも気になるけど、これで引っかかってる可能性とかないんか…
これ検証作業の何がつらいって、Windowsで作業しないといけないのがつらすぎるな
VSでデバッガアタッチしてステップしてうにゃうにゃとか、あまりやる気起きないよね。なにせVSで書いたアプリじゃないし…
なーんとなく自分のコードで出してる範囲のログはそこまで重大な問題は抱えてなさそうなので、範囲はだいぶ絞れそうではある
もしかしたら、これはQtのAPIに渡す分にはよしなに再解釈してあげるけどQt外に持ち出した時とか知らねーからなwみたいな扱いのやつかもしれんし
メモ: この辺に嫌疑をかける
https://github.com/shibafu528/florarpc/blob/master/entity/Protocol.cpp#L126-L148
https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/compiler/importer.cc
Qt 5.14オフラインインストールを一旦削除してオンラインインストール版の5.14~5.15一通り入れ直したので
FloraRPCのWindows版のアーカイブの中に思いがけずabseilとかRE2とか入ってるの、Google製ライブラリ使ってるってこういうことだよなあってなる
関連付け事故でVS2019のslnを2015で開いてしまって、すぐに2019で開きなおしたけど後者のほうが先に起動完了した
QDir::toNativeSeparatorsを通せばプラットフォームに応じたパスセパレーターに変換してくれる。これにQFileDialogから得たUNCパスを通した結果は、ちゃんとvalidなUNCパス。
#FloraRPC
ただし、これをした上でDiskSourceTreeにパスを登録しても結果は変わらず。
qDebug()が文字列を妙にエスケープしてるから何も信じられなくなってる人のコード
いくつか半端なパスを叩きこんでみたが、このコードは全部正常系で通った
https://gist.github.com/shibafu528/04c31ac2836783e4d9269ecbc5167f73
--proto_pathの解釈の時点でwarning出してるからメッセージでgrepかけてるけど、あやしい場所あった
A. access(2)のラッパーがlibprotobufには用意されており、その中で妥当なパスなら例のおまじない"\\?\"を付けてから_waccessに渡している。
この妥当なパスの条件判定で、ドライブレター抜きのドライブ相対パス "\Windows\System32" みたいなのとかを蹴っていて、そこでUNCパスも蹴られる。
これ、SUPPORT_LONGPATHSとかいうマクロが定義されてるかで動き変わってるけど、\\?\のおまじない付けないモードならUNCパスそのまま食べてくれる……ってコト!?
これ正攻法としては判定を変えてUNCパスのprefixなら通すようにしたらいいと思うんだけど、異常に\を連打したドライブ相対パスと区別つかねえという問題がある
260文字制限はAPIレベルでかかっているはずで、最近のWindowsならレジストリでグローバルのその制限を外せる。そんなことせんでもプログラムが\\?\を唱えてからWinAPIに渡せばいい、だったはずだが。
一応ドキュメントはあるんですよね
Maximum Path Length Limitation - Win32 apps | Microsoft Docs
https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd
いや、うーーーーん……考えたくねえなあ
なんかおそらく正攻法でlibprotobufにパッチするのが良いんだけど、Googleの書いたでけーライブラリとかいじりたくねー
FloraRPCの使い勝手に関わる問題が、俺が悪いんじゃなくてlibprotobufが悪いんだと分かったわけですが、なんかもう疲れたし昼寝しようと思った時間返してほしい
1. libprotobufを殴る
2. DiskSourceTreeをQt APIだけ使って再実装する
この2択で解決できる
#FloraRPC
[Windows] 共有フォルダやWSL Filesystem上にあるProtoファイルがインポートできない · Issue #103 · shibafu528/florarpc
https://github.com/shibafu528/florarpc/issues/103
クソどうでもいいが、ドラッグ&ドロップでProtoファイルインポートとかできないんだなFlora
無くてもいいし何なら当初の想定ユーザーはろくなGUIファイルマネージャを使わないのでサポートする意味がなかった
クリーンなworkspaceにimportのテストする時はファイルメニューからOpen dialogでいちいち選ぶよりも、常にファイルマネージャでprotoが入ってるフォルダが見えるようにしておいてD&Dできたら楽っちゃ楽かもなとは思った
explorerなりGTK環境ならNautilusなりのサイドバーにテスト用のフォルダぶっこんどくという手はあり、これはやっている
昔のモデルと比べてずいぶん扱いやすそう
HDMI信号をワイヤレスで最大15m飛ばせるHDMIエクステンダー | マイナビニュース https://news.mynavi.jp/article/20210721-1927449/
ワイヤレスエクステンダー、部屋が終わりすぎてて配線できなかった時があって一組持ってる
ことぬいがやってきたぞ!【VOICEROID劇場】 - ニコニコ動画
https://www.nicovideo.jp/watch/sm39062734
favstarfmをGoogle翻訳にかけたらfavstarがPostgreSQLになった…