FreeCalypso > hg > freecalypso-tools
view ffstools/tiffs-mkfs/main.c @ 964:a96cb97b66a2
ringtools/imy: fix duplicate definition of tdma_durations[]
The bug was reported by Vadim Yanitskiy <fixeria@osmocom.org>,
although the present fix is slightly different from the contributed
patch: because main.c doesn't need this tdma_durations[] array
at all, let's simply remove the reference to this array from main.c
rather than turn it into an extern.
I no longer remember my original thought flow that resulted (by mistake)
in tdma_durations[] being multiply defined in main.c and durations.c.
My intent might have been to define all globals in main.c and have
the reference in durations.c be an extern - and I missed that extern -
but without clear memory, I have no certainty. In any case, having
this data array defined in the same module that fills it (durations.c)
is sensible, so let's make it the new way.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 31 Aug 2023 19:38:18 +0000 |
parents | 178ed445021d |
children |
line wrap: on
line source
#include <sys/types.h> #include <sys/param.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include "struct.h" #include "globals.h" void process_cmdline(argc, argv) char **argv; { extern int optind; extern char *optarg; int c; while ((c = getopt(argc, argv, "c:f:j:Jm:")) != EOF) switch (c) { case 'c': chunk_size_max = strtoul(optarg, 0, 0); continue; case 'f': if (*optarg != '/') { fprintf(stderr, "error: format name must begin with \'/\'\n"); exit(1); } format_name = optarg; continue; case 'j': journal_size = strtoul(optarg, 0, 0); continue; case 'J': no_journal = 1; continue; case 'm': block_files_max = strtoul(optarg, 0, 0); continue; default: usage: fprintf(stderr, "usage: %s [options] <org> <srcdir> <outfile>\n", argv[0]); exit(1); } if (argc - optind != 3) goto usage; parse_org_arg(argv[optind]); input_host_dir = argv[optind+1]; output_filename = argv[optind+2]; } main(argc, argv) char **argv; { process_cmdline(argc, argv); if (!format_name) format_name = "/"; preen_chunk_size_max(); preen_journal_size(); preen_block_files_max(); /* input phase */ read_dir_level(&root, input_host_dir, 0); sort_dir_level(&root); /* output phase */ prepare_output_buffers(); open_output_file(); create_root_dir(); process_dir_level(&root); if (!no_journal) create_journal(); finish_output(); close(output_fd); exit(0); }