HTC Vision (and others) have a Broadcom BCM4329 chip-set for WiFi/Bluetooth/FM-rx...
[bootloader-ap.git] / drivers / net / wireless / bcm4329 / miniopt.c
diff --git a/drivers/net/wireless/bcm4329/miniopt.c b/drivers/net/wireless/bcm4329/miniopt.c
new file mode 100644 (file)
index 0000000..44199ea
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Description.
+ *
+ * Copyright (C) 1999-2009, Broadcom Corporation
+ * 
+ *      Unless you and Broadcom execute a separate written software license
+ * agreement governing use of this software, this software is licensed to you
+ * under the terms of the GNU General Public License version 2 (the "GPL"),
+ * available at http://www.broadcom.com/licenses/GPLv2.php, with the
+ * following added to such license:
+ * 
+ *      As a special exception, the copyright holders of this software give you
+ * permission to link this software with independent modules, and to copy and
+ * distribute the resulting executable under terms of your choice, provided that
+ * you also meet, for each linked independent module, the terms and conditions of
+ * the license of that module.  An independent module is a module which is not
+ * derived from this software.  The special exception does not apply to any
+ * modifications of the software.
+ * 
+ *      Notwithstanding the above, under no circumstances may you combine this
+ * software in any way with any other Broadcom software provided under a license
+ * other than the GPL, without Broadcom's express prior written consent.
+ * $Id: miniopt.c,v 1.1.6.4 2009/09/25 00:32:01 Exp $
+ */
+
+/* ---- Include Files ---------------------------------------------------- */
+
+#include <typedefs.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "miniopt.h"
+
+
+/* ---- Public Variables ------------------------------------------------- */
+/* ---- Private Constants and Types -------------------------------------- */
+
+
+
+/* ---- Private Variables ------------------------------------------------ */
+/* ---- Private Function Prototypes -------------------------------------- */
+/* ---- Functions -------------------------------------------------------- */
+
+/* ----------------------------------------------------------------------- */
+void
+miniopt_init(miniopt_t *t, const char* name, const char* flags, bool longflags)
+{
+       static const char *null_flags = "";
+
+       memset(t, 0, sizeof(miniopt_t));
+       t->name = name;
+       if (flags == NULL)
+               t->flags = null_flags;
+       else
+               t->flags = flags;
+       t->longflags = longflags;
+}
+
+
+/* ----------------------------------------------------------------------- */
+int
+miniopt(miniopt_t *t, char **argv)
+{
+       int keylen;
+       char *p, *eq, *valstr, *endptr = NULL;
+       int err = 0;
+
+       t->consumed = 0;
+       t->positional = FALSE;
+       memset(t->key, 0, MINIOPT_MAXKEY);
+       t->opt = '\0';
+       t->valstr = NULL;
+       t->good_int = FALSE;
+       valstr = NULL;
+
+       if (*argv == NULL) {
+               err = -1;
+               goto exit;
+       }
+
+       p = *argv++;
+       t->consumed++;
+
+       if (!t->opt_end && !strcmp(p, "--")) {
+               t->opt_end = TRUE;
+               if (*argv == NULL) {
+                       err = -1;
+                       goto exit;
+               }
+               p = *argv++;
+               t->consumed++;
+       }
+
+       if (t->opt_end) {
+               t->positional = TRUE;
+               valstr = p;
+       }
+       else if (!strncmp(p, "--", 2)) {
+               eq = strchr(p, '=');
+               if (eq == NULL && !t->longflags) {
+                       fprintf(stderr,
+                               "%s: missing \" = \" in long param \"%s\"\n", t->name, p);
+                       err = 1;
+                       goto exit;
+               }
+               keylen = eq ? (eq - (p + 2)) : (int)strlen(p) - 2;
+               if (keylen > 63) keylen = 63;
+               memcpy(t->key, p + 2, keylen);
+
+               if (eq) {
+                       valstr = eq + 1;
+                       if (*valstr == '\0') {
+                               fprintf(stderr,
+                                       "%s: missing value after \" = \" in long param \"%s\"\n",
+                                       t->name, p);
+                               err = 1;
+                               goto exit;
+                       }
+               }
+       }
+       else if (!strncmp(p, "-", 1)) {
+               t->opt = p[1];
+               if (strlen(p) > 2) {
+                       fprintf(stderr,
+                               "%s: only single char options, error on param \"%s\"\n",
+                               t->name, p);
+                       err = 1;
+                       goto exit;
+               }
+               if (strchr(t->flags, t->opt)) {
+                       /* this is a flag option, no value expected */
+                       valstr = NULL;
+               } else {
+                       if (*argv == NULL) {
+                               fprintf(stderr,
+                               "%s: missing value parameter after \"%s\"\n", t->name, p);
+                               err = 1;
+                               goto exit;
+                       }
+                       valstr = *argv;
+                       argv++;
+                       t->consumed++;
+               }
+       } else {
+               t->positional = TRUE;
+               valstr = p;
+       }
+
+       /* parse valstr as int just in case */
+       if (valstr) {
+               t->uval = (uint)strtoul(valstr, &endptr, 0);
+               t->val = (int)t->uval;
+               t->good_int = (*endptr == '\0');
+       }
+
+       t->valstr = valstr;
+
+exit:
+       if (err == 1)
+               t->opt = '?';
+
+       return err;
+}