This follows the rules I learned in school. Some locales may prefer to
omit the comma before "and" in a list of three or more items.
* its return value. (Note that every scalar type can be implicitly
* converted to bool.) */
void ignore(bool x OVS_UNUSED) { }
+
+/* Returns an appropriate delimiter for inserting just before the 0-based item
+ * 'index' in a list that has 'total' items in it. */
+const char *
+english_list_delimiter(size_t index, size_t total)
+{
+ return (index == 0 ? ""
+ : index < total - 1 ? ", "
+ : total > 2 ? ", and "
+ : " and ");
+}
int hexit_value(int c);
unsigned int hexits_value(const char *s, size_t n, bool *ok);
+const char *english_list_delimiter(size_t index, size_t total);
+
char *get_cwd(void);
char *dir_name(const char *file_name);
char *base_name(const char *file_name);