[ https://issues.apache.org/jira/browse/HADOOP-7824?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14637465#comment-14637465 ]
Colin Patrick McCabe commented on HADOOP-7824: ---------------------------------------------- Hmm. I don't think there is a lot of "cut and paste boilerplate" associated with doing it as function calls. The only thing I can think of is the "if (failed)..." check after each function call. Personally, I prefer seeing that, though, since it makes the control flow clearer to me. And surely using function calls is just as reusable by other Hadoop components as using a table-driven approach? Code being at the top of the file versus the middle of the file seems like an odd argument to make. I don't think it matters where in the file the code is. Mainly, what I don't like about the table-driven approach is that it involves a clunky "parallel type system" (CT_BOOL, CT_INT, CT_LONG) and a set of somewhat complex macros. I also find it confusing to have a bunch of types that start with "const" like {{const_type}}, {{const_signature}}, etc.... but are not {{const}} in the C sense of the word! I think this code may depend on C99 as well... did C89 support { .bool_val=C } and so forth? It seems much simpler to just call a function to do what you want. If you really find it cumbersome to have an "if" statement after each function call, how about having something like this: {code} jthrowable jthr = NULL; setIntConstant("O_RDONLY", O_RDONLY, &jthr); setBooleanConstant("fadvisePossible", HAVE_POSIX_FADVISE, &jthr); ... if (jthr) { (*env)->Throw(env, jthr); } {code} And have some code in the functions which just returns and does nothing if jthr is set. > Native IO uses wrong constants almost everywhere > ------------------------------------------------ > > Key: HADOOP-7824 > URL: https://issues.apache.org/jira/browse/HADOOP-7824 > Project: Hadoop Common > Issue Type: Sub-task > Components: native > Affects Versions: 0.20.204.0, 0.20.205.0, 1.0.3, 0.23.0, 2.0.0-alpha, 3.0.0 > Environment: Mac OS X, Linux, Solaris, Windows, ... > Reporter: Dmytro Shteflyuk > Assignee: Martin Walsh > Labels: hadoop > Fix For: 2.8.0 > > Attachments: HADOOP-7824.001.patch, HADOOP-7824.002.patch, > HADOOP-7824.patch, HADOOP-7824.patch, hadoop-7824.txt > > > Constants like O_CREAT, O_EXCL, etc. have different values on OS X and many > other operating systems. -- This message was sent by Atlassian JIRA (v6.3.4#6332)