Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Trigger Distribution
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Trigger Distribution
Commits
f08489e8
Commit
f08489e8
authored
Mar 01, 2021
by
Tristan Gingold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libwrtd: add 'union wrtd_id' (part 1: library)
parent
6d62d950
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
77 additions
and
59 deletions
+77
-59
wrtd-common.h
software/include/wrtd-common.h
+15
-7
libwrtd-attributes.c
software/lib/libwrtd-attributes.c
+7
-7
libwrtd-internal.c
software/lib/libwrtd-internal.c
+16
-10
libwrtd-private.h
software/lib/libwrtd-private.h
+5
-3
libwrtd-reconfigure.c
software/lib/libwrtd-reconfigure.c
+22
-21
libwrtd.c
software/lib/libwrtd.c
+12
-11
No files found.
software/include/wrtd-common.h
View file @
f08489e8
...
...
@@ -20,6 +20,14 @@
#define WRTD_ID_NET 0xff
/**
* WRTD identifier.
*/
union
wrtd_id
{
char
c
[
WRTD_ID_LEN
];
uint32_t
w
[
WRTD_ID_LEN
/
4
];
};
/**
* WRTD timestamp format
*/
...
...
@@ -43,7 +51,7 @@ struct wrtd_event {
struct
wrtd_tstamp
ts
;
/** Event id. */
char
id
[
WRTD_ID_LEN
]
;
union
wrtd_id
id
;
/** Sequence number. */
uint32_t
seq
;
...
...
@@ -52,10 +60,10 @@ struct wrtd_event {
unsigned
char
flags
;
};
inline
static
unsigned
char
wrtd_id_hash
(
const
char
*
id
)
inline
static
unsigned
char
wrtd_id_hash
(
union
wrtd_id
*
id
)
{
/* This assumes ID is properly padded. */
return
id
[
0
]
^
id
[
3
]
^
id
[
4
]
^
id
[
7
];
return
id
->
c
[
0
]
^
id
->
c
[
3
]
^
id
->
c
[
4
]
^
id
->
c
[
7
];
}
#define WRTD_DEST_CPU_LOCAL 0xfe
...
...
@@ -63,11 +71,11 @@ inline static unsigned char wrtd_id_hash(const char *id)
struct
wrtd_rule_config
{
/* Id of the rule. */
char
id
[
WRTD_ID_LEN
]
;
union
wrtd_id
id
;
char
source_id
[
WRTD_ID_LEN
]
;
union
wrtd_id
source_id
;
char
dest_id
[
WRTD_ID_LEN
]
;
union
wrtd_id
dest_id
;
/* Device destination. */
uint8_t
dest_cpu
;
...
...
@@ -135,7 +143,7 @@ struct wrtd_alarm {
struct
wrtd_message
{
unsigned
char
hw_detect
[
3
];
/* LXI */
unsigned
char
domain
;
/* 0 */
un
signed
char
event_id
[
WRTD_ID_LEN
]
;
un
ion
wrtd_id
event_id
;
uint32_t
seq
;
uint32_t
ts_sec
;
uint32_t
ts_ns
;
...
...
software/lib/libwrtd-attributes.c
View file @
f08489e8
...
...
@@ -191,7 +191,7 @@ enum wrtd_status wrtd_attr_get_alarm_count(struct wrtd_dev *wrtd,
res
=
0
;
for
(
i
=
0
;
i
<
wrtd
->
nbr_alarms
;
i
++
)
if
(
!
wrtd_id_null
(
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
))
if
(
!
wrtd_id_null
(
&
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
))
res
++
;
*
value
=
res
;
return
WRTD_SUCCESS
;
...
...
@@ -509,7 +509,7 @@ enum wrtd_status wrtd_attr_get_rule_count(struct wrtd_dev *wrtd,
res
=
0
;
for
(
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
if
(
!
wrtd_id_null
(
wrtd
->
rules
[
i
].
rule
.
conf
.
id
))
if
(
!
wrtd_id_null
(
&
wrtd
->
rules
[
i
].
rule
.
conf
.
id
))
res
++
;
*
value
=
res
;
return
WRTD_SUCCESS
;
...
...
@@ -538,7 +538,7 @@ enum wrtd_status wrtd_attr_set_rule_source(struct wrtd_dev *wrtd,
status
=
wrtd_rule_check_disabled
(
wrtd
,
idx
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
wrtd_id_
copy
(
wrtd
->
rules
[
idx
].
rule
.
conf
.
source_id
,
src
);
wrtd_id_
build
(
&
wrtd
->
rules
[
idx
].
rule
.
conf
.
source_id
,
src
);
status
=
wrtd_write_rule
(
wrtd
,
idx
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
...
...
@@ -558,7 +558,7 @@ enum wrtd_status wrtd_attr_get_rule_source(struct wrtd_dev *wrtd,
WRTD_RETURN_IF_ERROR
(
status
);
status
=
wrtd_id_copy_buf
(
wrtd
,
dst
,
buffer_size
,
wrtd
->
rules
[
idx
].
rule
.
conf
.
source_id
,
wrtd
->
rules
[
idx
].
rule
.
conf
.
source_id
.
c
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
...
...
@@ -581,7 +581,7 @@ enum wrtd_status wrtd_attr_set_rule_destination(struct wrtd_dev *wrtd,
status
=
wrtd_rule_check_disabled
(
wrtd
,
idx
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
wrtd_id_
copy
(
wrtd
->
rules
[
idx
].
rule
.
conf
.
dest_id
,
dst
);
wrtd_id_
build
(
&
wrtd
->
rules
[
idx
].
rule
.
conf
.
dest_id
,
dst
);
status
=
wrtd_write_rule
(
wrtd
,
idx
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
...
...
@@ -601,7 +601,7 @@ enum wrtd_status wrtd_attr_get_rule_destination(struct wrtd_dev *wrtd,
WRTD_RETURN_IF_ERROR
(
status
);
status
=
wrtd_id_copy_buf
(
wrtd
,
dst
,
buffer_size
,
wrtd
->
rules
[
idx
].
rule
.
conf
.
dest_id
,
wrtd
->
rules
[
idx
].
rule
.
conf
.
dest_id
.
c
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
...
...
@@ -1064,7 +1064,7 @@ enum wrtd_status wrtd_attr_get_sys_time(struct wrtd_dev *wrtd,
enum
wrtd_status
wrtd_attr_global
(
struct
wrtd_dev
*
wrtd
,
const
char
*
rep_cap_id
)
{
if
(
!
wrtd_id_eq
(
rep_cap_id
,
WRTD_GLOBAL_REP_CAP_ID
))
if
(
strcmp
(
rep_cap_id
,
WRTD_GLOBAL_REP_CAP_ID
))
return
wrtd_return_error
(
wrtd
,
WRTD_ERROR_ATTR_GLOBAL
,
"Global attributes require the "
"global repeated capability ID"
);
...
...
software/lib/libwrtd-internal.c
View file @
f08489e8
...
...
@@ -15,19 +15,24 @@
#include "libwrtd-private.h"
#include "mockturtle/libmockturtle.h"
inline
bool
wrtd_id_eq
(
const
char
*
l
,
const
char
*
r
)
bool
wrtd_id_str_eq
(
const
union
wrtd_id
*
l
,
const
char
*
r
)
{
return
strncmp
(
l
,
r
,
WRTD_ID_LEN
)
==
0
;
return
strncmp
(
l
->
c
,
r
,
WRTD_ID_LEN
)
==
0
;
}
inline
bool
wrtd_id_null
(
const
char
*
id
)
bool
wrtd_id_eq
(
const
union
wrtd_id
*
l
,
const
union
wrtd_id
*
r
)
{
return
id
[
0
]
==
0
;
return
memcmp
(
l
->
c
,
r
->
c
,
WRTD_ID_LEN
)
==
0
;
}
inline
void
wrtd_id_copy
(
char
*
dst
,
const
char
*
src
)
bool
wrtd_id_null
(
const
union
wrtd_id
*
id
)
{
strncpy
(
dst
,
src
,
WRTD_ID_LEN
);
return
id
->
c
[
0
]
==
0
;
}
void
wrtd_id_build
(
union
wrtd_id
*
dst
,
const
char
*
src
)
{
strncpy
(
dst
->
c
,
src
,
WRTD_ID_LEN
);
}
enum
wrtd_status
wrtd_id_copy_buf
(
struct
wrtd_dev
*
wrtd
,
...
...
@@ -76,7 +81,7 @@ enum wrtd_status wrtd_validate_id(struct wrtd_dev *wrtd, const char *rep_cap_id,
return
WRTD_ERROR_NOT_INITIALIZED
;
}
if
(
(
wrtd_id_null
(
rep_cap_id
))
||
(
strlen
(
rep_cap_id
)
>
WRTD_ID_LEN
)
)
if
(
rep_cap_id
[
0
]
==
0
||
strlen
(
rep_cap_id
)
>
WRTD_ID_LEN
)
return
wrtd_return_error
(
wrtd
,
WRTD_ERROR_BADLY_FORMED_SELECTOR
,
"%s/%s: Badly-formed selector"
,
...
...
@@ -563,7 +568,8 @@ enum wrtd_status wrtd_find_alarm(struct wrtd_dev *wrtd,
/* 3. Search it. */
for
(
i
=
0
;
i
<
wrtd
->
nbr_alarms
;
i
++
)
if
(
wrtd_id_eq
(
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
,
rep_cap_id
))
{
if
(
wrtd_id_str_eq
(
&
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
,
rep_cap_id
))
{
*
idx
=
i
;
return
WRTD_SUCCESS
;
}
...
...
@@ -595,7 +601,7 @@ enum wrtd_status wrtd_find_rule(struct wrtd_dev *wrtd,
/* 3. Search it. */
for
(
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
if
(
wrtd_id_
eq
(
wrtd
->
rules
[
i
].
rule
.
conf
.
id
,
rep_cap_id
))
{
if
(
wrtd_id_
str_eq
(
&
wrtd
->
rules
[
i
].
rule
.
conf
.
id
,
rep_cap_id
))
{
*
idx
=
i
;
return
WRTD_SUCCESS
;
}
...
...
@@ -647,7 +653,7 @@ enum wrtd_status wrtd_find_fw(struct wrtd_dev *wrtd,
/* 3. Search it. */
for
(
i
=
0
;
i
<
wrtd
->
nbr_cpus
;
i
++
)
if
(
wrtd_id_eq
(
wrtd
->
roots
[
i
].
fw_name
,
rep_cap_id
))
{
if
(
!
strncmp
(
wrtd
->
roots
[
i
].
fw_name
,
rep_cap_id
,
WRTD_ID_LEN
))
{
*
idx
=
i
;
return
WRTD_SUCCESS
;
}
...
...
software/lib/libwrtd-private.h
View file @
f08489e8
...
...
@@ -170,9 +170,11 @@ enum wrtd_status wrtd_find_fw(struct wrtd_dev *wrtd,
/* Reconfigure route tables and write-back rules. */
enum
wrtd_status
wrtd_reconfigure
(
struct
wrtd_dev
*
wrtd
,
const
char
*
caller_func
);
bool
wrtd_id_eq
(
const
char
*
l
,
const
char
*
r
);
bool
wrtd_id_null
(
const
char
*
id
);
void
wrtd_id_copy
(
char
*
dst
,
const
char
*
src
);
bool
wrtd_id_str_eq
(
const
union
wrtd_id
*
l
,
const
char
*
r
);
bool
wrtd_id_eq
(
const
union
wrtd_id
*
l
,
const
union
wrtd_id
*
r
);
bool
wrtd_id_null
(
const
union
wrtd_id
*
id
);
void
wrtd_id_copy
(
union
wrtd_id
*
dst
,
const
union
wrtd_id
*
src
);
void
wrtd_id_build
(
union
wrtd_id
*
dst
,
const
char
*
src
);
enum
wrtd_status
wrtd_alarm_check_disabled
(
struct
wrtd_dev
*
wrtd
,
unsigned
idx
,
const
char
*
caller_func
);
enum
wrtd_status
wrtd_rule_check_disabled
(
struct
wrtd_dev
*
wrtd
,
unsigned
idx
,
...
...
software/lib/libwrtd-reconfigure.c
View file @
f08489e8
...
...
@@ -81,7 +81,7 @@ static enum wrtd_status wrtd_reconfigure_alloc_map(struct wrtd_dev *wrtd,
/* Fill rules. */
n
=
0
;
for
(
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
{
if
(
wrtd_id_null
(
wrtd
->
rules
[
i
].
rule
.
conf
.
id
))
if
(
wrtd_id_null
(
&
wrtd
->
rules
[
i
].
rule
.
conf
.
id
))
continue
;
map
->
rules
[
n
].
rule
=
&
wrtd
->
rules
[
i
];
map
->
rules
[
n
].
cpu
=
-
1
;
...
...
@@ -120,32 +120,33 @@ static enum wrtd_status wrtd_reconfigure_alloc_map(struct wrtd_dev *wrtd,
static
enum
wrtd_status
wrtd_find_channel
(
struct
wrtd_dev
*
wrtd
,
const
struct
conf_map
*
map
,
const
char
*
id
,
unsigned
int
dir
,
const
union
wrtd_id
*
id
,
unsigned
int
dir
,
unsigned
*
res_dev
,
unsigned
*
res_ch
)
{
unsigned
i
;
unsigned
j
;
char
dev_id
[
WRTD_ID_LEN
]
;
union
wrtd_id
dev_id
;
for
(
i
=
0
;
i
<
map
->
nbr_devs
;
i
++
)
{
struct
device_map
*
d
=
&
map
->
devs
[
i
];
for
(
j
=
0
;
j
<
d
->
nbr_chs
;
j
++
)
{
memset
(
dev_id
,
0
,
WRTD_ID_LEN
);
dev_id
[
0
]
=
'L'
;
dev_id
[
1
]
=
'C'
;
dev_id
[
2
]
=
'-'
;
memset
(
&
dev_id
.
c
,
0
,
WRTD_ID_LEN
);
dev_id
.
c
[
0
]
=
'L'
;
dev_id
.
c
[
1
]
=
'C'
;
dev_id
.
c
[
2
]
=
'-'
;
if
(
d
->
chs_dir
==
WRTD_CH_DIR_IN
)
{
dev_id
[
3
]
=
'I'
;
dev_id
[
4
]
=
'1'
+
d
->
chs_idx
+
j
;
dev_id
.
c
[
3
]
=
'I'
;
dev_id
.
c
[
4
]
=
'1'
+
d
->
chs_idx
+
j
;
}
else
{
dev_id
[
3
]
=
'O'
;
dev_id
[
4
]
=
'1'
+
d
->
chs_idx
+
j
;
dev_id
.
c
[
3
]
=
'O'
;
dev_id
.
c
[
4
]
=
'1'
+
d
->
chs_idx
+
j
;
}
if
(
d
->
chs_dir
==
dir
&&
wrtd_id_eq
(
dev_id
,
id
))
{
&&
wrtd_id_eq
(
&
dev_id
,
id
))
{
*
res_dev
=
i
;
*
res_ch
=
(
d
->
dev_idx
<<
4
)
+
j
;
return
WRTD_SUCCESS
;
...
...
@@ -203,15 +204,15 @@ static enum wrtd_status wrtd_reconfigure_place(struct wrtd_dev *wrtd,
continue
;
/* Place the rule on the same CPU as the input source. */
status
=
wrtd_find_channel
(
wrtd
,
map
,
rule
->
conf
.
source_id
,
status
=
wrtd_find_channel
(
wrtd
,
map
,
&
rule
->
conf
.
source_id
,
WRTD_CH_DIR_IN
,
&
dev
,
&
ch
);
if
(
status
==
WRTD_SUCCESS
)
{
/* Input channel. */
cpu_affinity
=
map
->
devs
[
dev
].
cpu
;
}
else
{
status
=
wrtd_find_alarm
(
wrtd
,
rule
->
conf
.
source_id
,
&
ch
,
caller_func
);
status
=
wrtd_find_alarm
(
wrtd
,
rule
->
conf
.
source_id
.
c
,
&
ch
,
caller_func
);
if
(
status
==
WRTD_SUCCESS
)
{
/* Alarm. */
cpu_affinity
=
wrtd
->
alarms
[
ch
].
cpu
;
...
...
@@ -224,7 +225,7 @@ static enum wrtd_status wrtd_reconfigure_place(struct wrtd_dev *wrtd,
struct
wrtd_root
*
root
;
/* Set destination cpu and channel. */
status
=
wrtd_find_channel
(
wrtd
,
map
,
rule
->
conf
.
dest_id
,
status
=
wrtd_find_channel
(
wrtd
,
map
,
&
rule
->
conf
.
dest_id
,
WRTD_CH_DIR_OUT
,
&
dev
,
&
ch
);
if
(
status
==
WRTD_SUCCESS
)
{
/* Output device. */
...
...
@@ -321,7 +322,7 @@ static enum wrtd_status wrtd_reconfigure_place(struct wrtd_dev *wrtd,
if
(
m
->
cpu
!=
cpu
)
continue
;
hash
=
wrtd_id_hash
(
m
->
rule
->
rule
.
conf
.
source_id
)
hash
=
wrtd_id_hash
(
&
m
->
rule
->
rule
.
conf
.
source_id
)
%
nbr_cpu_rules
;
m
->
global_idx
=
cpu_offset
+
hash
;
...
...
@@ -411,12 +412,12 @@ static enum wrtd_status wrtd_reconfigure_write(struct wrtd_dev *wrtd,
wrtd
->
rules
=
new_rules
;
for
(
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
{
if
(
wrtd_id_null
(
new_rules
[
i
].
rule
.
conf
.
id
)
&&
wrtd_id_null
(
old_rules
[
i
].
rule
.
conf
.
id
))
if
(
wrtd_id_null
(
&
new_rules
[
i
].
rule
.
conf
.
id
)
&&
wrtd_id_null
(
&
old_rules
[
i
].
rule
.
conf
.
id
))
continue
;
if
(
!
old_rules
[
i
].
modified
&&
(
wrtd_id_eq
(
new_rules
[
i
].
rule
.
conf
.
id
,
old_rules
[
i
].
rule
.
conf
.
id
)))
(
wrtd_id_eq
(
&
new_rules
[
i
].
rule
.
conf
.
id
,
&
old_rules
[
i
].
rule
.
conf
.
id
)))
continue
;
status
=
wrtd_write_rule
(
wrtd
,
i
,
caller_func
);
...
...
software/lib/libwrtd.c
View file @
f08489e8
...
...
@@ -1109,7 +1109,7 @@ wrtd_status wrtd_get_next_event_log_entry(wrtd_dev *wrtd,
int
ret
;
ret
=
snprintf
(
sptr
,
count
,
"Id:%-16s|Seq:%04d|"
,
log
.
event
.
id
,
log
.
event
.
seq
%
10000
);
log
.
event
.
id
.
c
,
log
.
event
.
seq
%
10000
);
if
(
ret
<
0
)
return
wrtd_return_error
(
wrtd
,
WRTD_ERROR_UNEXPECTED_RESPONSE
,
...
...
@@ -1327,12 +1327,13 @@ wrtd_status wrtd_add_alarm(wrtd_dev *wrtd,
/* Find a free slot, check not already used. */
idx
=
-
1
;
for
(
i
=
0
;
i
<
wrtd
->
nbr_alarms
;
i
++
)
{
if
(
wrtd_id_eq
(
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
,
rep_cap_id
))
{
if
(
wrtd_id_str_eq
(
&
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
,
rep_cap_id
))
{
return
wrtd_return_error
(
wrtd
,
WRTD_ERROR_ALARM_EXISTS
,
"%s: The alarm already exists"
,
__func__
);
}
if
(
idx
<
0
&&
wrtd_id_null
(
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
))
if
(
idx
<
0
&&
wrtd_id_null
(
&
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
))
idx
=
i
;
}
if
(
idx
==
-
1
)
...
...
@@ -1345,7 +1346,7 @@ wrtd_status wrtd_add_alarm(wrtd_dev *wrtd,
alarm
=
&
wrtd
->
alarms
[
idx
].
alarm
;
/* That should be the default, but... */
memset
(
alarm
,
0
,
sizeof
(
struct
wrtd_alarm
));
wrtd_id_
copy
(
alarm
->
event
.
id
,
rep_cap_id
);
wrtd_id_
build
(
&
alarm
->
event
.
id
,
rep_cap_id
);
/* Write-back. */
status
=
wrtd_write_alarm
(
wrtd
,
idx
,
__func__
);
...
...
@@ -1509,12 +1510,12 @@ wrtd_status wrtd_get_alarm_name(wrtd_dev *wrtd,
/* Search it. */
for
(
n
=
0
,
i
=
0
;
i
<
wrtd
->
nbr_alarms
;
i
++
)
{
const
char
*
aid
=
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
;
const
union
wrtd_id
*
aid
=
&
wrtd
->
alarms
[
i
].
alarm
.
event
.
id
;
if
(
wrtd_id_null
(
aid
))
continue
;
if
(
n
==
index
)
{
status
=
wrtd_id_copy_buf
(
wrtd
,
name
,
name_buffer_size
,
aid
,
__func__
);
(
wrtd
,
name
,
name_buffer_size
,
aid
->
c
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
return
WRTD_SUCCESS
;
}
...
...
@@ -1569,13 +1570,13 @@ wrtd_status wrtd_add_rule(wrtd_dev *wrtd,
/* 3. Find a free slot, check not already used. */
idx
=
-
1
;
for
(
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
{
if
(
wrtd_id_
eq
(
wrtd
->
rules
[
i
].
rule
.
conf
.
id
,
rep_cap_id
))
{
if
(
wrtd_id_
str_eq
(
&
wrtd
->
rules
[
i
].
rule
.
conf
.
id
,
rep_cap_id
))
{
return
wrtd_return_error
(
wrtd
,
WRTD_ERROR_RULE_EXISTS
,
"%s: The rule already exists"
,
__func__
);
}
if
(
idx
<
0
&&
wrtd_id_null
(
wrtd
->
rules
[
i
].
rule
.
conf
.
id
))
&&
wrtd_id_null
(
&
wrtd
->
rules
[
i
].
rule
.
conf
.
id
))
idx
=
i
;
}
if
(
idx
==
-
1
)
...
...
@@ -1588,7 +1589,7 @@ wrtd_status wrtd_add_rule(wrtd_dev *wrtd,
rule
=
&
wrtd
->
rules
[
idx
].
rule
;
/* That should be the default, but... */
memset
(
rule
,
0
,
sizeof
(
struct
wrtd_rule
));
wrtd_id_
copy
(
rule
->
conf
.
id
,
rep_cap_id
);
wrtd_id_
build
(
&
rule
->
conf
.
id
,
rep_cap_id
);
rule
->
conf
.
send_late
=
true
;
/* 5. Write-back. */
...
...
@@ -1754,12 +1755,12 @@ wrtd_status wrtd_get_rule_name(wrtd_dev *wrtd,
/* Search it. */
for
(
n
=
0
,
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
{
const
char
*
aid
=
wrtd
->
rules
[
i
].
rule
.
conf
.
id
;
const
union
wrtd_id
*
aid
=
&
wrtd
->
rules
[
i
].
rule
.
conf
.
id
;
if
(
wrtd_id_null
(
aid
))
continue
;
if
(
n
==
index
)
{
status
=
wrtd_id_copy_buf
(
wrtd
,
name
,
name_buffer_size
,
aid
,
__func__
);
(
wrtd
,
name
,
name_buffer_size
,
aid
->
c
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
return
WRTD_SUCCESS
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment