1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 2008 The Android Open Source Project 3*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker * 5*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*8d67ca89SAndroid Build Coastguard Worker * are met: 8*8d67ca89SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright 9*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright 11*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in 12*8d67ca89SAndroid Build Coastguard Worker * the documentation and/or other materials provided with the 13*8d67ca89SAndroid Build Coastguard Worker * distribution. 14*8d67ca89SAndroid Build Coastguard Worker * 15*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16*8d67ca89SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17*8d67ca89SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18*8d67ca89SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19*8d67ca89SAndroid Build Coastguard Worker * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20*8d67ca89SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21*8d67ca89SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22*8d67ca89SAndroid Build Coastguard Worker * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23*8d67ca89SAndroid Build Coastguard Worker * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24*8d67ca89SAndroid Build Coastguard Worker * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25*8d67ca89SAndroid Build Coastguard Worker * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 27*8d67ca89SAndroid Build Coastguard Worker */ 28*8d67ca89SAndroid Build Coastguard Worker 29*8d67ca89SAndroid Build Coastguard Worker #pragma once 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker /** 32*8d67ca89SAndroid Build Coastguard Worker * @file dirent.h 33*8d67ca89SAndroid Build Coastguard Worker * @brief Directory entry iteration. 34*8d67ca89SAndroid Build Coastguard Worker */ 35*8d67ca89SAndroid Build Coastguard Worker 36*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 37*8d67ca89SAndroid Build Coastguard Worker 38*8d67ca89SAndroid Build Coastguard Worker #include <stdint.h> 39*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h> 40*8d67ca89SAndroid Build Coastguard Worker 41*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS 42*8d67ca89SAndroid Build Coastguard Worker 43*8d67ca89SAndroid Build Coastguard Worker /** d_type value when the type is not known. */ 44*8d67ca89SAndroid Build Coastguard Worker #define DT_UNKNOWN 0 45*8d67ca89SAndroid Build Coastguard Worker /** d_type value for a FIFO. */ 46*8d67ca89SAndroid Build Coastguard Worker #define DT_FIFO 1 47*8d67ca89SAndroid Build Coastguard Worker /** d_type value for a character device. */ 48*8d67ca89SAndroid Build Coastguard Worker #define DT_CHR 2 49*8d67ca89SAndroid Build Coastguard Worker /** d_type value for a directory. */ 50*8d67ca89SAndroid Build Coastguard Worker #define DT_DIR 4 51*8d67ca89SAndroid Build Coastguard Worker /** d_type value for a block device. */ 52*8d67ca89SAndroid Build Coastguard Worker #define DT_BLK 6 53*8d67ca89SAndroid Build Coastguard Worker /** d_type value for a regular file. */ 54*8d67ca89SAndroid Build Coastguard Worker #define DT_REG 8 55*8d67ca89SAndroid Build Coastguard Worker /** d_type value for a symbolic link. */ 56*8d67ca89SAndroid Build Coastguard Worker #define DT_LNK 10 57*8d67ca89SAndroid Build Coastguard Worker /** d_type value for a socket. */ 58*8d67ca89SAndroid Build Coastguard Worker #define DT_SOCK 12 59*8d67ca89SAndroid Build Coastguard Worker #define DT_WHT 14 60*8d67ca89SAndroid Build Coastguard Worker 61*8d67ca89SAndroid Build Coastguard Worker #if defined(__LP64__) 62*8d67ca89SAndroid Build Coastguard Worker #define __DIRENT64_INO_T ino_t 63*8d67ca89SAndroid Build Coastguard Worker #else 64*8d67ca89SAndroid Build Coastguard Worker #define __DIRENT64_INO_T uint64_t /* Historical accident. */ 65*8d67ca89SAndroid Build Coastguard Worker #endif 66*8d67ca89SAndroid Build Coastguard Worker 67*8d67ca89SAndroid Build Coastguard Worker #define __DIRENT64_BODY \ 68*8d67ca89SAndroid Build Coastguard Worker __DIRENT64_INO_T d_ino; \ 69*8d67ca89SAndroid Build Coastguard Worker off64_t d_off; \ 70*8d67ca89SAndroid Build Coastguard Worker unsigned short d_reclen; \ 71*8d67ca89SAndroid Build Coastguard Worker unsigned char d_type; \ 72*8d67ca89SAndroid Build Coastguard Worker char d_name[256]; \ 73*8d67ca89SAndroid Build Coastguard Worker 74*8d67ca89SAndroid Build Coastguard Worker /** The structure returned by readdir(). Identical to dirent64 on Android. */ 75*8d67ca89SAndroid Build Coastguard Worker struct dirent { __DIRENT64_BODY }; 76*8d67ca89SAndroid Build Coastguard Worker /** The structure returned by readdir64(). Identical to dirent on Android. */ 77*8d67ca89SAndroid Build Coastguard Worker struct dirent64 { __DIRENT64_BODY }; 78*8d67ca89SAndroid Build Coastguard Worker 79*8d67ca89SAndroid Build Coastguard Worker #undef __DIRENT64_BODY 80*8d67ca89SAndroid Build Coastguard Worker #undef __DIRENT64_INO_T 81*8d67ca89SAndroid Build Coastguard Worker 82*8d67ca89SAndroid Build Coastguard Worker /* glibc compatibility. */ 83*8d67ca89SAndroid Build Coastguard Worker #undef _DIRENT_HAVE_D_NAMLEN /* Linux doesn't have a d_namlen field. */ 84*8d67ca89SAndroid Build Coastguard Worker #define _DIRENT_HAVE_D_RECLEN 85*8d67ca89SAndroid Build Coastguard Worker #define _DIRENT_HAVE_D_OFF 86*8d67ca89SAndroid Build Coastguard Worker #define _DIRENT_HAVE_D_TYPE 87*8d67ca89SAndroid Build Coastguard Worker 88*8d67ca89SAndroid Build Coastguard Worker #define d_fileno d_ino 89*8d67ca89SAndroid Build Coastguard Worker 90*8d67ca89SAndroid Build Coastguard Worker /** The structure returned by opendir()/fopendir(). */ 91*8d67ca89SAndroid Build Coastguard Worker typedef struct DIR DIR; 92*8d67ca89SAndroid Build Coastguard Worker 93*8d67ca89SAndroid Build Coastguard Worker /** 94*8d67ca89SAndroid Build Coastguard Worker * [opendir(3)](https://man7.org/linux/man-pages/man3/opendir.3.html) 95*8d67ca89SAndroid Build Coastguard Worker * opens a directory stream for the directory at `__path`. 96*8d67ca89SAndroid Build Coastguard Worker * 97*8d67ca89SAndroid Build Coastguard Worker * Returns null and sets `errno` on failure. 98*8d67ca89SAndroid Build Coastguard Worker */ 99*8d67ca89SAndroid Build Coastguard Worker DIR* _Nullable opendir(const char* _Nonnull __path); 100*8d67ca89SAndroid Build Coastguard Worker 101*8d67ca89SAndroid Build Coastguard Worker /** 102*8d67ca89SAndroid Build Coastguard Worker * [fopendir(3)](https://man7.org/linux/man-pages/man3/opendir.3.html) 103*8d67ca89SAndroid Build Coastguard Worker * opens a directory stream for the directory at `__dir_fd`. 104*8d67ca89SAndroid Build Coastguard Worker * 105*8d67ca89SAndroid Build Coastguard Worker * Returns null and sets `errno` on failure. 106*8d67ca89SAndroid Build Coastguard Worker */ 107*8d67ca89SAndroid Build Coastguard Worker DIR* _Nullable fdopendir(int __dir_fd); 108*8d67ca89SAndroid Build Coastguard Worker 109*8d67ca89SAndroid Build Coastguard Worker /** 110*8d67ca89SAndroid Build Coastguard Worker * [readdir(3)](https://man7.org/linux/man-pages/man3/readdir.3.html) 111*8d67ca89SAndroid Build Coastguard Worker * returns the next directory entry in the given directory. 112*8d67ca89SAndroid Build Coastguard Worker * 113*8d67ca89SAndroid Build Coastguard Worker * Returns a pointer to a directory entry on success, 114*8d67ca89SAndroid Build Coastguard Worker * or returns null and leaves `errno` unchanged at the end of the directory, 115*8d67ca89SAndroid Build Coastguard Worker * or returns null and sets `errno` on failure. 116*8d67ca89SAndroid Build Coastguard Worker */ 117*8d67ca89SAndroid Build Coastguard Worker struct dirent* _Nullable readdir(DIR* _Nonnull __dir); 118*8d67ca89SAndroid Build Coastguard Worker 119*8d67ca89SAndroid Build Coastguard Worker /** 120*8d67ca89SAndroid Build Coastguard Worker * [readdir64(3)](https://man7.org/linux/man-pages/man3/readdir.3.html) 121*8d67ca89SAndroid Build Coastguard Worker * returns the next directory entry in the given directory. 122*8d67ca89SAndroid Build Coastguard Worker * 123*8d67ca89SAndroid Build Coastguard Worker * Returns a pointer to a directory entry on success, 124*8d67ca89SAndroid Build Coastguard Worker * or returns null and leaves `errno` unchanged at the end of the directory, 125*8d67ca89SAndroid Build Coastguard Worker * or returns null and sets `errno` on failure. 126*8d67ca89SAndroid Build Coastguard Worker */ 127*8d67ca89SAndroid Build Coastguard Worker struct dirent64* _Nullable readdir64(DIR* _Nonnull __dir); 128*8d67ca89SAndroid Build Coastguard Worker 129*8d67ca89SAndroid Build Coastguard Worker int readdir_r(DIR* _Nonnull __dir, struct dirent* _Nonnull __entry, struct dirent* _Nullable * _Nonnull __buffer) __attribute__((__deprecated__("readdir_r is deprecated; use readdir instead"))); 130*8d67ca89SAndroid Build Coastguard Worker int readdir64_r(DIR* _Nonnull __dir, struct dirent64* _Nonnull __entry, struct dirent64* _Nullable * _Nonnull __buffer) __attribute__((__deprecated__("readdir64_r is deprecated; use readdir64 instead"))); 131*8d67ca89SAndroid Build Coastguard Worker 132*8d67ca89SAndroid Build Coastguard Worker /** 133*8d67ca89SAndroid Build Coastguard Worker * [closedir(3)](https://man7.org/linux/man-pages/man3/closedir.3.html) 134*8d67ca89SAndroid Build Coastguard Worker * closes a directory stream. 135*8d67ca89SAndroid Build Coastguard Worker * 136*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success and returns -1 and sets `errno` on failure. 137*8d67ca89SAndroid Build Coastguard Worker */ 138*8d67ca89SAndroid Build Coastguard Worker int closedir(DIR* _Nonnull __dir); 139*8d67ca89SAndroid Build Coastguard Worker 140*8d67ca89SAndroid Build Coastguard Worker /** 141*8d67ca89SAndroid Build Coastguard Worker * [rewinddir(3)](https://man7.org/linux/man-pages/man3/rewinddir.3.html) 142*8d67ca89SAndroid Build Coastguard Worker * rewinds a directory stream to the first entry. 143*8d67ca89SAndroid Build Coastguard Worker */ 144*8d67ca89SAndroid Build Coastguard Worker void rewinddir(DIR* _Nonnull __dir); 145*8d67ca89SAndroid Build Coastguard Worker 146*8d67ca89SAndroid Build Coastguard Worker /** 147*8d67ca89SAndroid Build Coastguard Worker * [seekdir(3)](https://man7.org/linux/man-pages/man3/seekdir.3.html) 148*8d67ca89SAndroid Build Coastguard Worker * seeks a directory stream to the given entry, which must be a value returned 149*8d67ca89SAndroid Build Coastguard Worker * by telldir(). 150*8d67ca89SAndroid Build Coastguard Worker * 151*8d67ca89SAndroid Build Coastguard Worker * Available since API level 23. 152*8d67ca89SAndroid Build Coastguard Worker */ 153*8d67ca89SAndroid Build Coastguard Worker 154*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23) 155*8d67ca89SAndroid Build Coastguard Worker void seekdir(DIR* _Nonnull __dir, long __location) __INTRODUCED_IN(23); 156*8d67ca89SAndroid Build Coastguard Worker 157*8d67ca89SAndroid Build Coastguard Worker /** 158*8d67ca89SAndroid Build Coastguard Worker * [telldir(3)](https://man7.org/linux/man-pages/man3/telldir.3.html) 159*8d67ca89SAndroid Build Coastguard Worker * returns a value representing the current position in the directory 160*8d67ca89SAndroid Build Coastguard Worker * for use with seekdir(). 161*8d67ca89SAndroid Build Coastguard Worker * 162*8d67ca89SAndroid Build Coastguard Worker * Returns the current position on success and returns -1 and sets `errno` on failure. 163*8d67ca89SAndroid Build Coastguard Worker * 164*8d67ca89SAndroid Build Coastguard Worker * Available since API level 23. 165*8d67ca89SAndroid Build Coastguard Worker */ 166*8d67ca89SAndroid Build Coastguard Worker long telldir(DIR* _Nonnull __dir) __INTRODUCED_IN(23); 167*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 168*8d67ca89SAndroid Build Coastguard Worker 169*8d67ca89SAndroid Build Coastguard Worker 170*8d67ca89SAndroid Build Coastguard Worker /** 171*8d67ca89SAndroid Build Coastguard Worker * [dirfd(3)](https://man7.org/linux/man-pages/man3/dirfd.3.html) 172*8d67ca89SAndroid Build Coastguard Worker * returns the file descriptor backing the given directory stream. 173*8d67ca89SAndroid Build Coastguard Worker * 174*8d67ca89SAndroid Build Coastguard Worker * Returns a file descriptor on success and returns -1 and sets `errno` on failure. 175*8d67ca89SAndroid Build Coastguard Worker */ 176*8d67ca89SAndroid Build Coastguard Worker int dirfd(DIR* _Nonnull __dir); 177*8d67ca89SAndroid Build Coastguard Worker 178*8d67ca89SAndroid Build Coastguard Worker /** 179*8d67ca89SAndroid Build Coastguard Worker * [alphasort](https://man7.org/linux/man-pages/man3/alphasort.3.html) is a 180*8d67ca89SAndroid Build Coastguard Worker * comparator for use with scandir() that uses strcoll(). 181*8d67ca89SAndroid Build Coastguard Worker */ 182*8d67ca89SAndroid Build Coastguard Worker int alphasort(const struct dirent* _Nonnull * _Nonnull __lhs, const struct dirent* _Nonnull * _Nonnull __rhs); 183*8d67ca89SAndroid Build Coastguard Worker 184*8d67ca89SAndroid Build Coastguard Worker /** 185*8d67ca89SAndroid Build Coastguard Worker * [alphasort64](https://man7.org/linux/man-pages/man3/alphasort.3.html) is a 186*8d67ca89SAndroid Build Coastguard Worker * comparator for use with scandir64() that uses strcmp(). 187*8d67ca89SAndroid Build Coastguard Worker */ 188*8d67ca89SAndroid Build Coastguard Worker int alphasort64(const struct dirent64* _Nonnull * _Nonnull __lhs, const struct dirent64* _Nonnull * _Nonnull __rhs); 189*8d67ca89SAndroid Build Coastguard Worker 190*8d67ca89SAndroid Build Coastguard Worker /** 191*8d67ca89SAndroid Build Coastguard Worker * [scandir(3)](https://man7.org/linux/man-pages/man3/scandir.3.html) 192*8d67ca89SAndroid Build Coastguard Worker * scans all the directory `__path`, filtering entries with `__filter` and 193*8d67ca89SAndroid Build Coastguard Worker * sorting them with qsort() using the given `__comparator`, and storing them 194*8d67ca89SAndroid Build Coastguard Worker * into `__name_list`. Passing NULL as the filter accepts all entries. 195*8d67ca89SAndroid Build Coastguard Worker * Passing NULL as the comparator skips sorting. 196*8d67ca89SAndroid Build Coastguard Worker * 197*8d67ca89SAndroid Build Coastguard Worker * Returns the number of entries returned in the list on success, 198*8d67ca89SAndroid Build Coastguard Worker * and returns -1 and sets `errno` on failure. 199*8d67ca89SAndroid Build Coastguard Worker */ 200*8d67ca89SAndroid Build Coastguard Worker int scandir(const char* _Nonnull __path, struct dirent* _Nonnull * _Nonnull * _Nonnull __name_list, int (* _Nullable __filter)(const struct dirent* _Nonnull), int (* _Nullable __comparator)(const struct dirent* _Nonnull * _Nonnull, const struct dirent* _Nonnull * _Nonnull)); 201*8d67ca89SAndroid Build Coastguard Worker 202*8d67ca89SAndroid Build Coastguard Worker /** 203*8d67ca89SAndroid Build Coastguard Worker * [scandir64(3)](https://man7.org/linux/man-pages/man3/scandir.3.html) 204*8d67ca89SAndroid Build Coastguard Worker * scans all the directory `__path`, filtering entries with `__filter` and 205*8d67ca89SAndroid Build Coastguard Worker * sorting them with qsort() using the given `__comparator`, and storing them 206*8d67ca89SAndroid Build Coastguard Worker * into `__name_list`. Passing NULL as the filter accepts all entries. 207*8d67ca89SAndroid Build Coastguard Worker * Passing NULL as the comparator skips sorting. 208*8d67ca89SAndroid Build Coastguard Worker * 209*8d67ca89SAndroid Build Coastguard Worker * Returns the number of entries returned in the list on success, 210*8d67ca89SAndroid Build Coastguard Worker * and returns -1 and sets `errno` on failure. 211*8d67ca89SAndroid Build Coastguard Worker */ 212*8d67ca89SAndroid Build Coastguard Worker int scandir64(const char* _Nonnull __path, struct dirent64* _Nonnull * _Nonnull * _Nonnull __name_list, int (* _Nullable __filter)(const struct dirent64* _Nonnull), int (* _Nullable __comparator)(const struct dirent64* _Nonnull * _Nonnull, const struct dirent64* _Nonnull * _Nonnull)); 213*8d67ca89SAndroid Build Coastguard Worker 214*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_GNU) 215*8d67ca89SAndroid Build Coastguard Worker 216*8d67ca89SAndroid Build Coastguard Worker /** 217*8d67ca89SAndroid Build Coastguard Worker * [scandirat64(3)](https://man7.org/linux/man-pages/man3/scandirat.3.html) 218*8d67ca89SAndroid Build Coastguard Worker * scans all the directory referenced by the pair of `__dir_fd` and `__path`, 219*8d67ca89SAndroid Build Coastguard Worker * filtering entries with `__filter` and sorting them with qsort() using the 220*8d67ca89SAndroid Build Coastguard Worker * given `__comparator`, and storing them into `__name_list`. Passing NULL as 221*8d67ca89SAndroid Build Coastguard Worker * the filter accepts all entries. 222*8d67ca89SAndroid Build Coastguard Worker * Passing NULL as the comparator skips sorting. 223*8d67ca89SAndroid Build Coastguard Worker * 224*8d67ca89SAndroid Build Coastguard Worker * Returns the number of entries returned in the list on success, 225*8d67ca89SAndroid Build Coastguard Worker * and returns -1 and sets `errno` on failure. 226*8d67ca89SAndroid Build Coastguard Worker * 227*8d67ca89SAndroid Build Coastguard Worker * Available since API level 24. 228*8d67ca89SAndroid Build Coastguard Worker */ 229*8d67ca89SAndroid Build Coastguard Worker 230*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24) 231*8d67ca89SAndroid Build Coastguard Worker int scandirat64(int __dir_fd, const char* _Nonnull __path, struct dirent64* _Nonnull * _Nonnull * _Nonnull __name_list, int (* _Nullable __filter)(const struct dirent64* _Nonnull), int (* _Nullable __comparator)(const struct dirent64* _Nonnull * _Nonnull, const struct dirent64* _Nonnull * _Nonnull)) __INTRODUCED_IN(24); 232*8d67ca89SAndroid Build Coastguard Worker 233*8d67ca89SAndroid Build Coastguard Worker /** 234*8d67ca89SAndroid Build Coastguard Worker * [scandirat(3)](https://man7.org/linux/man-pages/man3/scandirat.3.html) 235*8d67ca89SAndroid Build Coastguard Worker * scans all the directory referenced by the pair of `__dir_fd` and `__path`, 236*8d67ca89SAndroid Build Coastguard Worker * filtering entries with `__filter` and sorting them with qsort() using the 237*8d67ca89SAndroid Build Coastguard Worker * given `__comparator`, and storing them into `__name_list`. Passing NULL as 238*8d67ca89SAndroid Build Coastguard Worker * the filter accepts all entries. 239*8d67ca89SAndroid Build Coastguard Worker * Passing NULL as the comparator skips sorting. 240*8d67ca89SAndroid Build Coastguard Worker * 241*8d67ca89SAndroid Build Coastguard Worker * Returns the number of entries returned in the list on success, 242*8d67ca89SAndroid Build Coastguard Worker * and returns -1 and sets `errno` on failure. 243*8d67ca89SAndroid Build Coastguard Worker * 244*8d67ca89SAndroid Build Coastguard Worker * Available since API level 24. 245*8d67ca89SAndroid Build Coastguard Worker */ 246*8d67ca89SAndroid Build Coastguard Worker int scandirat(int __dir_fd, const char* _Nonnull __path, struct dirent* _Nonnull * _Nonnull * _Nonnull __name_list, int (* _Nullable __filter)(const struct dirent* _Nonnull), int (* _Nullable __comparator)(const struct dirent* _Nonnull * _Nonnull, const struct dirent* _Nonnull * _Nonnull)) __INTRODUCED_IN(24); 247*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */ 248*8d67ca89SAndroid Build Coastguard Worker 249*8d67ca89SAndroid Build Coastguard Worker 250*8d67ca89SAndroid Build Coastguard Worker #endif 251*8d67ca89SAndroid Build Coastguard Worker 252*8d67ca89SAndroid Build Coastguard Worker __END_DECLS 253