root/stand/boot/bootarg.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. addbootarg
  2. makebootargs

    1 /*      $OpenBSD: bootarg.c,v 1.10 2003/08/11 06:23:07 deraadt Exp $    */
    2 
    3 /*
    4  * Copyright (c) 1997,1998 Michael Shalayeff
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  *
   28  */
   29 
   30 #include <lib/libsa/stand.h>
   31 #include <stand/boot/bootarg.h>
   32 
   33 bootarg_t *bootarg_list;
   34 
   35 void
   36 addbootarg(int t, size_t l, void *p)
   37 {
   38         bootarg_t *q = alloc(sizeof(*q) + l - sizeof(q->ba_arg));
   39 
   40         q->ba_type = t;
   41         q->ba_size = sizeof(*q) + l - sizeof(q->ba_arg);
   42         bcopy(p, q->ba_arg, l);
   43         q->ba_next = bootarg_list;
   44         bootarg_list = q;
   45 }
   46 
   47 void
   48 makebootargs(caddr_t v, size_t *lenp)
   49 {
   50         bootarg_t *p;
   51         u_char *q;
   52         size_t l;
   53 
   54         /* get total size */
   55         l = sizeof(*p);
   56         for (p = bootarg_list; p != NULL; p = p->ba_next)
   57                 l += p->ba_size;
   58         if (*lenp < l) {
   59 #ifdef DEBUG
   60                 printf("makebootargs: too many args\n");
   61 #endif
   62                 l = *lenp;
   63         }
   64         *lenp = l;
   65         /* copy them out */
   66         for (p = bootarg_list, q = v;
   67              p != NULL && ((q + p->ba_size) - (u_char *)v) < l;
   68              q += p->ba_size, p = p->ba_next) {
   69 #ifdef DEBUG
   70                 printf("%d,%d ", p->ba_type, p->ba_size);
   71 #endif
   72                 bcopy(p, q, p->ba_size);
   73         }
   74         p = (bootarg_t *)q;
   75         p->ba_type = BOOTARG_END;
   76 }
   77 

/* [<][>][^][v][top][bottom][index][help] */