Add generalized string array support for new code.
Signed-off-by: Mark Rustad <[email protected]>
Tested-by: Ross Brattain <[email protected]>
---
include/strarr.h | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 64 insertions(+), 0 deletions(-)
create mode 100644 include/strarr.h
diff --git a/include/strarr.h b/include/strarr.h
new file mode 100644
index 0000000..c1fea94
--- /dev/null
+++ b/include/strarr.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2011 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Maintained at www.Open-FCoE.org
+ */
+
+#ifndef _STRARR_H_
+#define _STRARR_H_
+
+typedef const char * const _strarr[];
+
+struct _str_arr_desc {
+ const unsigned limit;
+ const _strarr * const str_arr;
+ const char * const unknown_str;
+ const char * const out_of_range_str;
+};
+
+#define GEN_STR_ARR(sc, sz, nm, unk, oor, ...) \
+static const char * const _##nm##_strs[sz] = { __VA_ARGS__ }; \
+sc const struct _str_arr_desc nm = { \
+ .limit = sizeof(_##nm##_strs) / sizeof(_##nm##_strs[0]),\
+ .str_arr = &_##nm##_strs, \
+ .unknown_str = unk, \
+ .out_of_range_str = oor, \
+}
+
+#define EXT_STR_ARR(nm, unk, oor, ...) \
+ GEN_STR_ARR(, , nm, unk, oor, __VA_ARGS__)
+#define EXT_STR_ARR_SZ(nm, sz, unk, oor, ...) \
+ GEN_STR_ARR(, sz, nm, unk, oor, __VA_ARGS__)
+#define STR_ARR(nm, unk, oor, ...) \
+ GEN_STR_ARR(static, , nm, unk, oor, __VA_ARGS__)
+#define STR_ARR_SZ(nm, sz, unk, oor, ...) \
+ GEN_STR_ARR(static, sz, nm, unk, oor, __VA_ARGS__)
+
+static inline const char *
+getstr(const struct _str_arr_desc *desc, unsigned ix)
+{
+ const char *str;
+
+ if (ix >= desc->limit)
+ return desc->out_of_range_str;
+ str = (*desc->str_arr)[ix];
+ if (!str)
+ return desc->unknown_str;
+
+ return str;
+}
+
+#endif /* _STRARR_H_ */
_______________________________________________
devel mailing list
[email protected]
https://lists.open-fcoe.org/mailman/listinfo/devel