1 2/* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10// 11#ifndef SkOSFile_DEFINED 12#define SkOSFile_DEFINED 13 14#include "SkString.h" 15 16#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID) 17 #include <dirent.h> 18#endif 19 20struct SkFILE; 21 22enum SkFILE_Flags { 23 kRead_SkFILE_Flag = 0x01, 24 kWrite_SkFILE_Flag = 0x02 25}; 26 27SkFILE* sk_fopen(const char path[], SkFILE_Flags); 28void sk_fclose(SkFILE*); 29 30size_t sk_fgetsize(SkFILE*); 31/** Return true if the file could seek back to the beginning 32*/ 33bool sk_frewind(SkFILE*); 34 35size_t sk_fread(void* buffer, size_t byteCount, SkFILE*); 36size_t sk_fwrite(const void* buffer, size_t byteCount, SkFILE*); 37void sk_fflush(SkFILE*); 38 39int sk_fseek( SkFILE*, size_t, int ); 40size_t sk_ftell( SkFILE* ); 41 42class SkOSFile { 43public: 44 class Iter { 45 public: 46 Iter(); 47 Iter(const char path[], const char suffix[] = NULL); 48 ~Iter(); 49 50 void reset(const char path[], const char suffix[] = NULL); 51 /** If getDir is true, only returns directories. 52 Results are undefined if true and false calls are 53 interleaved on a single iterator. 54 */ 55 bool next(SkString* name, bool getDir = false); 56 57 private: 58#ifdef SK_BUILD_FOR_WIN 59 HANDLE fHandle; 60 uint16_t* fPath16; 61#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID) 62 DIR* fDIR; 63 SkString fPath, fSuffix; 64#endif 65 }; 66}; 67 68class SkUTF16_Str { 69public: 70 SkUTF16_Str(const char src[]); 71 ~SkUTF16_Str() 72 { 73 sk_free(fStr); 74 } 75 const uint16_t* get() const { return fStr; } 76 77private: 78 uint16_t* fStr; 79}; 80 81#endif 82 83