The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/boot/aux.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #include <u.h>
    2 #include <libc.h>
    3 #include <../boot/boot.h>
    4 
    5 /*
    6 int
    7 plumb(char *dir, char *dest, int *efd, char *here)
    8 {
    9         char buf[128];
   10         char name[128];
   11         int n;
   12 
   13         sprint(name, "%s/clone", dir);
   14         efd[0] = open(name, ORDWR);
   15         if(efd[0] < 0)
   16                 return -1;
   17         n = read(efd[0], buf, sizeof(buf)-1);
   18         if(n < 0){
   19                 close(efd[0]);
   20                 return -1;
   21         }
   22         buf[n] = 0;
   23         sprint(name, "%s/%s/data", dir, buf);
   24         if(here){
   25                 sprint(buf, "announce %s", here);
   26                 if(sendmsg(efd[0], buf) < 0){
   27                         close(efd[0]);
   28                         return -1;
   29                 }
   30         }
   31         sprint(buf, "connect %s", dest);
   32         if(sendmsg(efd[0], buf) < 0){
   33                 close(efd[0]);
   34                 return -1;
   35         }
   36         efd[1] = open(name, ORDWR);
   37         if(efd[1] < 0){
   38                 close(efd[0]);
   39                 return -1;
   40         }
   41         return efd[1];
   42 }
   43  */
   44 
   45 int
   46 sendmsg(int fd, char *msg)
   47 {
   48         int n;
   49 
   50         n = strlen(msg);
   51         if(write(fd, msg, n) != n)
   52                 return -1;
   53         return 0;
   54 }
   55 
   56 void
   57 warning(char *s)
   58 {
   59         char buf[ERRMAX];
   60 
   61         buf[0] = '\0';
   62         errstr(buf, sizeof buf);
   63         fprint(2, "boot: %s: %s\n", s, buf);
   64 }
   65 
   66 void
   67 fatal(char *s)
   68 {
   69         char buf[ERRMAX];
   70 
   71         buf[0] = '\0';
   72         errstr(buf, sizeof buf);
   73         fprint(2, "boot: %s: %s\n", s, buf);
   74         exits(0);
   75 }
   76 
   77 int
   78 readfile(char *name, char *buf, int len)
   79 {
   80         int f, n;
   81 
   82         buf[0] = 0;
   83         f = open(name, OREAD);
   84         if(f < 0)
   85                 return -1;
   86         n = read(f, buf, len-1);
   87         if(n >= 0)
   88                 buf[n] = 0;
   89         close(f);
   90         return 0;
   91 }
   92 
   93 int
   94 writefile(char *name, char *buf, int len)
   95 {
   96         int f, n;
   97 
   98         f = open(name, OWRITE);
   99         if(f < 0)
  100                 return -1;
  101         n = write(f, buf, len);
  102         close(f);
  103         return (n != len) ? -1 : 0;
  104 }
  105 
  106 void
  107 setenv(char *name, char *val)
  108 {
  109         int f;
  110         char ename[64];
  111 
  112         snprint(ename, sizeof ename, "#e/%s", name);
  113         f = create(ename, 1, 0666);
  114         if(f < 0){
  115                 fprint(2, "create %s: %r\n", ename);
  116                 return;
  117         }
  118         write(f, val, strlen(val));
  119         close(f);
  120 }
  121 
  122 void
  123 srvcreate(char *name, int fd)
  124 {
  125         char *srvname;
  126         int f;
  127         char buf[64];
  128 
  129         srvname = strrchr(name, '/');
  130         if(srvname)
  131                 srvname++;
  132         else
  133                 srvname = name;
  134 
  135         snprint(buf, sizeof buf, "#s/%s", srvname);
  136         f = create(buf, 1, 0666);
  137         if(f < 0)
  138                 fatal(buf);
  139         sprint(buf, "%d", fd);
  140         if(write(f, buf, strlen(buf)) != strlen(buf))
  141                 fatal("write");
  142         close(f);
  143 }
  144 
  145 void
  146 catchint(void *a, char *note)
  147 {
  148         USED(a);
  149         if(strcmp(note, "alarm") == 0)
  150                 noted(NCONT);
  151         noted(NDFLT);
  152 }
  153 
  154 int
  155 outin(char *prompt, char *def, int len)
  156 {
  157         int n;
  158         char buf[256];
  159 
  160         if(len >= sizeof buf)
  161                 len = sizeof(buf)-1;
  162 
  163         if(cpuflag){
  164                 notify(catchint);
  165                 alarm(15*1000);
  166         }
  167         print("%s[%s]: ", prompt, *def ? def : "no default");
  168         memset(buf, 0, sizeof buf);
  169         n = read(0, buf, len);
  170         if(cpuflag){
  171                 alarm(0);
  172                 notify(0);
  173         }
  174 
  175         if(n < 0)
  176                 return 1;
  177         if(n > 1){
  178                 buf[n-1] = 0;
  179                 strcpy(def, buf);
  180         }
  181         return n;
  182 }

Cache object: d92f044348e07fb215d532f30794b374


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.