1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 2001 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _SUN_MSGFMT_H 28 #define _SUN_MSGFMT_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #include <string.h> 33 #include <locale.h> 34 #include <stdio.h> 35 #include <wchar.h> 36 #include <ctype.h> 37 #include <sys/types.h> 38 #include <sys/param.h> 39 #include <sys/stat.h> 40 #include <sys/mman.h> 41 #include <signal.h> 42 #include <malloc.h> 43 #include <libintl.h> 44 #include <stdlib.h> 45 #include <fcntl.h> 46 #include <unistd.h> 47 #include "../../lib/libc/inc/msgfmt.h" 48 #include "common.h" 49 50 #ifdef __cplusplus 51 extern "C" { 52 #endif 53 54 #define DOMAIN_TOKEN L"domain" /* domain token in po file */ 55 #define DOMAIN_LEN 6 56 #define MSGID_TOKEN L"msgid" /* msg id token in po file */ 57 #define MSGID_LEN 5 58 #define MSGSTR_TOKEN L"msgstr" /* target str token in po file */ 59 #define MSGSTR_LEN 6 60 61 #ifdef DEBUG_MMAP 62 #define MAX_VALUE_LEN 3 /* size of msg id and target str */ 63 #define LINE_SIZE 1 64 #else 65 #define MAX_VALUE_LEN 512 /* size of msg id and target str */ 66 #define LINE_SIZE 512 67 #endif 68 69 /* 70 * check if the next character is possible valid character. 71 */ 72 #define CK_NXT_CH(a, l) \ 73 ((a[(l) - 1] == L' ') || (a[(l) - 1] == L'\t') || \ 74 (a[(l) - 1] == L'\n') || (a[(l) - 1] == L'\0')) 75 76 struct msg_chain { 77 char *msgid; /* msg id string */ 78 char *msgstr; /* msg target string */ 79 int msgid_offset; /* msg id offset in mo file */ 80 int msgstr_offset; /* msg target string offset in mo file */ 81 struct msg_chain *next; /* next node */ 82 }; 83 84 struct domain_struct { 85 char *domain; /* domain name */ 86 struct msg_chain *first_elem; /* head of msg link list */ 87 struct msg_chain *current_elem; /* most recently used msg */ 88 struct domain_struct *next; /* next domain node */ 89 }; 90 91 #define ERR_EXEC_FAILED \ 92 "failed to execute %s.\n" 93 94 #define ERR_USAGE \ 95 "Usage: msgfmt [-D dir | --directory=dir] [-f | --use-fuzzy]\n" \ 96 " [-g] [-o outfile | --output-file=outfile]\n" \ 97 " [-s] [--strict] [-v] [--verbose] files ...\n" 98 99 #define ERR_GNU_ON_SUN \ 100 "-g and -s are mutually exclusive.\n" 101 102 #define ERR_STAT_FAILED \ 103 "stat failed for %s.\n" 104 105 #define ERR_MMAP_FAILED \ 106 "mmap failed for %s.\n" 107 108 #define ERR_MUNMAP_FAILED \ 109 "munmap failed for %s.\n" 110 111 #define ERR_NOSPC \ 112 "Error, No space after directive at line number %d.\n" 113 114 #define ERR_EXITING \ 115 "Exiting...\n" 116 117 #define WARN_NO_MSGSTR \ 118 "Consecutive MSGID tokens " \ 119 "encountered at line number: %d, ignored.\n" 120 121 #define WARN_NO_MSGID \ 122 "Consecutive MSGSTR tokens " \ 123 "encountered at line number: %d, ignored.\n" 124 125 #define WARN_SYNTAX_ERR \ 126 "Syntax at line number: %d, " \ 127 "line ignored\n" 128 129 #define WARN_MISSING_QUOTE \ 130 "Syntax at line number: %d, " \ 131 "Missing \", ignored\n" 132 133 #define WARN_MISSING_QUOTE_AT_EOL \ 134 "Syntax at line number: %d, " \ 135 "Missing \" at EOL, ignored\n" 136 137 #define WARN_INVALID_STRING \ 138 "the string after closing \" " \ 139 "is ignored at line number %d.\n" 140 141 #define WARN_DUP_MSG \ 142 "Duplicate id \"%s\" at line number: " \ 143 "%d, line ignored\n" 144 145 #define DIAG_GNU_FOUND \ 146 "GNU PO file found.\n" 147 148 #define DIAG_INVOKING_GNU \ 149 "Generating the MO file in the GNU MO format.\n" 150 151 #ifdef __cplusplus 152 } 153 #endif 154 155 #endif /* _SUN_MSGFMT_H */ 156