11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkOSFile.h"
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_BUILD_FOR_WIN
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic uint16_t* concat_to_16(const char src[], const char suffix[])
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t  i, len = strlen(src);
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t  len2 = 3 + (suffix ? strlen(suffix) : 0);
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    uint16_t* dst = (uint16_t*)sk_malloc_throw((len + len2) * sizeof(uint16_t));
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (i = 0; i < len; i++)
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        dst[i] = src[i];
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (i > 0 && dst[i-1] != '/')
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        dst[i++] = '/';
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    dst[i++] = '*';
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (suffix)
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        while (*suffix)
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            dst[i++] = *suffix++;
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    dst[i] = 0;
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(i + 1 <= len + len2);
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return dst;
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkUTF16_Str::SkUTF16_Str(const char src[])
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t  len = strlen(src);
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    fStr = (uint16_t*)sk_malloc_throw((len + 1) * sizeof(uint16_t));
4187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    size_t i;
4287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    for (i = 0; i < len; i++)
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fStr[i] = src[i];
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    fStr[i] = 0;
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project////////////////////////////////////////////////////////////////////////////
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
4987b8e645865f9633f410c02252a0fd3feb18f09bDerek SollenbergerSkOSFile::Iter::Iter() : fHandle(0), fPath16(NULL)
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
5387b8e645865f9633f410c02252a0fd3feb18f09bDerek SollenbergerSkOSFile::Iter::Iter(const char path[], const char suffix[]) : fHandle(0), fPath16(NULL)
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    this->reset(path, suffix);
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkOSFile::Iter::~Iter()
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    sk_free(fPath16);
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (fHandle)
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        ::FindClose(fHandle);
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkOSFile::Iter::reset(const char path[], const char suffix[])
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (fHandle)
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        ::FindClose(fHandle);
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fHandle = 0;
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
7287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    if (NULL == path)
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        path = "";
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    sk_free(fPath16);
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    fPath16 = concat_to_16(path, suffix);
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool is_magic_dir(const uint16_t dir[])
800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // return true for "." and ".."
820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return dir[0] == '.' && (dir[1] == 0 || dir[1] == '.' && dir[2] == 0);
830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool get_the_file(HANDLE handle, SkString* name, WIN32_FIND_DATAW* dataPtr, bool getDir)
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    WIN32_FIND_DATAW    data;
880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
8987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    if (NULL == dataPtr)
900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (::FindNextFileW(handle, &data))
920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            dataPtr = &data;
930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        else
940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return false;
950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (;;)
980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (getDir)
1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        {
10187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger            if ((dataPtr->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && !is_magic_dir((uint16_t*)dataPtr->cFileName))
1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        else
1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        {
1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (!(dataPtr->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (!::FindNextFileW(handle, dataPtr))
1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return false;
1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // if we get here, we've found a file/dir
1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (name)
11487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        name->setUTF16((uint16_t*)dataPtr->cFileName);
1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return true;
1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkOSFile::Iter::next(SkString* name, bool getDir)
1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    WIN32_FIND_DATAW    data;
12187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    WIN32_FIND_DATAW*   dataPtr = NULL;
1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (fHandle == 0)   // our first time
1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
12587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        if (fPath16 == NULL || *fPath16 == 0)    // check for no path
1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return false;
1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
12887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        fHandle = ::FindFirstFileW((LPCWSTR)fPath16, &data);
1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (fHandle != 0 && fHandle != (HANDLE)~0)
1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            dataPtr = &data;
1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return fHandle != (HANDLE)~0 && get_the_file(fHandle, name, dataPtr, getDir);
1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID)
1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if 0
1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectOSStatus FSPathMakeRef (
1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project   const UInt8 * path,
1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project   FSRef * ref,
1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project   Boolean * isDirectory
1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project);
1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkOSFile::Iter::Iter() : fDIR(0)
1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkOSFile::Iter::Iter(const char path[], const char suffix[]) : fDIR(0)
1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    this->reset(path, suffix);
1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkOSFile::Iter::~Iter()
1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (fDIR)
1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        ::closedir(fDIR);
1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkOSFile::Iter::reset(const char path[], const char suffix[])
1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (fDIR)
1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        ::closedir(fDIR);
1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fDIR = 0;
1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    fPath.set(path);
1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (path)
1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fDIR = ::opendir(path);
1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fSuffix.set(suffix);
1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    else
1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fSuffix.reset();
1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// returns true if suffix is empty, or if str ends with suffix
1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic bool issuffixfor(const SkString& suffix, const char str[])
1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t  suffixLen = suffix.size();
1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t  strLen = strlen(str);
18340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return  strLen >= suffixLen &&
1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            memcmp(suffix.c_str(), str + strLen - suffixLen, suffixLen) == 0;
1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <sys/stat.h>
1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkOSFile::Iter::next(SkString* name, bool getDir)
1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (fDIR)
1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    {
1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        dirent* entry;
1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        while ((entry = ::readdir(fDIR)) != NULL)
1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        {
1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            struct stat s;
1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkString    str(fPath);
2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (!str.endsWith("/") && !str.endsWith("\\"))
2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                str.append("/");
2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            str.append(entry->d_name);
2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (0 == stat(str.c_str(), &s))
2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            {
2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                if (getDir)
2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                {
2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                    if (s.st_mode & S_IFDIR)
2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                        break;
2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                }
2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                else
2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                {
2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                    if (!(s.st_mode & S_IFDIR) && issuffixfor(fSuffix, entry->d_name))
2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                        break;
2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                }
2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            }
2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (entry)  // we broke out with a file
2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        {
2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (name)
2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                name->set(entry->d_name);
2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return true;
2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return false;
2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
231