This is the mail archive of the cygwin-patches mailing list for the Cygwin project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Feb 22 09:32, Christopher Faylor wrote:The advantage of going function-form on the macro is that the preprocessor is smart enough to leave non-function uses of the identifier untouched:On Fri, Feb 22, 2013 at 11:02:55AM +0100, Corinna Vinschen wrote:On Feb 22 10:51, Corinna Vinschen wrote:On Feb 22 03:40, Yaakov wrote:I applied this patch to the 64 bit branch for now.On Fri, 22 Feb 2013 09:49:51 +0100, Corinna Vinschen wrote:Like this?access should go, no doubt about it.
For get_osfhandle and setmode I would prefer maintaining backward compatibility with existing applications. Both variations, with and without underscore are definitely in use.
What about exporting the underscored variants only, but define the non-underscored ones:
extern long _get_osfhandle(int); #define get_osfhandle(i) _get_osfhandle(i)
extern int _setmode (int __fd, int __mode); #define setmode(f,m) _setmode((f),(m))Just to be clear: On 32 bit we should keep the exported symbols, too. On 64 bit we can drop the non-underscored ones (which just requires to rebuild gawk for me) and only keep the defines for backward compatibility.Almost. The _setmode needs a tweak, too. I also think it makes sense to rename the functions inside of syscalls.cc: [...]I was actually expecting that we'd break the compilation of existing applications which incorrectly referenced get_osfhandle and setmode (I have a couple of those). It's a simple fix if someone recompiles and it wouldn't be the first time that you'd have to make a source code change when upreving to a new "OS". For 32-bit we would need to keep both in cygwin.din though, of course.I'm trying to keep up with backward compatibility on the source level as far as it makes sense (for a given value of "sense").
But, if you're going to use defines, why not just simplify them as:
#define get_osfhandle _get_osfhandle #define setmode _setmodeI can do that, but I thought error messages would be more meaningful when using macros with arguments. Dunno, I was just trying to do it right. Shall I still simplify them?
#define foo(x,y) bar(x,y) ... foo(1, 2); // changed to bar(1,2) int foo = 10; // left as `foo'
#define foo hi #define bar(x,y) hi(x,y) int hi(int,int); ... foo(1); // error: too few arguments to function âint hi(int, int)â // note: declared here [pointer to the declaration of hi()] bar(1); // error: macro "bar" requires 2 arguments, but only 1 given
$0.02 Ryan
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |