FreeCalypso > hg > freecalypso-tools
view uptools/libcoding/grokdcs.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 | 097ce8431d11 |
children |
line wrap: on
line source
/* * This library module implements the function that distills the complex * set of possible SMS DCS octet values to just one of 4 possibilities: * 7-bit text (7), 8-bit data octets (8), UCS-2 text (16) or compressed * data (9). * * The decoding is based on the 3GPP TS 23.038 V11.0.0 spec; * reserved encodings are treated as 7-bit text as the spec instructs. */ sms_dcs_classify(dcs) { if (!(dcs & 0x80)) { if (dcs & 0x20) return(9); switch (dcs & 0xC) { case 0: return(7); case 4: return(8); case 8: return(16); default: /* reserved, treating as 7-bit per the spec */ return(7); } } switch (dcs & 0xF0) { case 0x80: case 0x90: case 0xA0: case 0xB0: /* reserved, treating as 7-bit per the spec */ return(7); case 0xC0: case 0xD0: return(7); case 0xE0: return(16); case 0xF0: if (dcs & 4) return(8); else return(7); } }