Commit f0daaa65 authored by Yasuyuki Kozakai's avatar Yasuyuki Kozakai Committed by David S. Miller

[NETFILTER] ip6tables: whitespace and indent cosmetic cleanup

Signed-off-by: default avatarYasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp>
Signed-off-by: default avatarHarald Welte <laforge@netfilter.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e0069cae
...@@ -78,13 +78,13 @@ match(const struct sk_buff *skb, ...@@ -78,13 +78,13 @@ match(const struct sk_buff *skb,
return 0; return 0;
oh = skb_header_pointer(skb, ptr, sizeof(_optsh), &_optsh); oh = skb_header_pointer(skb, ptr, sizeof(_optsh), &_optsh);
if (oh == NULL){ if (oh == NULL) {
*hotdrop = 1; *hotdrop = 1;
return 0; return 0;
} }
hdrlen = ipv6_optlen(oh); hdrlen = ipv6_optlen(oh);
if (skb->len - ptr < hdrlen){ if (skb->len - ptr < hdrlen) {
/* Packet smaller than it's length field */ /* Packet smaller than it's length field */
return 0; return 0;
} }
...@@ -97,22 +97,21 @@ match(const struct sk_buff *skb, ...@@ -97,22 +97,21 @@ match(const struct sk_buff *skb,
((optinfo->hdrlen == hdrlen) ^ ((optinfo->hdrlen == hdrlen) ^
!!(optinfo->invflags & IP6T_OPTS_INV_LEN)))); !!(optinfo->invflags & IP6T_OPTS_INV_LEN))));
ret = (oh != NULL) ret = (oh != NULL) &&
&&
(!(optinfo->flags & IP6T_OPTS_LEN) || (!(optinfo->flags & IP6T_OPTS_LEN) ||
((optinfo->hdrlen == hdrlen) ^ ((optinfo->hdrlen == hdrlen) ^
!!(optinfo->invflags & IP6T_OPTS_INV_LEN))); !!(optinfo->invflags & IP6T_OPTS_INV_LEN)));
ptr += 2; ptr += 2;
hdrlen -= 2; hdrlen -= 2;
if ( !(optinfo->flags & IP6T_OPTS_OPTS) ){ if (!(optinfo->flags & IP6T_OPTS_OPTS)) {
return ret; return ret;
} else if (optinfo->flags & IP6T_OPTS_NSTRICT) { } else if (optinfo->flags & IP6T_OPTS_NSTRICT) {
DEBUGP("Not strict - not implemented"); DEBUGP("Not strict - not implemented");
} else { } else {
DEBUGP("Strict "); DEBUGP("Strict ");
DEBUGP("#%d ",optinfo->optsnr); DEBUGP("#%d ", optinfo->optsnr);
for(temp=0; temp<optinfo->optsnr; temp++){ for (temp = 0; temp < optinfo->optsnr; temp++) {
/* type field exists ? */ /* type field exists ? */
if (hdrlen < 1) if (hdrlen < 1)
break; break;
...@@ -122,10 +121,10 @@ match(const struct sk_buff *skb, ...@@ -122,10 +121,10 @@ match(const struct sk_buff *skb,
break; break;
/* Type check */ /* Type check */
if (*tp != (optinfo->opts[temp] & 0xFF00)>>8){ if (*tp != (optinfo->opts[temp] & 0xFF00) >> 8) {
DEBUGP("Tbad %02X %02X\n", DEBUGP("Tbad %02X %02X\n",
*tp, *tp,
(optinfo->opts[temp] & 0xFF00)>>8); (optinfo->opts[temp] & 0xFF00) >> 8);
return 0; return 0;
} else { } else {
DEBUGP("Tok "); DEBUGP("Tok ");
...@@ -169,7 +168,8 @@ match(const struct sk_buff *skb, ...@@ -169,7 +168,8 @@ match(const struct sk_buff *skb,
} }
if (temp == optinfo->optsnr) if (temp == optinfo->optsnr)
return ret; return ret;
else return 0; else
return 0;
} }
return 0; return 0;
...@@ -191,8 +191,7 @@ checkentry(const char *tablename, ...@@ -191,8 +191,7 @@ checkentry(const char *tablename,
return 0; return 0;
} }
if (optsinfo->invflags & ~IP6T_OPTS_INV_MASK) { if (optsinfo->invflags & ~IP6T_OPTS_INV_MASK) {
DEBUGP("ip6t_opts: unknown flags %X\n", DEBUGP("ip6t_opts: unknown flags %X\n", optsinfo->invflags);
optsinfo->invflags);
return 0; return 0;
} }
......
...@@ -27,13 +27,12 @@ match(const struct sk_buff *skb, ...@@ -27,13 +27,12 @@ match(const struct sk_buff *skb,
unsigned int protoff, unsigned int protoff,
int *hotdrop) int *hotdrop)
{ {
unsigned char eui64[8]; unsigned char eui64[8];
int i=0; int i = 0;
if ( !(skb->mac.raw >= skb->head if (!(skb->mac.raw >= skb->head &&
&& (skb->mac.raw + ETH_HLEN) <= skb->data) (skb->mac.raw + ETH_HLEN) <= skb->data) &&
&& offset != 0) { offset != 0) {
*hotdrop = 1; *hotdrop = 1;
return 0; return 0;
} }
...@@ -44,15 +43,16 @@ match(const struct sk_buff *skb, ...@@ -44,15 +43,16 @@ match(const struct sk_buff *skb,
if (skb->nh.ipv6h->version == 0x6) { if (skb->nh.ipv6h->version == 0x6) {
memcpy(eui64, eth_hdr(skb)->h_source, 3); memcpy(eui64, eth_hdr(skb)->h_source, 3);
memcpy(eui64 + 5, eth_hdr(skb)->h_source + 3, 3); memcpy(eui64 + 5, eth_hdr(skb)->h_source + 3, 3);
eui64[3]=0xff; eui64[3] = 0xff;
eui64[4]=0xfe; eui64[4] = 0xfe;
eui64[0] |= 0x02; eui64[0] |= 0x02;
i=0; i = 0;
while ((skb->nh.ipv6h->saddr.s6_addr[8+i] == while ((skb->nh.ipv6h->saddr.s6_addr[8+i] == eui64[i])
eui64[i]) && (i<8)) i++; && (i < 8))
i++;
if ( i == 8 ) if (i == 8)
return 1; return 1;
} }
} }
......
...@@ -31,11 +31,11 @@ MODULE_AUTHOR("Andras Kis-Szabo <kisza@sch.bme.hu>"); ...@@ -31,11 +31,11 @@ MODULE_AUTHOR("Andras Kis-Szabo <kisza@sch.bme.hu>");
static inline int static inline int
id_match(u_int32_t min, u_int32_t max, u_int32_t id, int invert) id_match(u_int32_t min, u_int32_t max, u_int32_t id, int invert)
{ {
int r=0; int r = 0;
DEBUGP("frag id_match:%c 0x%x <= 0x%x <= 0x%x",invert? '!':' ', DEBUGP("frag id_match:%c 0x%x <= 0x%x <= 0x%x", invert ? '!' : ' ',
min,id,max); min, id, max);
r=(id >= min && id <= max) ^ invert; r = (id >= min && id <= max) ^ invert;
DEBUGP(" result %s\n",r? "PASS" : "FAILED"); DEBUGP(" result %s\n", r ? "PASS" : "FAILED");
return r; return r;
} }
...@@ -56,7 +56,7 @@ match(const struct sk_buff *skb, ...@@ -56,7 +56,7 @@ match(const struct sk_buff *skb,
return 0; return 0;
fh = skb_header_pointer(skb, ptr, sizeof(_frag), &_frag); fh = skb_header_pointer(skb, ptr, sizeof(_frag), &_frag);
if (fh == NULL){ if (fh == NULL) {
*hotdrop = 1; *hotdrop = 1;
return 0; return 0;
} }
...@@ -128,8 +128,7 @@ checkentry(const char *tablename, ...@@ -128,8 +128,7 @@ checkentry(const char *tablename,
return 0; return 0;
} }
if (fraginfo->invflags & ~IP6T_FRAG_INV_MASK) { if (fraginfo->invflags & ~IP6T_FRAG_INV_MASK) {
DEBUGP("ip6t_frag: unknown flags %X\n", DEBUGP("ip6t_frag: unknown flags %X\n", fraginfo->invflags);
fraginfo->invflags);
return 0; return 0;
} }
......
...@@ -78,13 +78,13 @@ match(const struct sk_buff *skb, ...@@ -78,13 +78,13 @@ match(const struct sk_buff *skb,
return 0; return 0;
oh = skb_header_pointer(skb, ptr, sizeof(_optsh), &_optsh); oh = skb_header_pointer(skb, ptr, sizeof(_optsh), &_optsh);
if (oh == NULL){ if (oh == NULL) {
*hotdrop = 1; *hotdrop = 1;
return 0; return 0;
} }
hdrlen = ipv6_optlen(oh); hdrlen = ipv6_optlen(oh);
if (skb->len - ptr < hdrlen){ if (skb->len - ptr < hdrlen) {
/* Packet smaller than it's length field */ /* Packet smaller than it's length field */
return 0; return 0;
} }
...@@ -97,22 +97,21 @@ match(const struct sk_buff *skb, ...@@ -97,22 +97,21 @@ match(const struct sk_buff *skb,
((optinfo->hdrlen == hdrlen) ^ ((optinfo->hdrlen == hdrlen) ^
!!(optinfo->invflags & IP6T_OPTS_INV_LEN)))); !!(optinfo->invflags & IP6T_OPTS_INV_LEN))));
ret = (oh != NULL) ret = (oh != NULL) &&
&&
(!(optinfo->flags & IP6T_OPTS_LEN) || (!(optinfo->flags & IP6T_OPTS_LEN) ||
((optinfo->hdrlen == hdrlen) ^ ((optinfo->hdrlen == hdrlen) ^
!!(optinfo->invflags & IP6T_OPTS_INV_LEN))); !!(optinfo->invflags & IP6T_OPTS_INV_LEN)));
ptr += 2; ptr += 2;
hdrlen -= 2; hdrlen -= 2;
if ( !(optinfo->flags & IP6T_OPTS_OPTS) ){ if (!(optinfo->flags & IP6T_OPTS_OPTS)) {
return ret; return ret;
} else if (optinfo->flags & IP6T_OPTS_NSTRICT) { } else if (optinfo->flags & IP6T_OPTS_NSTRICT) {
DEBUGP("Not strict - not implemented"); DEBUGP("Not strict - not implemented");
} else { } else {
DEBUGP("Strict "); DEBUGP("Strict ");
DEBUGP("#%d ",optinfo->optsnr); DEBUGP("#%d ", optinfo->optsnr);
for(temp=0; temp<optinfo->optsnr; temp++){ for (temp = 0; temp < optinfo->optsnr; temp++) {
/* type field exists ? */ /* type field exists ? */
if (hdrlen < 1) if (hdrlen < 1)
break; break;
...@@ -122,10 +121,10 @@ match(const struct sk_buff *skb, ...@@ -122,10 +121,10 @@ match(const struct sk_buff *skb,
break; break;
/* Type check */ /* Type check */
if (*tp != (optinfo->opts[temp] & 0xFF00)>>8){ if (*tp != (optinfo->opts[temp] & 0xFF00) >> 8) {
DEBUGP("Tbad %02X %02X\n", DEBUGP("Tbad %02X %02X\n",
*tp, *tp,
(optinfo->opts[temp] & 0xFF00)>>8); (optinfo->opts[temp] & 0xFF00) >> 8);
return 0; return 0;
} else { } else {
DEBUGP("Tok "); DEBUGP("Tok ");
...@@ -169,7 +168,8 @@ match(const struct sk_buff *skb, ...@@ -169,7 +168,8 @@ match(const struct sk_buff *skb,
} }
if (temp == optinfo->optsnr) if (temp == optinfo->optsnr)
return ret; return ret;
else return 0; else
return 0;
} }
return 0; return 0;
...@@ -191,8 +191,7 @@ checkentry(const char *tablename, ...@@ -191,8 +191,7 @@ checkentry(const char *tablename,
return 0; return 0;
} }
if (optsinfo->invflags & ~IP6T_OPTS_INV_MASK) { if (optsinfo->invflags & ~IP6T_OPTS_INV_MASK) {
DEBUGP("ip6t_opts: unknown flags %X\n", DEBUGP("ip6t_opts: unknown flags %X\n", optsinfo->invflags);
optsinfo->invflags);
return 0; return 0;
} }
......
...@@ -75,12 +75,12 @@ ipv6header_match(const struct sk_buff *skb, ...@@ -75,12 +75,12 @@ ipv6header_match(const struct sk_buff *skb,
if (nexthdr == NEXTHDR_FRAGMENT) { if (nexthdr == NEXTHDR_FRAGMENT) {
hdrlen = 8; hdrlen = 8;
} else if (nexthdr == NEXTHDR_AUTH) } else if (nexthdr == NEXTHDR_AUTH)
hdrlen = (hp->hdrlen+2)<<2; hdrlen = (hp->hdrlen + 2) << 2;
else else
hdrlen = ipv6_optlen(hp); hdrlen = ipv6_optlen(hp);
/* set the flag */ /* set the flag */
switch (nexthdr){ switch (nexthdr) {
case NEXTHDR_HOP: case NEXTHDR_HOP:
temp |= MASK_HOPOPTS; temp |= MASK_HOPOPTS;
break; break;
...@@ -108,7 +108,7 @@ ipv6header_match(const struct sk_buff *skb, ...@@ -108,7 +108,7 @@ ipv6header_match(const struct sk_buff *skb,
break; break;
} }
if ( (nexthdr != NEXTHDR_NONE ) && (nexthdr != NEXTHDR_ESP) ) if ((nexthdr != NEXTHDR_NONE) && (nexthdr != NEXTHDR_ESP))
temp |= MASK_PROTO; temp |= MASK_PROTO;
if (info->modeflag) if (info->modeflag)
...@@ -137,8 +137,8 @@ ipv6header_checkentry(const char *tablename, ...@@ -137,8 +137,8 @@ ipv6header_checkentry(const char *tablename,
return 0; return 0;
/* invflags is 0 or 0xff in hard mode */ /* invflags is 0 or 0xff in hard mode */
if ((!info->modeflag) && info->invflags != 0x00 if ((!info->modeflag) && info->invflags != 0x00 &&
&& info->invflags != 0xFF) info->invflags != 0xFF)
return 0; return 0;
return 1; return 1;
...@@ -164,4 +164,3 @@ static void __exit ipv6header_exit(void) ...@@ -164,4 +164,3 @@ static void __exit ipv6header_exit(void)
module_init(ipv6header_init); module_init(ipv6header_init);
module_exit(ipv6header_exit); module_exit(ipv6header_exit);
...@@ -36,14 +36,14 @@ match(const struct sk_buff *skb, ...@@ -36,14 +36,14 @@ match(const struct sk_buff *skb,
if (!skb->sk || !skb->sk->sk_socket || !skb->sk->sk_socket->file) if (!skb->sk || !skb->sk->sk_socket || !skb->sk->sk_socket->file)
return 0; return 0;
if(info->match & IP6T_OWNER_UID) { if (info->match & IP6T_OWNER_UID) {
if((skb->sk->sk_socket->file->f_uid != info->uid) ^ if ((skb->sk->sk_socket->file->f_uid != info->uid) ^
!!(info->invert & IP6T_OWNER_UID)) !!(info->invert & IP6T_OWNER_UID))
return 0; return 0;
} }
if(info->match & IP6T_OWNER_GID) { if (info->match & IP6T_OWNER_GID) {
if((skb->sk->sk_socket->file->f_gid != info->gid) ^ if ((skb->sk->sk_socket->file->f_gid != info->gid) ^
!!(info->invert & IP6T_OWNER_GID)) !!(info->invert & IP6T_OWNER_GID))
return 0; return 0;
} }
...@@ -69,7 +69,7 @@ checkentry(const char *tablename, ...@@ -69,7 +69,7 @@ checkentry(const char *tablename,
if (matchsize != IP6T_ALIGN(sizeof(struct ip6t_owner_info))) if (matchsize != IP6T_ALIGN(sizeof(struct ip6t_owner_info)))
return 0; return 0;
if (info->match & (IP6T_OWNER_PID|IP6T_OWNER_SID)) { if (info->match & (IP6T_OWNER_PID | IP6T_OWNER_SID)) {
printk("ipt_owner: pid and sid matching " printk("ipt_owner: pid and sid matching "
"not supported anymore\n"); "not supported anymore\n");
return 0; return 0;
......
...@@ -33,11 +33,11 @@ MODULE_AUTHOR("Andras Kis-Szabo <kisza@sch.bme.hu>"); ...@@ -33,11 +33,11 @@ MODULE_AUTHOR("Andras Kis-Szabo <kisza@sch.bme.hu>");
static inline int static inline int
segsleft_match(u_int32_t min, u_int32_t max, u_int32_t id, int invert) segsleft_match(u_int32_t min, u_int32_t max, u_int32_t id, int invert)
{ {
int r=0; int r = 0;
DEBUGP("rt segsleft_match:%c 0x%x <= 0x%x <= 0x%x",invert? '!':' ', DEBUGP("rt segsleft_match:%c 0x%x <= 0x%x <= 0x%x",
min,id,max); invert ? '!' : ' ', min, id, max);
r=(id >= min && id <= max) ^ invert; r = (id >= min && id <= max) ^ invert;
DEBUGP(" result %s\n",r? "PASS" : "FAILED"); DEBUGP(" result %s\n", r ? "PASS" : "FAILED");
return r; return r;
} }
...@@ -62,13 +62,13 @@ match(const struct sk_buff *skb, ...@@ -62,13 +62,13 @@ match(const struct sk_buff *skb,
return 0; return 0;
rh = skb_header_pointer(skb, ptr, sizeof(_route), &_route); rh = skb_header_pointer(skb, ptr, sizeof(_route), &_route);
if (rh == NULL){ if (rh == NULL) {
*hotdrop = 1; *hotdrop = 1;
return 0; return 0;
} }
hdrlen = ipv6_optlen(rh); hdrlen = ipv6_optlen(rh);
if (skb->len - ptr < hdrlen){ if (skb->len - ptr < hdrlen) {
/* Pcket smaller than its length field */ /* Pcket smaller than its length field */
return 0; return 0;
} }
...@@ -92,8 +92,10 @@ match(const struct sk_buff *skb, ...@@ -92,8 +92,10 @@ match(const struct sk_buff *skb,
((rtinfo->hdrlen == hdrlen) ^ ((rtinfo->hdrlen == hdrlen) ^
!!(rtinfo->invflags & IP6T_RT_INV_LEN)))); !!(rtinfo->invflags & IP6T_RT_INV_LEN))));
DEBUGP("res %02X %02X %02X ", DEBUGP("res %02X %02X %02X ",
(rtinfo->flags & IP6T_RT_RES), ((struct rt0_hdr *)rh)->reserved, (rtinfo->flags & IP6T_RT_RES),
!((rtinfo->flags & IP6T_RT_RES) && (((struct rt0_hdr *)rh)->reserved))); ((struct rt0_hdr *)rh)->reserved,
!((rtinfo->flags & IP6T_RT_RES) &&
(((struct rt0_hdr *)rh)->reserved)));
ret = (rh != NULL) ret = (rh != NULL)
&& &&
...@@ -112,25 +114,29 @@ match(const struct sk_buff *skb, ...@@ -112,25 +114,29 @@ match(const struct sk_buff *skb,
if (ret && (rtinfo->flags & IP6T_RT_RES)) { if (ret && (rtinfo->flags & IP6T_RT_RES)) {
u_int32_t *rp, _reserved; u_int32_t *rp, _reserved;
rp = skb_header_pointer(skb, rp = skb_header_pointer(skb,
ptr + offsetof(struct rt0_hdr, reserved), ptr + offsetof(struct rt0_hdr,
sizeof(_reserved), &_reserved); reserved),
sizeof(_reserved),
&_reserved);
ret = (*rp == 0); ret = (*rp == 0);
} }
DEBUGP("#%d ",rtinfo->addrnr); DEBUGP("#%d ", rtinfo->addrnr);
if ( !(rtinfo->flags & IP6T_RT_FST) ){ if (!(rtinfo->flags & IP6T_RT_FST)) {
return ret; return ret;
} else if (rtinfo->flags & IP6T_RT_FST_NSTRICT) { } else if (rtinfo->flags & IP6T_RT_FST_NSTRICT) {
DEBUGP("Not strict "); DEBUGP("Not strict ");
if ( rtinfo->addrnr > (unsigned int)((hdrlen-8)/16) ){ if (rtinfo->addrnr > (unsigned int)((hdrlen - 8) / 16)) {
DEBUGP("There isn't enough space\n"); DEBUGP("There isn't enough space\n");
return 0; return 0;
} else { } else {
unsigned int i = 0; unsigned int i = 0;
DEBUGP("#%d ",rtinfo->addrnr); DEBUGP("#%d ", rtinfo->addrnr);
for(temp=0; temp<(unsigned int)((hdrlen-8)/16); temp++){ for (temp = 0;
temp < (unsigned int)((hdrlen - 8) / 16);
temp++) {
ap = skb_header_pointer(skb, ap = skb_header_pointer(skb,
ptr ptr
+ sizeof(struct rt0_hdr) + sizeof(struct rt0_hdr)
...@@ -141,24 +147,26 @@ match(const struct sk_buff *skb, ...@@ -141,24 +147,26 @@ match(const struct sk_buff *skb,
BUG_ON(ap == NULL); BUG_ON(ap == NULL);
if (ipv6_addr_equal(ap, &rtinfo->addrs[i])) { if (ipv6_addr_equal(ap, &rtinfo->addrs[i])) {
DEBUGP("i=%d temp=%d;\n",i,temp); DEBUGP("i=%d temp=%d;\n", i, temp);
i++; i++;
} }
if (i==rtinfo->addrnr) break; if (i == rtinfo->addrnr)
break;
} }
DEBUGP("i=%d #%d\n", i, rtinfo->addrnr); DEBUGP("i=%d #%d\n", i, rtinfo->addrnr);
if (i == rtinfo->addrnr) if (i == rtinfo->addrnr)
return ret; return ret;
else return 0; else
return 0;
} }
} else { } else {
DEBUGP("Strict "); DEBUGP("Strict ");
if ( rtinfo->addrnr > (unsigned int)((hdrlen-8)/16) ){ if (rtinfo->addrnr > (unsigned int)((hdrlen - 8) / 16)) {
DEBUGP("There isn't enough space\n"); DEBUGP("There isn't enough space\n");
return 0; return 0;
} else { } else {
DEBUGP("#%d ",rtinfo->addrnr); DEBUGP("#%d ", rtinfo->addrnr);
for(temp=0; temp<rtinfo->addrnr; temp++){ for (temp = 0; temp < rtinfo->addrnr; temp++) {
ap = skb_header_pointer(skb, ap = skb_header_pointer(skb,
ptr ptr
+ sizeof(struct rt0_hdr) + sizeof(struct rt0_hdr)
...@@ -171,9 +179,11 @@ match(const struct sk_buff *skb, ...@@ -171,9 +179,11 @@ match(const struct sk_buff *skb,
break; break;
} }
DEBUGP("temp=%d #%d\n", temp, rtinfo->addrnr); DEBUGP("temp=%d #%d\n", temp, rtinfo->addrnr);
if ((temp == rtinfo->addrnr) && (temp == (unsigned int)((hdrlen-8)/16))) if ((temp == rtinfo->addrnr) &&
(temp == (unsigned int)((hdrlen - 8) / 16)))
return ret; return ret;
else return 0; else
return 0;
} }
} }
...@@ -196,14 +206,13 @@ checkentry(const char *tablename, ...@@ -196,14 +206,13 @@ checkentry(const char *tablename,
return 0; return 0;
} }
if (rtinfo->invflags & ~IP6T_RT_INV_MASK) { if (rtinfo->invflags & ~IP6T_RT_INV_MASK) {
DEBUGP("ip6t_rt: unknown flags %X\n", DEBUGP("ip6t_rt: unknown flags %X\n", rtinfo->invflags);
rtinfo->invflags);
return 0; return 0;
} }
if ( (rtinfo->flags & (IP6T_RT_RES|IP6T_RT_FST_MASK)) && if ((rtinfo->flags & (IP6T_RT_RES | IP6T_RT_FST_MASK)) &&
(!(rtinfo->flags & IP6T_RT_TYP) || (!(rtinfo->flags & IP6T_RT_TYP) ||
(rtinfo->rt_type != 0) || (rtinfo->rt_type != 0) ||
(rtinfo->invflags & IP6T_RT_INV_TYP)) ) { (rtinfo->invflags & IP6T_RT_INV_TYP))) {
DEBUGP("`--rt-type 0' required before `--rt-0-*'"); DEBUGP("`--rt-type 0' required before `--rt-0-*'");
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment