Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/next/external/cache/sources/wl/shared/miniopt.c
Views: 3959
/*1* Description.2*3* $Copyright Open Broadcom Corporation$4* $Id: miniopt.c 401759 2013-05-13 16:08:08Z sudhirbs $5*/67/* ---- Include Files ---------------------------------------------------- */89#include <typedefs.h>10#include <stdio.h>11#include <stdlib.h>12#include <string.h>13#include <miniopt.h>141516/* ---- Public Variables ------------------------------------------------- */17/* ---- Private Constants and Types -------------------------------------- */1819/* XXX FIXME: this should be moved to a common header file. */20#if defined(_CFE_)21#define fprintf(stream, fmt, args...) xprintf(fmt , ## args)22#elif defined(__IOPOS__)23#define fprintf(file, fmt, arg...) jtag_printf(fmt , ## arg)24#endif252627/* ---- Private Variables ------------------------------------------------ */28/* ---- Private Function Prototypes -------------------------------------- */29/* ---- Functions -------------------------------------------------------- */3031/* ----------------------------------------------------------------------- */32void33miniopt_init(miniopt_t *t, const char* name, const char* flags, bool longflags)34{35static const char *null_flags = "";3637memset(t, 0, sizeof(miniopt_t));38t->name = name;39if (flags == NULL)40t->flags = null_flags;41else42t->flags = flags;43t->longflags = longflags;44}454647/* ----------------------------------------------------------------------- */48int49miniopt(miniopt_t *t, char **argv)50{51int keylen;52char *p, *eq, *valstr, *endptr = NULL;53int err = 0;5455t->consumed = 0;56t->positional = FALSE;57memset(t->key, 0, MINIOPT_MAXKEY);58t->opt = '\0';59t->valstr = NULL;60t->good_int = FALSE;61valstr = NULL;6263if (*argv == NULL) {64err = -1;65goto exit;66}6768p = *argv++;69t->consumed++;7071if (!t->opt_end && !strcmp(p, "--")) {72t->opt_end = TRUE;73if (*argv == NULL) {74err = -1;75goto exit;76}77p = *argv++;78t->consumed++;79}8081if (t->opt_end) {82t->positional = TRUE;83valstr = p;84}85else if (!strncmp(p, "--", 2)) {86eq = strchr(p, '=');87if (eq == NULL && !t->longflags) {88fprintf(stderr,89"%s: missing \" = \" in long param \"%s\"\n", t->name, p);90err = 1;91goto exit;92}93keylen = eq ? (eq - (p + 2)) : (int)strlen(p) - 2;94if (keylen > 63) keylen = 63;95memcpy(t->key, p + 2, keylen);9697if (eq) {98valstr = eq + 1;99if (*valstr == '\0') {100fprintf(stderr,101"%s: missing value after \" = \" in long param \"%s\"\n",102t->name, p);103err = 1;104goto exit;105}106}107}108else if (!strncmp(p, "-", 1)) {109t->opt = p[1];110if (strlen(p) > 2) {111fprintf(stderr,112"%s: only single char options, error on param \"%s\"\n",113t->name, p);114err = 1;115goto exit;116}117if (strchr(t->flags, t->opt)) {118/* this is a flag option, no value expected */119valstr = NULL;120} else {121if (*argv == NULL) {122fprintf(stderr,123"%s: missing value parameter after \"%s\"\n", t->name, p);124err = 1;125goto exit;126}127valstr = *argv;128argv++;129t->consumed++;130}131} else {132t->positional = TRUE;133valstr = p;134}135136/* parse valstr as int just in case */137if (valstr) {138t->uval = (uint)strtoul(valstr, &endptr, 0);139t->val = (int)t->uval;140t->good_int = (*endptr == '\0');141}142143t->valstr = valstr;144145exit:146if (err == 1)147t->opt = '?';148149return err;150}151152153