unicode_gif.h (1936B)
1 // Copyright 2018 Google Inc. All Rights Reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the COPYING file in the root of the source 5 // tree. An additional intellectual property rights grant can be found 6 // in the file PATENTS. All contributing project authors may 7 // be found in the AUTHORS file in the root of the source tree. 8 // ----------------------------------------------------------------------------- 9 // 10 // giflib doesn't have a Unicode DGifOpenFileName(). Let's make one. 11 // 12 // Author: Yannis Guyon (yguyon@google.com) 13 14 #ifndef WEBP_EXAMPLES_UNICODE_GIF_H_ 15 #define WEBP_EXAMPLES_UNICODE_GIF_H_ 16 17 #include "./unicode.h" 18 #ifdef HAVE_CONFIG_H 19 #include "webp/config.h" // For WEBP_HAVE_GIF 20 #endif 21 22 #if defined(WEBP_HAVE_GIF) 23 24 #ifdef _WIN32 25 #include <fcntl.h> // Not standard, needed for _topen and flags. 26 #include <io.h> 27 #endif 28 29 #include <gif_lib.h> 30 #include <string.h> 31 #include "./gifdec.h" 32 33 #if !defined(STDIN_FILENO) 34 #define STDIN_FILENO 0 35 #endif 36 37 static GifFileType* DGifOpenFileUnicode(const W_CHAR* file_name, int* error) { 38 if (!WSTRCMP(file_name, "-")) { 39 #if LOCAL_GIF_PREREQ(5, 0) 40 return DGifOpenFileHandle(STDIN_FILENO, error); 41 #else 42 (void)error; 43 return DGifOpenFileHandle(STDIN_FILENO); 44 #endif 45 } 46 47 #if defined(_WIN32) && defined(_UNICODE) 48 { 49 int file_handle = _wopen(file_name, _O_RDONLY | _O_BINARY); 50 if (file_handle == -1) { 51 if (error != NULL) *error = D_GIF_ERR_OPEN_FAILED; 52 return NULL; 53 } 54 55 #if LOCAL_GIF_PREREQ(5, 0) 56 return DGifOpenFileHandle(file_handle, error); 57 #else 58 return DGifOpenFileHandle(file_handle); 59 #endif 60 } 61 62 #else 63 64 #if LOCAL_GIF_PREREQ(5, 0) 65 return DGifOpenFileName(file_name, error); 66 #else 67 return DGifOpenFileName(file_name); 68 #endif 69 70 #endif // defined(_WIN32) && defined(_UNICODE) 71 // DGifCloseFile() is called later. 72 } 73 74 #endif // defined(WEBP_HAVE_GIF) 75 76 #endif // WEBP_EXAMPLES_UNICODE_GIF_H_