View | Details | Raw Unified | Return to bug 140119
Collapse All | Expand All

(-)gfxboot-3.2.5/mkbootmsg.c (-11 / +61 lines)
Lines 95-100 Link Here
95
int is_pcx(file_data_t *fd);
95
int is_pcx(file_data_t *fd);
96
void fix_pal(unsigned char *pal, unsigned shade1, unsigned shade2, unsigned char *rgb);
96
void fix_pal(unsigned char *pal, unsigned shade1, unsigned shade2, unsigned char *rgb);
97
void write_data(char *name);
97
void write_data(char *name);
98
void add_number_le(file_data_t *d, uint32_t u, unsigned usize);
98
void add_data(file_data_t *d, void *buffer, unsigned size);
99
void add_data(file_data_t *d, void *buffer, unsigned size);
99
code_t *new_code(void);
100
code_t *new_code(void);
100
dict_t *new_dict(void);
101
dict_t *new_dict(void);
Lines 357-363 Link Here
357
358
358
  // then, put everything together
359
  // then, put everything together
359
360
360
  add_data(&fd, &header, sizeof header);
361
  add_number_le(&fd, header.magic_id, 4);
362
  add_data(&fd, &header.version, 1);
363
  add_data(&fd, &header.res_1, 1);
364
  add_data(&fd, &header.res_2, 1);
365
  add_data(&fd, &header.res_3, 1);
366
  add_number_le(&fd, header.bincode, 4);
367
  add_number_le(&fd, header.bincode_size, 4);
368
  add_number_le(&fd, header.bincode_crc, 4);
369
  add_number_le(&fd, header.dict, 4);
370
  add_number_le(&fd, header.code, 4);
371
  add_number_le(&fd, header.code_size, 4);
361
372
362
  add_data(&fd, bincode_data, sizeof bincode_data);
373
  add_data(&fd, bincode_data, sizeof bincode_data);
363
374
Lines 375-380 Link Here
375
}
386
}
376
387
377
388
389
/* Copy the least-significant usize bytes of u into enc, least-significant
390
 * byte first.
391
 */
