VirtualBox

Changeset 19345 in vbox


Ignore:
Timestamp:
May 4, 2009 11:25:10 PM (16 years ago)
Author:
vboxsync
Message:

bin2c: -width n and -break n args for forming the output.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bldprogs/bin2c.c

    r17692 r19345  
    5959            "  -max <n>     check if <binaryfile> is not bigger than <n>KB\n"
    6060            "  -mask <n>    check if size of binaryfile is <n>-aligned\n"
     61            "  -width <n>   number of bytes per line (default: 16)\n"
     62            "  -break <n>   break every <n> lines    (default: -1)\n"
    6163            "  -ascii       show ASCII representation of binary as comment\n",
    6264            argv0);
     
    7577    int           fAscii = 0;
    7678    int           fExport = 0;
    77     unsigned char abLine[16];
     79    long          iBreakEvery = -1;
     80    unsigned char abLine[32];
     81    size_t        cbLine = 16;
    7882    size_t        off;
    7983    size_t        cbRead;
     
    8488        return usage(argv[0]);
    8589
    86     for (i=1; i<argc; i++)
     90    for (i = 1; i < argc; i++)
    8791    {
    8892        if (!strcmp(argv[i], "-min"))
     
    111115        {
    112116            fExport = 1;
     117        }
     118        else if (!strcmp(argv[i], "-width"))
     119        {
     120            if (++i >= argc)
     121                return usage(argv[0]);
     122            cbLine = strtoul(argv[i], NULL, 0);
     123            if (cbLine == 0 || cbLine > sizeof(abLine))
     124            {
     125                fprintf(stderr, "%s: '%s' is too wide, max %u\n",
     126                        argv[0], argv[i], (unsigned)sizeof(abLine));
     127                return 1;
     128            }
     129        }
     130        else if (!strcmp(argv[i], "-break"))
     131        {
     132            if (++i >= argc)
     133                return usage(argv[0]);
     134            iBreakEvery = strtol(argv[i], NULL, 0);
     135            if (iBreakEvery <= 0 && iBreakEvery != -1)
     136            {
     137                fprintf(stderr, "%s: -break value '%s' is not >= 1 or -1.\n",
     138                        argv[0], argv[i], (unsigned)sizeof(abLine));
     139                return 1;
     140            }
    113141        }
    114142        else if (i == argc - 3)
     
    116144        else
    117145        {
    118             fprintf(stderr, "%s: syntax error: Unknown argument '%s'\n", 
     146            fprintf(stderr, "%s: syntax error: Unknown argument '%s'\n",
    119147                    argv[0], argv[i]);
    120148            return usage(argv[0]);
     
    162190        /* the binary data */
    163191        off = 0;
    164         while ((cbRead = fread(&abLine[0], 1, sizeof(abLine), pFileIn)) > 0)
     192        while ((cbRead = fread(&abLine[0], 1, cbLine, pFileIn)) > 0)
    165193        {
    166194            size_t i;
     195
     196            if (    iBreakEvery > 0
     197                &&  off
     198                && (off / cbLine) % iBreakEvery == 0)
     199                fprintf(pFileOut, "\n");
     200
    167201            fprintf(pFileOut, "   ");
    168202            for (i = 0; i < cbRead; i++)
    169203                fprintf(pFileOut, " 0x%02x,", abLine[i]);
    170             for (; i < sizeof(abLine); i++)
     204            for (; i < cbLine; i++)
    171205                fprintf(pFileOut, "      ");
    172206            if (fAscii)
     
    175209                for (i = 0; i < cbRead; i++)
    176210                    /* be careful with '/' prefixed/followed by a '*'! */
    177                     fprintf(pFileOut, "%c", 
     211                    fprintf(pFileOut, "%c",
    178212                            isprint(abLine[i]) && abLine[i] != '/' ? abLine[i] : '.');
    179                 for (; i < sizeof(abLine); i++)
     213                for (; i < cbLine; i++)
    180214                    fprintf(pFileOut, " ");
    181215                fprintf(pFileOut, " */");
    182216            }
    183217            fprintf(pFileOut, "\n");
    184    
     218
    185219            off += cbRead;
    186220        }
    187    
     221
    188222        /* check for errors */
    189223        if (ferror(pFileIn) && !feof(pFileIn))
     
    200234                    "/* end of file */\n",
    201235                    fExport ? "DECLEXPORT(" : "", fExport ? ")" : "", argv[i], argv[i]);
    202    
     236
    203237            /* flush output and check for error. */
    204238            fflush(pFileOut);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette