[AX.25]: Make asc2ax() thread-proof
Asc2ax was still using a static buffer for all invocations which isn't exactly SMP-safe. Change asc2ax to take an additional result buffer as the argument. Change all callers to provide such a buffer. This one only really is a fix for ROSE and as per recent discussions there's still much more to fix in ROSE ... Signed-off-by: Ralf Baechle DL5RB <ralf@linux-mips.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
3a93481589
commit
baed16a7ff
@@ -67,37 +67,34 @@ char *ax2asc(char *buf, ax25_address *a)
|
||||
/*
|
||||
* ascii -> ax25 conversion
|
||||
*/
|
||||
ax25_address *asc2ax(char *callsign)
|
||||
void asc2ax(ax25_address *addr, char *callsign)
|
||||
{
|
||||
static ax25_address addr;
|
||||
char *s;
|
||||
int n;
|
||||
|
||||
for (s = callsign, n = 0; n < 6; n++) {
|
||||
if (*s != '\0' && *s != '-')
|
||||
addr.ax25_call[n] = *s++;
|
||||
addr->ax25_call[n] = *s++;
|
||||
else
|
||||
addr.ax25_call[n] = ' ';
|
||||
addr.ax25_call[n] <<= 1;
|
||||
addr.ax25_call[n] &= 0xFE;
|
||||
addr->ax25_call[n] = ' ';
|
||||
addr->ax25_call[n] <<= 1;
|
||||
addr->ax25_call[n] &= 0xFE;
|
||||
}
|
||||
|
||||
if (*s++ == '\0') {
|
||||
addr.ax25_call[6] = 0x00;
|
||||
return &addr;
|
||||
addr->ax25_call[6] = 0x00;
|
||||
return;
|
||||
}
|
||||
|
||||
addr.ax25_call[6] = *s++ - '0';
|
||||
addr->ax25_call[6] = *s++ - '0';
|
||||
|
||||
if (*s != '\0') {
|
||||
addr.ax25_call[6] *= 10;
|
||||
addr.ax25_call[6] += *s++ - '0';
|
||||
addr->ax25_call[6] *= 10;
|
||||
addr->ax25_call[6] += *s++ - '0';
|
||||
}
|
||||
|
||||
addr.ax25_call[6] <<= 1;
|
||||
addr.ax25_call[6] &= 0x1E;
|
||||
|
||||
return &addr;
|
||||
addr->ax25_call[6] <<= 1;
|
||||
addr->ax25_call[6] &= 0x1E;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user