392
void copy_number_le(unsigned char *enc, unsigned u, unsigned usize)
393
{
394
  int i;
395
  for (i = 0; i < usize; ++i)
396
    enc[i] = (u >> (i * 8)) & 255;
397
}
398
399
400
void add_number_le(file_data_t *d, uint32_t u, unsigned usize)
401
{
402
  unsigned char buf[4];
403
  copy_number_le(buf, u, usize);
404
  add_data(d, buf, sizeof buf);
405
}
406
407
378
void add_data(file_data_t *d, void *buffer, unsigned size)
408
void add_data(file_data_t *d, void *buffer, unsigned size)
379
{
409
{
380
  ssize_t ofs = 0;
410
  ssize_t ofs = 0;
Lines 443-448 Link Here
443
}
473
}
444
474
445
475
476
uint32_t read_uint32_le(file_data_t *fd, unsigned ofs)
477
{
478
  uint32_t word = 0;
479
  int i;
480
  for (i = 0; i < 4; ++i)
481
    word += fd->data[ofs + i] << (i * 8);
482
  return word;
483
}
484
485
446
void hexdump(file_data_t *fd, unsigned ofs, int len)
486
void hexdump(file_data_t *fd, unsigned ofs, int len)
447
{
487
{
448
  unsigned u, p;
488
  unsigned u, p;
Lines 500-506 Link Here
500
  fd = read_file(name);
540
  fd = read_file(name);
501
541
502
  if(fd.size >= sizeof header) {
542
  if(fd.size >= sizeof header) {
503
    memcpy(&header, fd.data, sizeof header);
543
    header.magic_id = read_uint32_le(&fd, 0);
544
    header.version = fd.data[4];
545
    header.res_1 = fd.data[5];
546
    header.res_2 = fd.data[6];
547
    header.res_3 = fd.data[7];
548
    header.bincode = read_uint32_le(&fd, 8);
549
    header.bincode_size = read_uint32_le(&fd, 12);
550
    header.bincode_crc = read_uint32_le(&fd, 16);
551
    header.dict = read_uint32_le(&fd, 20);
552
    header.code = read_uint32_le(&fd, 24);
553
    header.code_size = read_uint32_le(&fd, 28);
504
    ofs += sizeof header;
554
    ofs += sizeof header;
505
  }
555
  }
506
556
Lines 608-614 Link Here
608
658
609
  *word = 0;
659
  *word = 0;
610
660
611
  while(isspace(*s)) if(*s++ == '\n') line++;
661
  while(isspace((unsigned char) *s)) if(*s++ == '\n') line++;
612
662
613
  if(!*s) {
663
  if(!*s) {
614
    *ptr = s;
664
    *ptr = s;
Lines 707-713 Link Here
707
    word[n] = 0;
757
    word[n] = 0;
708
  }
758
  }
709
  else {
759
  else {
710
    while(!isspace(*s)) s++;
760
    while(!isspace((unsigned char) *s)) s++;
711
  }
761
  }
712
762
713
  if(!is_str) {
763
  if(!is_str) {
Lines 808-814 Link Here
808
          c->size = u2 + 1;
858
          c->size = u2 + 1;
809
          c->enc = malloc(c->size);
859
          c->enc = malloc(c->size);
810
          c->enc[0] = c->type + (u2 << 4);
860
          c->enc[0] = c->type + (u2 << 4);
811
          if(u2) memcpy(c->enc + 1, &c->value.u, u2);
861
          if(u2) copy_number_le(c->enc + 1, c->value.u, u2);
812
          break;
862
          break;
813
863
814
        case t_string:
864
        case t_string:
Lines 817-823 Link Here
817
          c->size = u1 + u0 + 1;
867
          c->size = u1 + u0 + 1;
818
          c->enc = malloc(c->size);
868
          c->enc = malloc(c->size);
819
          c->enc[0] = c->type + (u0 << 4) + 0x80;
869
          c->enc[0] = c->type + (u0 << 4) + 0x80;
820
          memcpy(c->enc + 1, &u1, u0);
870
          copy_number_le(c->enc + 1, u1, u0);
821
          memcpy(c->enc + 1 + u0, c->value.p, u1);
871
          memcpy(c->enc + 1 + u0, c->value.p, u1);
822
          break;
872
          break;
823
873
Lines 841-847 Link Here
841
          c->size = u0 + 1;
891
          c->size = u0 + 1;
842
          c->enc = malloc(c->size);
892
          c->enc = malloc(c->size);
843
          c->enc[0] = c->type + (u0 << 4);
893
          c->enc[0] = c->type + (u0 << 4);
844
          if(u0) memcpy(c->enc + 1, &c->value.u, u0);
894
          if(u0) copy_number_le(c->enc + 1, c->value.u, u0);
845
          break;
895
          break;
846
896
847
        default:
897
        default:
Lines 871-877 Link Here
871
        if(c->enc) free(c->enc);
921
        if(c->enc) free(c->enc);
872
        c->enc = malloc(c->size);
922
        c->enc = malloc(c->size);
873
        c->enc[0] = c->type + (u1 << 4);
923
        c->enc[0] = c->type + (u1 << 4);
874
        if(u1) memcpy(c->enc + 1, &code[u0].ofs, u1);
924
        if(u1) copy_number_le(c->enc + 1, code[u0].ofs, u1);
875
      }
925
      }
876
926
877
      ofs += c->size;
927
      ofs += c->size;
Lines 892-906 Link Here
892
    exit(6);
942
    exit(6);
893
  }
943
  }
894
944
895
  add_data(&dict_file, &dict_size, 4);
945
  add_number_le(&dict_file, dict_size, 4);
896
946
897
  u = 0;
947
  u = 0;
898
948
899
  for(i = 0; i < dict_size; i++) {
949
  for(i = 0; i < dict_size; i++) {
900
    if(dict[i].type == t_none || dict[i].type == t_prim) continue;
950
    if(dict[i].type == t_none || dict[i].type == t_prim) continue;
901
    add_data(&dict_file, &i, 2);
951
    add_number_le(&dict_file, i, 2);
902
    add_data(&dict_file, &dict[i].type, 1);
952
    add_data(&dict_file, &dict[i].type, 1);
903
    add_data(&dict_file, &dict[i].value.u, 4);
953
    add_number_le(&dict_file, dict[i].value.u, 4);
904
    u++;
954
    u++;
905
  }
955
  }
906
956

Return to bug 140119