1018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn/*
2018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * Copyright (C) 2016 The Android Open Source Project
3018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn *
4018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * Licensed under the Apache License, Version 2.0 (the "License");
5018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * you may not use this file except in compliance with the License.
6018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * You may obtain a copy of the License at
7018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn *
8018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn *      http://www.apache.org/licenses/LICENSE-2.0
9018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn *
10018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * Unless required by applicable law or agreed to in writing, software
11018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * distributed under the License is distributed on an "AS IS" BASIS,
12018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * See the License for the specific language governing permissions and
14018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn * limitations under the License.
15018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn */
16018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
17018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn#ifndef _LIBLOG_CONFIG_READ_H__
18018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn#define _LIBLOG_CONFIG_READ_H__
19018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
20018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn#include <cutils/list.h>
21018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
22018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn#include "log_portability.h"
23018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
24018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn__BEGIN_DECLS
25018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
26018a96d03f0d452bf078084eedcd5693da42308dMark Salyzynextern LIBLOG_HIDDEN struct listnode __android_log_transport_read;
27018a96d03f0d452bf078084eedcd5693da42308dMark Salyzynextern LIBLOG_HIDDEN struct listnode __android_log_persist_read;
28018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
292ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define read_transport_for_each(transp, transports)                           \
302ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  for ((transp) = node_to_item((transports)->next,                            \
312ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                               struct android_log_transport_read, node);      \
322ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ((transp) != node_to_item((transports),                                \
332ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 struct android_log_transport_read, node)) && \
342ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ((transp) != node_to_item((transp)->node.next,                         \
352ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 struct android_log_transport_read, node));   \
362ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       (transp) = node_to_item((transp)->node.next,                           \
372ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                               struct android_log_transport_read, node))
382ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn
392ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn#define read_transport_for_each_safe(transp, n, transports)                   \
402ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn  for ((transp) = node_to_item((transports)->next,                            \
412ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                               struct android_log_transport_read, node),      \
422ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn      (n) = (transp)->node.next;                                              \
432ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ((transp) != node_to_item((transports),                                \
442ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn                                 struct android_log_transport_read, node)) && \
452ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       ((transp) !=                                                           \
462ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn        node_to_item((n), struct android_log_transport_read, node));          \
472ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn       (transp) = node_to_item((n), struct android_log_transport_read, node), \
482ed51d708eda64516ec79ac6397f690de38f0075Mark Salyzyn      (n) = (transp)->node.next)
49018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
50018a96d03f0d452bf078084eedcd5693da42308dMark SalyzynLIBLOG_HIDDEN void __android_log_config_read();
5196432fc6655fe035d0e66e593ffaf58856e1a826Mark SalyzynLIBLOG_HIDDEN void __android_log_config_read_close();
52018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
53018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn__END_DECLS
54018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn
55018a96d03f0d452bf078084eedcd5693da42308dMark Salyzyn#endif /* _LIBLOG_CONFIG_READ_H__ */
56