meta-flow: Correctly set destination MAC in mf_set_flow_value().
[sliver-openvswitch.git] / CodingStyle
index 126b45a..b0aeb4e 100644 (file)
@@ -156,6 +156,12 @@ parameters and their corresponding size parameters should be paired.
         ...
     }
 
+Functions that destroy an instance of a dynamically-allocated type
+should accept and ignore a null pointer argument.  Code that calls
+such a function (including the C standard library function free())
+should omit a null-pointer check.  We find that this usually makes
+code easier to read.
+
 
 FUNCTION PROTOTYPES
 
@@ -168,7 +174,7 @@ prototype:
   Omit parameter names from function prototypes when the names do not
 give useful information, e.g.:
 
-    int netdev_get_mtu(const struct netdev *);
+    int netdev_get_mtu(const struct netdev *, int *mtup);
 
 
 STATEMENTS
@@ -412,13 +418,8 @@ Exception 1: Put a space after (but not before) the "sizeof" keyword.
 Exception 2: Put a space between the () used in a cast and the
 expression whose type is cast: (void *) 0.
 
-  Break long lines before binary operators and the ternary operators ?
-and :, rather than after them, e.g.
-
-    if (first_long_condition() || second_long_condition()
-        || third_long_condition())
-
-and
+  Break long lines before the ternary operators ? and :, rather than
+after them, e.g.
 
     return (out_port != VIGP_CONTROL_PATH
             ? alpheus_output_port(dp, skb, out_port)
@@ -430,7 +431,9 @@ and
 precedence makes it necessary, or unless the operands are themselves
 expressions that use && and ||.  Thus:
 
-    if (!isdigit(s[0]) || !isdigit(s[1]) || !isdigit(s[2])) {
+    if (!isdigit((unsigned char)s[0])
+            || !isdigit((unsigned char)s[1])
+            || !isdigit((unsigned char)s[2])) {
         printf("string %s does not start with 3-digit code\n", s);
     }
 
@@ -471,9 +474,8 @@ global variables.
 
 C DIALECT
 
-  Try to avoid using GCC extensions where possible.
-
-  Some C99 extensions are OK:
+  Some C99 features are OK because they are widely implemented even in
+older compilers:
 
     * Flexible array members (e.g. struct { int foo[]; }).
 
@@ -488,9 +490,8 @@ C DIALECT
       only take on the values 0 or 1, because this behavior can't be
       simulated on C89 compilers.
 
-  Don't use other C99 extensions, and especially:
-
-    * Don't use // comments.
+  Don't use other C99 features that are not widely implemented in
+older compilers:
 
     * Don't use designated initializers (e.g. don't write "struct foo
       foo = {.a = 1};" or "int a[] = {[2] = 5};").
@@ -502,3 +503,10 @@ C DIALECT
 
     * Don't put a trailing comma in an enum declaration (e.g. don't
       write "enum { x = 1, };").
+
+  As a matter of style, avoid // comments.
+
+  Avoid using GCC extensions unless you also add a fallback for
+non-GCC compilers.  You can, however, use GCC extensions and C99
+features in code that compiles only on GNU/Linux (such as
+lib/netdev-linux.c), because GCC is the system compiler there.