| Index: third_party/fontconfig/windows/dirent.c | 
| diff --git a/third_party/fontconfig/windows/dirent.c b/third_party/fontconfig/windows/dirent.c | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..693c471225e2f07016d3a13604af0330b09ef56c | 
| --- /dev/null | 
| +++ b/third_party/fontconfig/windows/dirent.c | 
| @@ -0,0 +1,145 @@ | 
| +/* | 
| + | 
| +    Implementation of POSIX directory browsing functions and types for Win32. | 
| + | 
| +    Author:  Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) | 
| +    History: Created March 1997. Updated June 2003. | 
| +    Rights:  See end of file. | 
| + | 
| +*/ | 
| + | 
| +#include <dirent.h> | 
| +#include <errno.h> | 
| +#include <io.h> /* _findfirst and _findnext set errno iff they return -1 */ | 
| +#include <stdlib.h> | 
| +#include <string.h> | 
| + | 
| +#ifdef __cplusplus | 
| +extern "C" | 
| +{ | 
| +#endif | 
| + | 
| +struct DIR | 
| +{ | 
| +    long                handle; /* -1 for failed rewind */ | 
| +    struct _finddata_t  info; | 
| +    struct dirent       result; /* d_name null iff first time */ | 
| +    char                *name;  /* null-terminated char string */ | 
| +}; | 
| + | 
| +DIR *opendir(const char *name) | 
| +{ | 
| +    DIR *dir = 0; | 
| + | 
| +    if(name && name[0]) | 
| +    { | 
| +        size_t base_length = strlen(name); | 
| +        const char *all = /* search pattern must end with suitable wildcard */ | 
| +            strchr("/\\", name[base_length - 1]) ? "*" : "/*"; | 
| + | 
| +        if((dir = (DIR *) malloc(sizeof *dir)) != 0 && | 
| +           (dir->name = (char *) malloc(base_length + strlen(all) + 1)) != 0) | 
| +        { | 
| +            strcat(strcpy(dir->name, name), all); | 
| + | 
| +            if((dir->handle = (long) _findfirst(dir->name, &dir->info)) != -1) | 
| +            { | 
| +                dir->result.d_name = 0; | 
| +            } | 
| +            else /* rollback */ | 
| +            { | 
| +                free(dir->name); | 
| +                free(dir); | 
| +                dir = 0; | 
| +            } | 
| +        } | 
| +        else /* rollback */ | 
| +        { | 
| +            free(dir); | 
| +            dir   = 0; | 
| +            errno = ENOMEM; | 
| +        } | 
| +    } | 
| +    else | 
| +    { | 
| +        errno = EINVAL; | 
| +    } | 
| + | 
| +    return dir; | 
| +} | 
| + | 
| +int closedir(DIR *dir) | 
| +{ | 
| +    int result = -1; | 
| + | 
| +    if(dir) | 
| +    { | 
| +        if(dir->handle != -1) | 
| +        { | 
| +            result = _findclose(dir->handle); | 
| +        } | 
| + | 
| +        free(dir->name); | 
| +        free(dir); | 
| +    } | 
| + | 
| +    if(result == -1) /* map all errors to EBADF */ | 
| +    { | 
| +        errno = EBADF; | 
| +    } | 
| + | 
| +    return result; | 
| +} | 
| + | 
| +struct dirent *readdir(DIR *dir) | 
| +{ | 
| +    struct dirent *result = 0; | 
| + | 
| +    if(dir && dir->handle != -1) | 
| +    { | 
| +        if(!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) | 
| +        { | 
| +            result         = &dir->result; | 
| +            result->d_name = dir->info.name; | 
| +        } | 
| +    } | 
| +    else | 
| +    { | 
| +        errno = EBADF; | 
| +    } | 
| + | 
| +    return result; | 
| +} | 
| + | 
| +void rewinddir(DIR *dir) | 
| +{ | 
| +    if(dir && dir->handle != -1) | 
| +    { | 
| +        _findclose(dir->handle); | 
| +        dir->handle = (long) _findfirst(dir->name, &dir->info); | 
| +        dir->result.d_name = 0; | 
| +    } | 
| +    else | 
| +    { | 
| +        errno = EBADF; | 
| +    } | 
| +} | 
| + | 
| +#ifdef __cplusplus | 
| +} | 
| +#endif | 
| + | 
| +/* | 
| + | 
| +    Copyright Kevlin Henney, 1997, 2003. All rights reserved. | 
| + | 
| +    Permission to use, copy, modify, and distribute this software and its | 
| +    documentation for any purpose is hereby granted without fee, provided | 
| +    that this copyright and permissions notice appear in all copies and | 
| +    derivatives. | 
| + | 
| +    This software is supplied "as is" without express or implied warranty. | 
| + | 
| +    But that said, if there are any problems please get in touch. | 
| + | 
| +*/ | 
|  |