| 1 | /* Definitions for locale archive handling. | 
|---|
| 2 | Copyright (C) 2002-2020 Free Software Foundation, Inc. | 
|---|
| 3 | This file is part of the GNU C Library. | 
|---|
| 4 |  | 
|---|
| 5 | The GNU C Library is free software; you can redistribute it and/or | 
|---|
| 6 | modify it under the terms of the GNU Lesser General Public | 
|---|
| 7 | License as published by the Free Software Foundation; either | 
|---|
| 8 | version 2.1 of the License, or (at your option) any later version. | 
|---|
| 9 |  | 
|---|
| 10 | The GNU C Library is distributed in the hope that it will be useful, | 
|---|
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|---|
| 13 | Lesser General Public License for more details. | 
|---|
| 14 |  | 
|---|
| 15 | You should have received a copy of the GNU Lesser General Public | 
|---|
| 16 | License along with the GNU C Library; if not, see | 
|---|
| 17 | <https://www.gnu.org/licenses/>.  */ | 
|---|
| 18 |  | 
|---|
| 19 | #ifndef _LOCARCHIVE_H | 
|---|
| 20 | #define _LOCARCHIVE_H 1 | 
|---|
| 21 |  | 
|---|
| 22 | #include <stdint.h> | 
|---|
| 23 |  | 
|---|
| 24 |  | 
|---|
| 25 | #define AR_MAGIC 0xde020109 | 
|---|
| 26 |  | 
|---|
| 27 | struct locarhead | 
|---|
| 28 | { | 
|---|
| 29 | uint32_t magic; | 
|---|
| 30 | /* Serial number.  */ | 
|---|
| 31 | uint32_t serial; | 
|---|
| 32 | /* Name hash table.  */ | 
|---|
| 33 | uint32_t namehash_offset; | 
|---|
| 34 | uint32_t namehash_used; | 
|---|
| 35 | uint32_t namehash_size; | 
|---|
| 36 | /* String table.  */ | 
|---|
| 37 | uint32_t string_offset; | 
|---|
| 38 | uint32_t string_used; | 
|---|
| 39 | uint32_t string_size; | 
|---|
| 40 | /* Table with locale records.  */ | 
|---|
| 41 | uint32_t locrectab_offset; | 
|---|
| 42 | uint32_t locrectab_used; | 
|---|
| 43 | uint32_t locrectab_size; | 
|---|
| 44 | /* MD5 sum hash table.  */ | 
|---|
| 45 | uint32_t sumhash_offset; | 
|---|
| 46 | uint32_t sumhash_used; | 
|---|
| 47 | uint32_t sumhash_size; | 
|---|
| 48 | }; | 
|---|
| 49 |  | 
|---|
| 50 |  | 
|---|
| 51 | struct namehashent | 
|---|
| 52 | { | 
|---|
| 53 | /* Hash value of the name.  */ | 
|---|
| 54 | uint32_t hashval; | 
|---|
| 55 | /* Offset of the name in the string table.  */ | 
|---|
| 56 | uint32_t name_offset; | 
|---|
| 57 | /* Offset of the locale record.  */ | 
|---|
| 58 | uint32_t locrec_offset; | 
|---|
| 59 | }; | 
|---|
| 60 |  | 
|---|
| 61 |  | 
|---|
| 62 | struct sumhashent | 
|---|
| 63 | { | 
|---|
| 64 | /* MD5 sum.  */ | 
|---|
| 65 | char sum[16]; | 
|---|
| 66 | /* Offset of the file in the archive.  */ | 
|---|
| 67 | uint32_t file_offset; | 
|---|
| 68 | }; | 
|---|
| 69 |  | 
|---|
| 70 | struct locrecent | 
|---|
| 71 | { | 
|---|
| 72 | uint32_t refs;		/* # of namehashent records that point here */ | 
|---|
| 73 | struct | 
|---|
| 74 | { | 
|---|
| 75 | uint32_t offset; | 
|---|
| 76 | uint32_t len; | 
|---|
| 77 | } record[__LC_LAST]; | 
|---|
| 78 | }; | 
|---|
| 79 |  | 
|---|
| 80 |  | 
|---|
| 81 | struct locarhandle | 
|---|
| 82 | { | 
|---|
| 83 | /* Full path to the locale archive file.  */ | 
|---|
| 84 | const char *fname; | 
|---|
| 85 | int fd; | 
|---|
| 86 | void *addr; | 
|---|
| 87 | size_t mmaped; | 
|---|
| 88 | size_t reserved; | 
|---|
| 89 | /* If this mmap required adjustment (such as re-aligning), then this is the | 
|---|
| 90 | real address that was returned from mmap and thus should be passed to the | 
|---|
| 91 | munmap call.  The addr field above is the first usable address.  */ | 
|---|
| 92 | void *mmap_base; | 
|---|
| 93 | /* Same as above for mmap_base vs addr, but this is the real length of the | 
|---|
| 94 | map rather than the usable (which is what reserved represents).  */ | 
|---|
| 95 | size_t mmap_len; | 
|---|
| 96 | }; | 
|---|
| 97 |  | 
|---|
| 98 |  | 
|---|
| 99 | /* In memory data for the locales with their checksums.  */ | 
|---|
| 100 | typedef struct locale_category_data | 
|---|
| 101 | { | 
|---|
| 102 | off64_t size; | 
|---|
| 103 | void *addr; | 
|---|
| 104 | char sum[16]; | 
|---|
| 105 | } locale_data_t[__LC_LAST]; | 
|---|
| 106 |  | 
|---|
| 107 | #endif	/* locarchive.h */ | 
|---|
| 108 |  | 
|---|