Annotation of qemu/roms/sgabios/csum8.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright 2010 Google Inc.
                      3:  *
                      4:  * Licensed under the Apache License, Version 2.0 (the "License");
                      5:  * you may not use this file except in compliance with the License.
                      6:  * You may obtain a copy of the License at
                      7:  *
                      8:  *     http://www.apache.org/licenses/LICENSE-2.0
                      9:  *
                     10:  * Unless required by applicable law or agreed to in writing, software
                     11:  * distributed under the License is distributed on an "AS IS" BASIS,
                     12:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
                     13:  * See the License for the specific language governing permissions and
                     14:  * limitations under the License.
                     15:  *
                     16:  * compute rom checksum byte
                     17:  */
                     18: 
                     19: #include <stdio.h>
                     20: #include <unistd.h>
                     21: #include <stdlib.h>
                     22: #include <fcntl.h>
                     23: #include <sys/types.h>
                     24: 
                     25: #define MAX_SIZE 65536
                     26: unsigned char buf[MAX_SIZE];
                     27: 
                     28: int main(int argc, char **argv)
                     29: {
                     30:   ssize_t fsize;
                     31:   int i, sum, fd;
                     32:   unsigned char csum;
                     33: 
                     34:   if (argc < 2) {
                     35:     fprintf(stderr, "usage: %s filename\n", argv[0]);
                     36:     exit(1);
                     37:   }
                     38:   if ((fd = open(argv[1], O_RDWR)) < 0) {
                     39:     perror(argv[1]);
                     40:     exit(1);
                     41:   }
                     42:   if ((fsize = read(fd, buf, MAX_SIZE)) < 0) {
                     43:     perror(argv[1]);
                     44:     exit(1);
                     45:   }
                     46:   if (fsize >= MAX_SIZE && read(fd, &buf[MAX_SIZE - 1], 1) > 0) {
                     47:     fprintf(stderr, "FAIL: %s is larger than %d bytes\n", argv[1], MAX_SIZE);
                     48:     exit(1);
                     49:   }
                     50:   i = fsize - 2048 * (fsize / 2048);
                     51:   if (i != 2047) {
                     52:     fprintf(stderr, "FAIL: %s is %zd bytes, need 2K pad-1\n", argv[1], fsize);
                     53:     exit(1);
                     54:   }
                     55:   for (i = sum = 0; i < fsize; i++) {
                     56:     sum += buf[i];
                     57:   }
                     58:   sum &= 0xff;
                     59:   csum = -sum & 0xff;
                     60:   write(fd, &csum, 1);
                     61:   close(fd);
                     62:   fprintf(stderr, "%s: sum = 0x%02x, wrote byte 0x%02x\n", argv[1], sum, csum);
                     63:   return 0;
                     64: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.