MCPcopy Index your code
hub / github.com/RsyncProject/rsync / findOption

Function findOption

popt/popt.c:552–613  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

550}
551
552static const struct poptOption *
553findOption(const struct poptOption * opt,
554 const char * longName, size_t longNameLen,
555 char shortName,
556 poptCallbackType * callback,
557 const void ** callbackData,
558 unsigned int argInfo)
559{
560 const struct poptOption * cb = NULL;
561 poptArg cbarg = { .ptr = NULL };
562
563 /* This happens when a single - is given */
564 if (LF_ISSET(ONEDASH) && !shortName && (longName && *longName == '\0'))
565 shortName = '-';
566
567 for (; opt->longName || opt->shortName || opt->arg; opt++) {
568 poptArg arg = { .ptr = opt->arg };
569
570 switch (poptArgType(opt)) {
571 case POPT_ARG_INCLUDE_TABLE: /* Recurse on included sub-tables. */
572 { const struct poptOption * opt2;
573
574 poptSubstituteHelpI18N(arg.opt); /* XXX side effects */
575 if (arg.ptr == NULL) continue; /* XXX program error */
576 opt2 = findOption(arg.opt, longName, longNameLen, shortName, callback,
577 callbackData, argInfo);
578 if (opt2 == NULL) continue;
579 /* Sub-table data will be inheirited if no data yet. */
580 if (callback && *callback
581 && callbackData && *callbackData == NULL)
582 *callbackData = opt->descrip;
583 return opt2;
584 } break;
585 case POPT_ARG_CALLBACK:
586 cb = opt;
587 cbarg.ptr = opt->arg;
588 continue;
589 break;
590 default:
591 break;
592 }
593
594 if (longName != NULL && opt->longName != NULL &&
595 (!LF_ISSET(ONEDASH) || F_ISSET(opt, ONEDASH)) &&
596 longOptionStrcmp(opt, longName, longNameLen))
597 {
598 break;
599 } else if (shortName && shortName == opt->shortName) {
600 break;
601 }
602 }
603
604 if (opt->longName == NULL && !opt->shortName)
605 return NULL;
606
607 if (callback)
608 *callback = (cb ? cbarg.cb : NULL);
609 if (callbackData)

Callers 1

poptGetNextOptFunction · 0.85

Calls 1

longOptionStrcmpFunction · 0.85

Tested by

no test coverage detected