123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*
- * Copyright 2021 NXP
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
- #include <stdint.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <getopt.h>
- #include <unistd.h>
- #define NUM_MEM_BLOCK 1
- #define FOUR_BYTE_ALIGN 4
- #define EIGHT_BYTE_ALIGN 8
- #define SIZE_TWO_PBL_CMD 24
- #define SUCCESS 0
- #define FAILURE -1
- #define BYTE_SWAP_32(word) ((((word) & 0xff000000) >> 24)| \
- (((word) & 0x00ff0000) >> 8) | \
- (((word) & 0x0000ff00) << 8) | \
- (((word) & 0x000000ff) << 24))
- /*
- * Returns:
- * SUCCESS, on successful byte swapping.
- * FAILURE, on failure.
- */
- int do_byteswap(FILE *fp)
- {
- int bytes = 0;
- uint32_t upper_byte;
- uint32_t lower_byte;
- uint32_t pad = 0U;
- /* Carries number of Padding bytes to be appended to
- * make file size 8 byte aligned.
- */
- int append_bytes;
- int ret = FAILURE;
- fseek(fp, 0L, SEEK_END);
- bytes = ftell(fp);
- append_bytes = EIGHT_BYTE_ALIGN - (bytes % EIGHT_BYTE_ALIGN);
- if (append_bytes != 0) {
- if (fwrite(&pad, append_bytes, NUM_MEM_BLOCK, fp)
- != NUM_MEM_BLOCK) {
- printf("%s: Error in appending padding bytes.\n",
- __func__);
- goto byteswap_err;
- }
- bytes += append_bytes;
- }
- rewind(fp);
- while (bytes > 0) {
- if ((fread(&upper_byte, sizeof(upper_byte), NUM_MEM_BLOCK, fp)
- != NUM_MEM_BLOCK) && (feof(fp) == 0)) {
- printf("%s: Error reading upper bytes.\n", __func__);
- goto byteswap_err;
- }
- if ((fread(&lower_byte, sizeof(lower_byte), NUM_MEM_BLOCK, fp)
- != NUM_MEM_BLOCK) && (feof(fp) == 0)) {
- printf("%s: Error reading lower bytes.\n", __func__);
- goto byteswap_err;
- }
- fseek(fp, -8L, SEEK_CUR);
- upper_byte = BYTE_SWAP_32(upper_byte);
- lower_byte = BYTE_SWAP_32(lower_byte);
- if (fwrite(&lower_byte, sizeof(lower_byte), NUM_MEM_BLOCK, fp)
- != NUM_MEM_BLOCK) {
- printf("%s: Error writing lower bytes.\n", __func__);
- goto byteswap_err;
- }
- if (fwrite(&upper_byte, sizeof(upper_byte), NUM_MEM_BLOCK, fp)
- != NUM_MEM_BLOCK) {
- printf("%s: Error writing upper bytes.\n", __func__);
- goto byteswap_err;
- }
- bytes -= EIGHT_BYTE_ALIGN;
- }
- ret = SUCCESS;
- byteswap_err:
- return ret;
- }
- int main(int argc, char **argv)
- {
- FILE *fp = NULL;
- int ret = 0;
- if (argc > 2) {
- printf("Usage format is byteswap <filename>");
- return -1;
- }
- fp = fopen(argv[1], "rb+");
- if (fp == NULL) {
- printf("%s: Error opening the input file: %s\n",
- __func__, argv[1]);
- return -1;
- }
- ret = do_byteswap(fp);
- fclose(fp);
- return ret;
- }
|