Mercurial > hg > octave-nkf > gnulib-hg
annotate tests/test-quotearg.h @ 16817:7747cb9b54b9
unistd_h: make it easier to avoid sys_types_h
This is useful for Emacs, which has its own method of porting to
Windows, and which therefore does not need the sys_types_h module.
* m4/off_t.m4: New file, defining gl_TYPE_OFF_T, which contains
code moved here from gl_SYS_TYPES_H.
* m4/sys_types_h.m4 (gl_SYS_TYPES_H): Require it instead of
using the code directly.
* m4/unistd_h.m4 (gl_UNISTD_H): Require gl_TYPE_OFF_T, not
gl_SYS_TYPES_H.
* modules/sys_types (Files):
* modules/unistd (Files): Add m4/off_t.m4.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 04 May 2012 13:05:31 -0700 |
parents | bb182ee4a09d |
children | e542fd46ad6f |
rev | line source |
---|---|
13386 | 1 /* Test of quotearg family of functions. |
16201
8250f2777afc
maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents:
14079
diff
changeset
|
2 Copyright (C) 2008-2012 Free Software Foundation, Inc. |
13386 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 3, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
16366
bb182ee4a09d
maint: replace FSF snail-mail addresses with URLs
Paul Eggert <eggert@cs.ucla.edu>
parents:
16201
diff
changeset
|
15 along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
13386 | 16 |
17 /* Written by Eric Blake <ebb9@byu.net>, 2008. */ | |
18 | |
19 struct result_strings { | |
20 char const *str1; /* Translation of "". */ | |
21 char const *str2; /* Translation of "\0""1\0". */ | |
22 size_t len2; /* Length of str2. */ | |
23 char const *str3; /* Translation of "simple". */ | |
24 char const *str4; /* Translation of " \t\n'\"\033?""?/\\". */ | |
25 char const *str5; /* Translation of "a:b". */ | |
26 char const *str6; /* Translation of "a\\b". */ | |
27 char const *str7a; /* Translation of LQ RQ, in ASCII charset. */ | |
28 char const *str7b; /* Translation of LQ RQ, in Latin1 or UTF-8 charset. */ | |
29 }; | |
30 | |
31 struct result_groups { | |
32 struct result_strings group1; /* Via quotearg_buffer. */ | |
33 struct result_strings group2; /* Via quotearg{,_mem}. */ | |
34 struct result_strings group3; /* Via quotearg_colon{,_mem}. */ | |
35 }; | |
36 | |
37 /* These quotes are borrowed from a pt_PT.utf8 translation. */ | |
38 # define LQ "\302\253" | |
39 # define RQ "\302\273" | |
40 # define LQ_ENC "\\302\\253" | |
41 # define RQ_ENC "\\302\\273" | |
42 # define RQ_ESC "\\\302\273" | |
43 | |
44 static struct result_strings inputs = { | |
45 "", "\0001\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", | |
46 LQ RQ, NULL | |
47 }; | |
48 | |
49 static void | |
50 compare (char const *a, size_t la, char const *b, size_t lb) | |
51 { | |
52 ASSERT (la == lb); | |
53 ASSERT (memcmp (a, b, la) == 0); | |
54 ASSERT (b[lb] == '\0'); | |
55 } | |
56 | |
57 static void | |
58 compare_strings (char *(func) (char const *, size_t *), | |
59 struct result_strings *results, bool ascii_only) | |
60 { | |
61 size_t len; | |
62 char *p; | |
63 | |
64 len = 0; | |
65 p = func (inputs.str1, &len); | |
66 compare (results->str1, strlen (results->str1), p, len); | |
67 | |
68 len = inputs.len2; | |
69 p = func (inputs.str2, &len); | |
70 compare (results->str2, results->len2, p, len); | |
71 | |
72 len = SIZE_MAX; | |
73 p = func (inputs.str3, &len); | |
74 compare (results->str3, strlen (results->str3), p, len); | |
75 | |
76 len = strlen (inputs.str4); | |
77 p = func (inputs.str4, &len); | |
78 compare (results->str4, strlen (results->str4), p, len); | |
79 | |
80 len = SIZE_MAX; | |
81 p = func (inputs.str5, &len); | |
82 compare (results->str5, strlen (results->str5), p, len); | |
83 | |
84 len = strlen (inputs.str6); | |
85 p = func (inputs.str6, &len); | |
86 compare (results->str6, strlen (results->str6), p, len); | |
87 | |
88 len = strlen (inputs.str7a); | |
89 p = func (inputs.str7a, &len); | |
90 if (ascii_only) | |
91 compare (results->str7a, strlen (results->str7a), p, len); | |
92 else | |
93 compare (results->str7b, strlen (results->str7b), p, len); | |
94 } | |
95 | |
96 static char * | |
97 use_quotearg_buffer (const char *str, size_t *len) | |
98 { | |
99 static char buf[100]; | |
100 size_t size; | |
101 memset (buf, 0xa5, 100); | |
102 size = quotearg_buffer (buf, 100, str, *len, NULL); | |
103 *len = size; | |
104 ASSERT ((unsigned char) buf[size + 1] == 0xa5); | |
105 return buf; | |
106 } | |
107 | |
108 static char * | |
109 use_quotearg (const char *str, size_t *len) | |
110 { | |
111 char *p = *len == SIZE_MAX ? quotearg (str) : quotearg_mem (str, *len); | |
112 *len = strlen (p); | |
113 return p; | |
114 } | |
115 | |
116 static char * | |
117 use_quote_double_quotes (const char *str, size_t *len) | |
118 { | |
119 char *p = *len == SIZE_MAX ? quotearg_char (str, '"') | |
120 : quotearg_char_mem (str, *len, '"'); | |
121 *len = strlen (p); | |
122 return p; | |
123 } | |
124 | |
125 static char * | |
126 use_quotearg_colon (const char *str, size_t *len) | |
127 { | |
128 char *p = (*len == SIZE_MAX ? quotearg_colon (str) | |
129 : quotearg_colon_mem (str, *len)); | |
130 *len = strlen (p); | |
131 return p; | |
132 } |