linux-old/zBoot/piggyback.c
<<
>>
Prefs
   1/*
   2 *      linux/zBoot/piggyback.c
   3 *
   4 *      (C) 1993 Hannu Savolainen
   5 */
   6
   7/*
   8 *      This program reads the compressed system image from stdin and
   9 *      encapsulates it into an object file written to the stdout.
  10 */
  11
  12#include <stdio.h>
  13#include <unistd.h>
  14#include <a.out.h>
  15
  16int main(int argc, char *argv[])
  17{
  18        int c, n=0, len=0;
  19        char tmp_buf[512*1024];
  20        
  21        struct exec obj = {0x00640107}; /* object header */
  22        char string_names[] = {"_input_data\0_input_len\0"};
  23
  24        struct nlist var_names[2] = /* Symbol table */
  25                {       
  26                        {       /* _input_data  */
  27                                (char *)4, 7, 0, 0, 0
  28                        },
  29                        {       /* _input_len */
  30                                (char *)16, 7, 0, 0, 0
  31                        }
  32                };
  33
  34
  35        len = 0;
  36        while ((n = read(0, &tmp_buf[len], sizeof(tmp_buf)-len+1)) > 0)
  37              len += n;
  38
  39        if (n==-1)
  40        {
  41                perror("stdin");
  42                exit(-1);
  43        }
  44
  45        if (len >= sizeof(tmp_buf))
  46        {
  47                fprintf(stderr, "%s: Input too large\n", argv[0]);
  48                exit(-1);
  49        }
  50
  51        fprintf(stderr, "Compressed size %d.\n", len);
  52
  53/*
  54 *      Output object header
  55 */
  56        obj.a_data = len + sizeof(long);
  57        obj.a_syms = sizeof(var_names);
  58        write(1, (char *)&obj, sizeof(obj));
  59
  60/*
  61 *      Output data segment (compressed system & len)
  62 */
  63        write(1, tmp_buf, len);
  64        write(1, (char *)&len, sizeof(len));
  65
  66/*
  67 *      Output symbol table
  68 */
  69        var_names[1].n_value = len;
  70        write(1, (char *)&var_names, sizeof(var_names));
  71
  72/*
  73 *      Output string table
  74 */
  75        len = sizeof(string_names) + sizeof(len);
  76        write(1, (char *)&len, sizeof(len));
  77        write(1, string_names, sizeof(string_names));
  78
  79        exit(0);
  80
  81}
  82
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.