MCPcopy Create free account
hub / github.com/F-Stack/f-stack / getenv_array

Function getenv_array

freebsd/kern/kern_environment.c:671–805  ·  view source on GitHub ↗

* Return an array of integers at the given type size and signedness. */

Source from the content-addressed store, hash-verified

669 * Return an array of integers at the given type size and signedness.
670 */
671int
672getenv_array(const char *name, void *pdata, int size, int *psize,
673 int type_size, bool allow_signed)
674{
675 uint8_t shift;
676 int64_t value;
677 int64_t old;
678 const char *buf;
679 char *end;
680 const char *ptr;
681 int n;
682 int rc;
683
684 rc = 0; /* assume failure */
685
686 buf = kenv_acquire(name);
687 if (buf == NULL)
688 goto error;
689
690 /* get maximum number of elements */
691 size /= type_size;
692
693 n = 0;
694
695 for (ptr = buf; *ptr != 0; ) {
696 value = strtoq(ptr, &end, 0);
697
698 /* check if signed numbers are allowed */
699 if (value < 0 && !allow_signed)
700 goto error;
701
702 /* check for invalid value */
703 if (ptr == end)
704 goto error;
705
706 /* check for valid suffix */
707 switch (*end) {
708 case 't':
709 case 'T':
710 shift = 40;
711 end++;
712 break;
713 case 'g':
714 case 'G':
715 shift = 30;
716 end++;
717 break;
718 case 'm':
719 case 'M':
720 shift = 20;
721 end++;
722 break;
723 case 'k':
724 case 'K':
725 shift = 10;
726 end++;
727 break;
728 case ' ':

Callers 1

Calls 3

strtoqFunction · 0.85
kenv_acquireFunction · 0.70
kenv_releaseFunction · 0.70

Tested by

no test coverage detected