diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2005-09-06 18:49:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-09-06 18:49:39 -0400 |
commit | f75268cd6cbd24e6c70ff1390f4de5d0bb618539 (patch) | |
tree | ade569781c444bd7f0d648a38cab205d7624e286 /net | |
parent | f2c383988d68c91a7d474b7cf26c0a2df49bbafe (diff) |
[AX25]: Make ax2asc thread-proof
Ax2asc was still using a static buffer for all invocations which isn't
exactly SMP-safe. Change ax2asc to take an additional result buffer as
the argument. Change all callers to provide such a buffer.
Signed-off-by: Ralf Baechle DL5RB <ralf@linux-mips.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ax25/af_ax25.c | 7 | ||||
-rw-r--r-- | net/ax25/ax25_addr.c | 3 | ||||
-rw-r--r-- | net/ax25/ax25_route.c | 7 | ||||
-rw-r--r-- | net/ax25/ax25_uid.c | 4 | ||||
-rw-r--r-- | net/netrom/af_netrom.c | 7 | ||||
-rw-r--r-- | net/netrom/nr_route.c | 8 | ||||
-rw-r--r-- | net/rose/af_rose.c | 6 | ||||
-rw-r--r-- | net/rose/rose_route.c | 14 | ||||
-rw-r--r-- | net/rose/rose_subr.c | 5 |
9 files changed, 38 insertions, 23 deletions
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index ea43dfb774e2..ed705ddad56b 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c | |||
@@ -1874,6 +1874,7 @@ static void ax25_info_stop(struct seq_file *seq, void *v) | |||
1874 | static int ax25_info_show(struct seq_file *seq, void *v) | 1874 | static int ax25_info_show(struct seq_file *seq, void *v) |
1875 | { | 1875 | { |
1876 | ax25_cb *ax25 = v; | 1876 | ax25_cb *ax25 = v; |
1877 | char buf[11]; | ||
1877 | int k; | 1878 | int k; |
1878 | 1879 | ||
1879 | 1880 | ||
@@ -1885,13 +1886,13 @@ static int ax25_info_show(struct seq_file *seq, void *v) | |||
1885 | seq_printf(seq, "%8.8lx %s %s%s ", | 1886 | seq_printf(seq, "%8.8lx %s %s%s ", |
1886 | (long) ax25, | 1887 | (long) ax25, |
1887 | ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name, | 1888 | ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name, |
1888 | ax2asc(&ax25->source_addr), | 1889 | ax2asc(buf, &ax25->source_addr), |
1889 | ax25->iamdigi? "*":""); | 1890 | ax25->iamdigi? "*":""); |
1890 | seq_printf(seq, "%s", ax2asc(&ax25->dest_addr)); | 1891 | seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr)); |
1891 | 1892 | ||
1892 | for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) { | 1893 | for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) { |
1893 | seq_printf(seq, ",%s%s", | 1894 | seq_printf(seq, ",%s%s", |
1894 | ax2asc(&ax25->digipeat->calls[k]), | 1895 | ax2asc(buf, &ax25->digipeat->calls[k]), |
1895 | ax25->digipeat->repeated[k]? "*":""); | 1896 | ax25->digipeat->repeated[k]? "*":""); |
1896 | } | 1897 | } |
1897 | 1898 | ||
diff --git a/net/ax25/ax25_addr.c b/net/ax25/ax25_addr.c index f4fa6dfb846e..dca179daf415 100644 --- a/net/ax25/ax25_addr.c +++ b/net/ax25/ax25_addr.c | |||
@@ -36,9 +36,8 @@ ax25_address null_ax25_address = {{0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00}}; | |||
36 | /* | 36 | /* |
37 | * ax25 -> ascii conversion | 37 | * ax25 -> ascii conversion |
38 | */ | 38 | */ |
39 | char *ax2asc(ax25_address *a) | 39 | char *ax2asc(char *buf, ax25_address *a) |
40 | { | 40 | { |
41 | static char buf[11]; | ||
42 | char c, *s; | 41 | char c, *s; |
43 | int n; | 42 | int n; |
44 | 43 | ||
diff --git a/net/ax25/ax25_route.c b/net/ax25/ax25_route.c index c288526da4ce..26b77d972220 100644 --- a/net/ax25/ax25_route.c +++ b/net/ax25/ax25_route.c | |||
@@ -298,6 +298,8 @@ static void ax25_rt_seq_stop(struct seq_file *seq, void *v) | |||
298 | 298 | ||
299 | static int ax25_rt_seq_show(struct seq_file *seq, void *v) | 299 | static int ax25_rt_seq_show(struct seq_file *seq, void *v) |
300 | { | 300 | { |
301 | char buf[11]; | ||
302 | |||
301 | if (v == SEQ_START_TOKEN) | 303 | if (v == SEQ_START_TOKEN) |
302 | seq_puts(seq, "callsign dev mode digipeaters\n"); | 304 | seq_puts(seq, "callsign dev mode digipeaters\n"); |
303 | else { | 305 | else { |
@@ -308,7 +310,7 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v) | |||
308 | if (ax25cmp(&ax25_rt->callsign, &null_ax25_address) == 0) | 310 | if (ax25cmp(&ax25_rt->callsign, &null_ax25_address) == 0) |
309 | callsign = "default"; | 311 | callsign = "default"; |
310 | else | 312 | else |
311 | callsign = ax2asc(&ax25_rt->callsign); | 313 | callsign = ax2asc(buf, &ax25_rt->callsign); |
312 | 314 | ||
313 | seq_printf(seq, "%-9s %-4s", | 315 | seq_printf(seq, "%-9s %-4s", |
314 | callsign, | 316 | callsign, |
@@ -328,7 +330,8 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v) | |||
328 | 330 | ||
329 | if (ax25_rt->digipeat != NULL) | 331 | if (ax25_rt->digipeat != NULL) |
330 | for (i = 0; i < ax25_rt->digipeat->ndigi; i++) | 332 | for (i = 0; i < ax25_rt->digipeat->ndigi; i++) |
331 | seq_printf(seq, " %s", ax2asc(&ax25_rt->digipeat->calls[i])); | 333 | seq_printf(seq, " %s", |
334 | ax2asc(buf, &ax25_rt->digipeat->calls[i])); | ||
332 | 335 | ||
333 | seq_puts(seq, "\n"); | 336 | seq_puts(seq, "\n"); |
334 | } | 337 | } |
diff --git a/net/ax25/ax25_uid.c b/net/ax25/ax25_uid.c index a8b3822f3ee4..d53cc8615865 100644 --- a/net/ax25/ax25_uid.c +++ b/net/ax25/ax25_uid.c | |||
@@ -168,12 +168,14 @@ static void ax25_uid_seq_stop(struct seq_file *seq, void *v) | |||
168 | 168 | ||
169 | static int ax25_uid_seq_show(struct seq_file *seq, void *v) | 169 | static int ax25_uid_seq_show(struct seq_file *seq, void *v) |
170 | { | 170 | { |
171 | char buf[11]; | ||
172 | |||
171 | if (v == SEQ_START_TOKEN) | 173 | if (v == SEQ_START_TOKEN) |
172 | seq_printf(seq, "Policy: %d\n", ax25_uid_policy); | 174 | seq_printf(seq, "Policy: %d\n", ax25_uid_policy); |
173 | else { | 175 | else { |
174 | struct ax25_uid_assoc *pt = v; | 176 | struct ax25_uid_assoc *pt = v; |
175 | 177 | ||
176 | seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(&pt->call)); | 178 | seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(buf, &pt->call)); |
177 | } | 179 | } |
178 | return 0; | 180 | return 0; |
179 | } | 181 | } |
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index 4b53de982114..f4578c759ffc 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c | |||
@@ -1261,6 +1261,7 @@ static int nr_info_show(struct seq_file *seq, void *v) | |||
1261 | struct net_device *dev; | 1261 | struct net_device *dev; |
1262 | struct nr_sock *nr; | 1262 | struct nr_sock *nr; |
1263 | const char *devname; | 1263 | const char *devname; |
1264 | char buf[11]; | ||
1264 | 1265 | ||
1265 | if (v == SEQ_START_TOKEN) | 1266 | if (v == SEQ_START_TOKEN) |
1266 | seq_puts(seq, | 1267 | seq_puts(seq, |
@@ -1276,11 +1277,11 @@ static int nr_info_show(struct seq_file *seq, void *v) | |||
1276 | else | 1277 | else |
1277 | devname = dev->name; | 1278 | devname = dev->name; |
1278 | 1279 | ||
1279 | seq_printf(seq, "%-9s ", ax2asc(&nr->user_addr)); | 1280 | seq_printf(seq, "%-9s ", ax2asc(buf, &nr->user_addr)); |
1280 | seq_printf(seq, "%-9s ", ax2asc(&nr->dest_addr)); | 1281 | seq_printf(seq, "%-9s ", ax2asc(buf, &nr->dest_addr)); |
1281 | seq_printf(seq, | 1282 | seq_printf(seq, |
1282 | "%-9s %-3s %02X/%02X %02X/%02X %2d %3d %3d %3d %3lu/%03lu %2lu/%02lu %3lu/%03lu %3lu/%03lu %2d/%02d %3d %5d %5d %ld\n", | 1283 | "%-9s %-3s %02X/%02X %02X/%02X %2d %3d %3d %3d %3lu/%03lu %2lu/%02lu %3lu/%03lu %3lu/%03lu %2d/%02d %3d %5d %5d %ld\n", |
1283 | ax2asc(&nr->source_addr), | 1284 | ax2asc(buf, &nr->source_addr), |
1284 | devname, | 1285 | devname, |
1285 | nr->my_index, | 1286 | nr->my_index, |
1286 | nr->my_id, | 1287 | nr->my_id, |
diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index 7a86b36cba50..b3b9097c87c7 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c | |||
@@ -881,6 +881,7 @@ static void nr_node_stop(struct seq_file *seq, void *v) | |||
881 | 881 | ||
882 | static int nr_node_show(struct seq_file *seq, void *v) | 882 | static int nr_node_show(struct seq_file *seq, void *v) |
883 | { | 883 | { |
884 | char buf[11]; | ||
884 | int i; | 885 | int i; |
885 | 886 | ||
886 | if (v == SEQ_START_TOKEN) | 887 | if (v == SEQ_START_TOKEN) |
@@ -890,7 +891,7 @@ static int nr_node_show(struct seq_file *seq, void *v) | |||
890 | struct nr_node *nr_node = v; | 891 | struct nr_node *nr_node = v; |
891 | nr_node_lock(nr_node); | 892 | nr_node_lock(nr_node); |
892 | seq_printf(seq, "%-9s %-7s %d %d", | 893 | seq_printf(seq, "%-9s %-7s %d %d", |
893 | ax2asc(&nr_node->callsign), | 894 | ax2asc(buf, &nr_node->callsign), |
894 | (nr_node->mnemonic[0] == '\0') ? "*" : nr_node->mnemonic, | 895 | (nr_node->mnemonic[0] == '\0') ? "*" : nr_node->mnemonic, |
895 | nr_node->which + 1, | 896 | nr_node->which + 1, |
896 | nr_node->count); | 897 | nr_node->count); |
@@ -964,6 +965,7 @@ static void nr_neigh_stop(struct seq_file *seq, void *v) | |||
964 | 965 | ||
965 | static int nr_neigh_show(struct seq_file *seq, void *v) | 966 | static int nr_neigh_show(struct seq_file *seq, void *v) |
966 | { | 967 | { |
968 | char buf[11]; | ||
967 | int i; | 969 | int i; |
968 | 970 | ||
969 | if (v == SEQ_START_TOKEN) | 971 | if (v == SEQ_START_TOKEN) |
@@ -973,7 +975,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v) | |||
973 | 975 | ||
974 | seq_printf(seq, "%05d %-9s %-4s %3d %d %3d %3d", | 976 | seq_printf(seq, "%05d %-9s %-4s %3d %d %3d %3d", |
975 | nr_neigh->number, | 977 | nr_neigh->number, |
976 | ax2asc(&nr_neigh->callsign), | 978 | ax2asc(buf, &nr_neigh->callsign), |
977 | nr_neigh->dev ? nr_neigh->dev->name : "???", | 979 | nr_neigh->dev ? nr_neigh->dev->name : "???", |
978 | nr_neigh->quality, | 980 | nr_neigh->quality, |
979 | nr_neigh->locked, | 981 | nr_neigh->locked, |
@@ -983,7 +985,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v) | |||
983 | if (nr_neigh->digipeat != NULL) { | 985 | if (nr_neigh->digipeat != NULL) { |
984 | for (i = 0; i < nr_neigh->digipeat->ndigi; i++) | 986 | for (i = 0; i < nr_neigh->digipeat->ndigi; i++) |
985 | seq_printf(seq, " %s", | 987 | seq_printf(seq, " %s", |
986 | ax2asc(&nr_neigh->digipeat->calls[i])); | 988 | ax2asc(buf, &nr_neigh->digipeat->calls[i])); |
987 | } | 989 | } |
988 | 990 | ||
989 | seq_puts(seq, "\n"); | 991 | seq_puts(seq, "\n"); |
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index c6e59f84c3ae..3077878ed4f0 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c | |||
@@ -1363,6 +1363,8 @@ static void rose_info_stop(struct seq_file *seq, void *v) | |||
1363 | 1363 | ||
1364 | static int rose_info_show(struct seq_file *seq, void *v) | 1364 | static int rose_info_show(struct seq_file *seq, void *v) |
1365 | { | 1365 | { |
1366 | char buf[11]; | ||
1367 | |||
1366 | if (v == SEQ_START_TOKEN) | 1368 | if (v == SEQ_START_TOKEN) |
1367 | seq_puts(seq, | 1369 | seq_puts(seq, |
1368 | "dest_addr dest_call src_addr src_call dev lci neigh st vs vr va t t1 t2 t3 hb idle Snd-Q Rcv-Q inode\n"); | 1370 | "dest_addr dest_call src_addr src_call dev lci neigh st vs vr va t t1 t2 t3 hb idle Snd-Q Rcv-Q inode\n"); |
@@ -1380,12 +1382,12 @@ static int rose_info_show(struct seq_file *seq, void *v) | |||
1380 | 1382 | ||
1381 | seq_printf(seq, "%-10s %-9s ", | 1383 | seq_printf(seq, "%-10s %-9s ", |
1382 | rose2asc(&rose->dest_addr), | 1384 | rose2asc(&rose->dest_addr), |
1383 | ax2asc(&rose->dest_call)); | 1385 | ax2asc(buf, &rose->dest_call)); |
1384 | 1386 | ||
1385 | if (ax25cmp(&rose->source_call, &null_ax25_address) == 0) | 1387 | if (ax25cmp(&rose->source_call, &null_ax25_address) == 0) |
1386 | callsign = "??????-?"; | 1388 | callsign = "??????-?"; |
1387 | else | 1389 | else |
1388 | callsign = ax2asc(&rose->source_call); | 1390 | callsign = ax2asc(buf, &rose->source_call); |
1389 | 1391 | ||
1390 | seq_printf(seq, | 1392 | seq_printf(seq, |
1391 | "%-10s %-9s %-5s %3.3X %05d %d %d %d %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld\n", | 1393 | "%-10s %-9s %-5s %3.3X %05d %d %d %d %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld\n", |
diff --git a/net/rose/rose_route.c b/net/rose/rose_route.c index 4510cd7613ec..e556d92c0bc4 100644 --- a/net/rose/rose_route.c +++ b/net/rose/rose_route.c | |||
@@ -851,6 +851,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25) | |||
851 | unsigned char cause, diagnostic; | 851 | unsigned char cause, diagnostic; |
852 | struct net_device *dev; | 852 | struct net_device *dev; |
853 | int len, res = 0; | 853 | int len, res = 0; |
854 | char buf[11]; | ||
854 | 855 | ||
855 | #if 0 | 856 | #if 0 |
856 | if (call_in_firewall(PF_ROSE, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT) | 857 | if (call_in_firewall(PF_ROSE, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT) |
@@ -876,7 +877,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25) | |||
876 | 877 | ||
877 | if (rose_neigh == NULL) { | 878 | if (rose_neigh == NULL) { |
878 | printk("rose_route : unknown neighbour or device %s\n", | 879 | printk("rose_route : unknown neighbour or device %s\n", |
879 | ax2asc(&ax25->dest_addr)); | 880 | ax2asc(buf, &ax25->dest_addr)); |
880 | goto out; | 881 | goto out; |
881 | } | 882 | } |
882 | 883 | ||
@@ -1178,6 +1179,7 @@ static void rose_neigh_stop(struct seq_file *seq, void *v) | |||
1178 | 1179 | ||
1179 | static int rose_neigh_show(struct seq_file *seq, void *v) | 1180 | static int rose_neigh_show(struct seq_file *seq, void *v) |
1180 | { | 1181 | { |
1182 | char buf[11]; | ||
1181 | int i; | 1183 | int i; |
1182 | 1184 | ||
1183 | if (v == SEQ_START_TOKEN) | 1185 | if (v == SEQ_START_TOKEN) |
@@ -1189,7 +1191,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v) | |||
1189 | /* if (!rose_neigh->loopback) { */ | 1191 | /* if (!rose_neigh->loopback) { */ |
1190 | seq_printf(seq, "%05d %-9s %-4s %3d %3d %3s %3s %3lu %3lu", | 1192 | seq_printf(seq, "%05d %-9s %-4s %3d %3d %3s %3s %3lu %3lu", |
1191 | rose_neigh->number, | 1193 | rose_neigh->number, |
1192 | (rose_neigh->loopback) ? "RSLOOP-0" : ax2asc(&rose_neigh->callsign), | 1194 | (rose_neigh->loopback) ? "RSLOOP-0" : ax2asc(buf, &rose_neigh->callsign), |
1193 | rose_neigh->dev ? rose_neigh->dev->name : "???", | 1195 | rose_neigh->dev ? rose_neigh->dev->name : "???", |
1194 | rose_neigh->count, | 1196 | rose_neigh->count, |
1195 | rose_neigh->use, | 1197 | rose_neigh->use, |
@@ -1200,7 +1202,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v) | |||
1200 | 1202 | ||
1201 | if (rose_neigh->digipeat != NULL) { | 1203 | if (rose_neigh->digipeat != NULL) { |
1202 | for (i = 0; i < rose_neigh->digipeat->ndigi; i++) | 1204 | for (i = 0; i < rose_neigh->digipeat->ndigi; i++) |
1203 | seq_printf(seq, " %s", ax2asc(&rose_neigh->digipeat->calls[i])); | 1205 | seq_printf(seq, " %s", ax2asc(buf, &rose_neigh->digipeat->calls[i])); |
1204 | } | 1206 | } |
1205 | 1207 | ||
1206 | seq_puts(seq, "\n"); | 1208 | seq_puts(seq, "\n"); |
@@ -1260,6 +1262,8 @@ static void rose_route_stop(struct seq_file *seq, void *v) | |||
1260 | 1262 | ||
1261 | static int rose_route_show(struct seq_file *seq, void *v) | 1263 | static int rose_route_show(struct seq_file *seq, void *v) |
1262 | { | 1264 | { |
1265 | char buf[11]; | ||
1266 | |||
1263 | if (v == SEQ_START_TOKEN) | 1267 | if (v == SEQ_START_TOKEN) |
1264 | seq_puts(seq, | 1268 | seq_puts(seq, |
1265 | "lci address callsign neigh <-> lci address callsign neigh\n"); | 1269 | "lci address callsign neigh <-> lci address callsign neigh\n"); |
@@ -1271,7 +1275,7 @@ static int rose_route_show(struct seq_file *seq, void *v) | |||
1271 | "%3.3X %-10s %-9s %05d ", | 1275 | "%3.3X %-10s %-9s %05d ", |
1272 | rose_route->lci1, | 1276 | rose_route->lci1, |
1273 | rose2asc(&rose_route->src_addr), | 1277 | rose2asc(&rose_route->src_addr), |
1274 | ax2asc(&rose_route->src_call), | 1278 | ax2asc(buf, &rose_route->src_call), |
1275 | rose_route->neigh1->number); | 1279 | rose_route->neigh1->number); |
1276 | else | 1280 | else |
1277 | seq_puts(seq, | 1281 | seq_puts(seq, |
@@ -1282,7 +1286,7 @@ static int rose_route_show(struct seq_file *seq, void *v) | |||
1282 | "%3.3X %-10s %-9s %05d\n", | 1286 | "%3.3X %-10s %-9s %05d\n", |
1283 | rose_route->lci2, | 1287 | rose_route->lci2, |
1284 | rose2asc(&rose_route->dest_addr), | 1288 | rose2asc(&rose_route->dest_addr), |
1285 | ax2asc(&rose_route->dest_call), | 1289 | ax2asc(buf, &rose_route->dest_call), |
1286 | rose_route->neigh2->number); | 1290 | rose_route->neigh2->number); |
1287 | else | 1291 | else |
1288 | seq_puts(seq, | 1292 | seq_puts(seq, |
diff --git a/net/rose/rose_subr.c b/net/rose/rose_subr.c index a29a3a960fd6..02891ce2db37 100644 --- a/net/rose/rose_subr.c +++ b/net/rose/rose_subr.c | |||
@@ -400,6 +400,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose) | |||
400 | { | 400 | { |
401 | unsigned char *p = buffer + 1; | 401 | unsigned char *p = buffer + 1; |
402 | char *callsign; | 402 | char *callsign; |
403 | char buf[11]; | ||
403 | int len, nb; | 404 | int len, nb; |
404 | 405 | ||
405 | /* National Facilities */ | 406 | /* National Facilities */ |
@@ -456,7 +457,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose) | |||
456 | 457 | ||
457 | *p++ = FAC_CCITT_DEST_NSAP; | 458 | *p++ = FAC_CCITT_DEST_NSAP; |
458 | 459 | ||
459 | callsign = ax2asc(&rose->dest_call); | 460 | callsign = ax2asc(buf, &rose->dest_call); |
460 | 461 | ||
461 | *p++ = strlen(callsign) + 10; | 462 | *p++ = strlen(callsign) + 10; |
462 | *p++ = (strlen(callsign) + 9) * 2; /* ??? */ | 463 | *p++ = (strlen(callsign) + 9) * 2; /* ??? */ |
@@ -471,7 +472,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose) | |||
471 | 472 | ||
472 | *p++ = FAC_CCITT_SRC_NSAP; | 473 | *p++ = FAC_CCITT_SRC_NSAP; |
473 | 474 | ||
474 | callsign = ax2asc(&rose->source_call); | 475 | callsign = ax2asc(buf, &rose->source_call); |
475 | 476 | ||
476 | *p++ = strlen(callsign) + 10; | 477 | *p++ = strlen(callsign) + 10; |
477 | *p++ = (strlen(callsign) + 9) * 2; /* ??? */ | 478 | *p++ = (strlen(callsign) + 9) * 2; /* ??? */ |