FreeCalypso > hg > freecalypso-tools
view ffstools/tiffs-wrappers/tiffs-8m.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 | 8e7f6cca385b |
children |
line wrap: on
line source
/* * tiffs-8m is a wrapper around tiffs similar to mokoffs: we pass the user's * command along, together with any options, but insert the 64x15 FFS * organization argument automatically, and translate -f into -o0x700000. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> extern char tiffs_prog_pathname[]; char *imgfile; char *aopt, *ropt; int fflag, Oflag; char **passon_argv; int passon_argc; int output_argc; char **output_argv; main(argc, argv) char **argv; { extern int optind; extern char *optarg; int c; char **sp, **dp; while ((c = getopt(argc, argv, "+a:fOr:")) != EOF) switch (c) { case 'a': aopt = optarg; continue; case 'f': fflag++; continue; case 'O': Oflag++; continue; case 'r': ropt = optarg; continue; default: usage: fprintf(stderr, "usage: %s [global-options] <imgfile> <op> ...\n", argv[0]); exit(1); } if (argc - optind < 2) goto usage; imgfile = argv[optind++]; passon_argv = argv + optind; passon_argc = argc - optind; output_argc = passon_argc + 3; if (fflag) output_argc++; if (Oflag) output_argc++; if (aopt) output_argc += 2; if (ropt) output_argc += 2; output_argv = malloc(sizeof(char *) * (output_argc + 1)); if (!output_argv) { perror("malloc for tiffs argument list"); exit(1); } dp = output_argv; *dp++ = "tiffs"; if (fflag) *dp++ = "-o0x700000"; if (Oflag) *dp++ = "-O"; if (aopt) { *dp++ = "-a"; *dp++ = aopt; } if (ropt) { *dp++ = "-r"; *dp++ = ropt; } *dp++ = imgfile; *dp++ = "64x15"; for (sp = passon_argv; *sp; sp++) *dp++ = *sp; *dp = 0; execvp(tiffs_prog_pathname, output_argv); perror(tiffs_prog_pathname); exit(1); }