Forum: Ruby-dev [Ruby 1.9 - Feature #5317][Open] rubyのヘッダファイルを使った拡張を行う際にuid tの宣言回避をする事が出来ない。

Posted by Yasuhiro Matsumoto (Guest)
on 2011-09-13 14:48
(Received via mailing list)
Issue #5317 has been reported by Yasuhiro Matsumoto.

----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にuid_tの宣言回避をする事が出来ない。
http://redmine.ruby-lang.org/issues/5317

Author: Yasuhiro Matsumoto
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.x


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by Yasuhiro Matsumoto (Guest)
on 2011-09-13 14:52
(Received via mailing list)
Issue #5317 has been updated by Yasuhiro Matsumoto.


ぜんぜんuid_tじゃないですねw off_tでした!
以下、s/uid_t/off_t/g で置き換えて下さい。

----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にuid_tの宣言回避をする事が出来ない。
http://redmine.ruby-lang.org/issues/5317

Author: Yasuhiro Matsumoto
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.x


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by Nobuyoshi Nakada (nobu)
on 2011-09-13 15:25
(Received via mailing list)
Issue #5317 has been updated by Nobuyoshi Nakada.

Subject changed from rubyのヘッダファイルを使った拡張を行う際にuid_tの宣言回避をする事が出来ない。 to 
rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。


----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。
http://redmine.ruby-lang.org/issues/5317

Author: Yasuhiro Matsumoto
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.x


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by Nobuyoshi Nakada (nobu)
on 2011-09-13 15:52
(Received via mailing list)
Issue #5317 has been updated by Nobuyoshi Nakada.


Yasuhiro Matsumoto wrote:
> が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。
ruby.hのあとで #undef off_t では回避できませんか。

----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。
http://redmine.ruby-lang.org/issues/5317

Author: Yasuhiro Matsumoto
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.x


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by Yasuhiro Matsumoto (Guest)
on 2011-09-13 17:58
(Received via mailing list)
Issue #5317 has been updated by Yasuhiro Matsumoto.


vimのpatchとしてはそうしました。

https://groups.google.com/d/topic/vim_dev/VM_AgsF1...

ただ、あまりお作法が良いとは思えませんでした。
出来ればどのプロジェクトでも

#undef off_t

しなくても良い形がのぞましいと思ってます的な意味でfeature requestです。:)


----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。
http://redmine.ruby-lang.org/issues/5317

Author: Yasuhiro Matsumoto
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.x


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by Yui NARUSE (Guest)
on 2011-09-13 23:27
(Received via mailing list)
Issue #5317 has been updated by Yui NARUSE.


システムに _off_t があったら、__int64 ではなく _off_t を使うようにすればいいんですかね。
いや、_off64_t か?
----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。
http://redmine.ruby-lang.org/issues/5317

Author: Yasuhiro Matsumoto
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.x


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by Yasuhiro Matsumoto (Guest)
on 2011-09-14 02:33
(Received via mailing list)
Issue #5317 has been updated by Yasuhiro Matsumoto.


> システムに _off_t があったら、__int64 ではなく _off_t を使うようにすればいいんですかね。
> いや、_off64_t か?

そうですね。
もしくはconfig.hのSIZEOF_OFF_T宣言を無効化出来るとか。

#ifndef SIZEOF_OFF_T
#define SIZEOF_OFF_T 8
#endif

まぁoff_tに限った話でもなさそうですが。

----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。
http://redmine.ruby-lang.org/issues/5317

Author: Yasuhiro Matsumoto
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.x


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by mame (Yusuke Endoh) (Guest)
on 2012-03-26 20:06
(Received via mailing list)
Issue #5317 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to nobu (Nobuyoshi Nakada)

まあこれは何かしら対処すべきじゃないですかね。

#define off_t を入れたのはなかださんっぽい (r10720) ので、
なかださんお願いします。

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Feature #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。
https://bugs.ruby-lang.org/issues/5317#change-25214

Author: mattn (Yasuhiro Matsumoto)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 2.0.0


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Posted by mame (Yusuke Endoh) (Guest)
on 2013-02-18 13:26
(Received via mailing list)
Issue #5317 has been updated by mame (Yusuke Endoh).

Target version changed from 2.0.0 to 2.1.0
ruby -v set to -

残念ながら何ともしてもらえなかったですかね。まあ回避策あるので先送りにします。

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Bug #5317: rubyのヘッダファイルを使った拡張を行う際にoff_tの宣言回避をする事が出来ない。
https://bugs.ruby-lang.org/issues/5317#change-36509

Author: mattn (Yasuhiro Matsumoto)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 2.1.0
ruby -v: -


以前、vimのif_ruby(ruby拡張)の修正を担当した時、mingw32でのuid_tの宣言とrubyに同梱されているwin32.hでの宣言に差異があり、リンクされた物がクラッシュするというバグに遭遇しました。

vimでrubyに関連するのはif_ruby.cであり、そのファイルのみがruby.hをincludeしているのですが(他のファイルもruby.hをincludeしろというのは無しです)、別のファイルはmingw32の宣言である

sys/types.h:
    typedef long _off_t;

と

ruby-1.9.1/ruby/win32.h:
    #define off_t __int64

https://github.com/ruby/ruby/blob/trunk/include/ruby/win32.h

が競合してしまい、構造体内にoff_t型のメンバを持つ2つのオブジェクトファイル通しでメンバ参照すると落ちるという物でした。

win32.hの方は、SIZEOF_OFF_Tが宣言されていれば#defineを回避出来ますが、このSIZEOF_OFF_Tはconfigureで吐かれるconfig.hに出力されてしまっている事から、ruby.h 
→ ruby/ruby.h → ruby/config.h 
と読み込まれて(win32の場合)、結果としてSIZEOF_OFF_Tは変更出来ない事になります。

vimの場合は、LoadLibraryとGetProcAddressを使ったダイナミックローディングを使っていますが、出来れば宣言くらいは横着してヘッダファイルが使いたいので、出来ればoff_tの宣言回避が出来ない物かと思っています。
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.