Alloc.c revision 9e7bcd65
19e7bcd65Smrg/* 29e7bcd65Smrg * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. 39e7bcd65Smrg * 49e7bcd65Smrg * Permission is hereby granted, free of charge, to any person obtaining a 59e7bcd65Smrg * copy of this software and associated documentation files (the "Software"), 69e7bcd65Smrg * to deal in the Software without restriction, including without limitation 79e7bcd65Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 89e7bcd65Smrg * and/or sell copies of the Software, and to permit persons to whom the 99e7bcd65Smrg * Software is furnished to do so, subject to the following conditions: 109e7bcd65Smrg * 119e7bcd65Smrg * The above copyright notice and this permission notice (including the next 129e7bcd65Smrg * paragraph) shall be included in all copies or substantial portions of the 139e7bcd65Smrg * Software. 149e7bcd65Smrg * 159e7bcd65Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 169e7bcd65Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 179e7bcd65Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 189e7bcd65Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 199e7bcd65Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 209e7bcd65Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 219e7bcd65Smrg * DEALINGS IN THE SOFTWARE. 229e7bcd65Smrg */ 239e7bcd65Smrg 249e7bcd65Smrg#include <X11/Intrinsic.h> 259e7bcd65Smrg#include <glib.h> 269e7bcd65Smrg#include <stdio.h> 279e7bcd65Smrg#include <string.h> 289e7bcd65Smrg 299e7bcd65Smrgstatic const char *program_name; 309e7bcd65Smrg 319e7bcd65Smrg/* Just a long string of characters to pull from */ 329e7bcd65Smrgconst char test_chars[] = 339e7bcd65Smrg "|000 nul|001 soh|002 stx|003 etx|004 eot|005 enq|006 ack|007 bel|" 349e7bcd65Smrg "|010 bs |011 ht |012 nl |013 vt |014 np |015 cr |016 so |017 si |" 359e7bcd65Smrg "|020 dle|021 dc1|022 dc2|023 dc3|024 dc4|025 nak|026 syn|027 etb|" 369e7bcd65Smrg "|030 can|031 em |032 sub|033 esc|034 fs |035 gs |036 rs |037 us |" 379e7bcd65Smrg "|040 sp |041 ! |042 \" |043 # |044 $ |045 % |046 & |047 ' |" 389e7bcd65Smrg "|050 ( |051 ) |052 * |053 + |054 , |055 - |056 . |057 / |" 399e7bcd65Smrg "|060 0 |061 1 |062 2 |063 3 |064 4 |065 5 |066 6 |067 7 |" 409e7bcd65Smrg "|070 8 |071 9 |072 : |073 ; |074 < |075 = |076 > |077 ? |" 419e7bcd65Smrg "|100 @ |101 A |102 B |103 C |104 D |105 E |106 F |107 G |" 429e7bcd65Smrg "|110 H |111 I |112 J |113 K |114 L |115 M |116 N |117 O |" 439e7bcd65Smrg "|120 P |121 Q |122 R |123 S |124 T |125 U |126 V |127 W |" 449e7bcd65Smrg "|130 X |131 Y |132 Z |133 [ |134 \\ |135 ] |136 ^ |137 _ |" 459e7bcd65Smrg "|140 ` |141 a |142 b |143 c |144 d |145 e |146 f |147 g |" 469e7bcd65Smrg "|150 h |151 i |152 j |153 k |154 l |155 m |156 n |157 o |" 479e7bcd65Smrg "|160 p |161 q |162 r |163 s |164 t |165 u |166 v |167 w |" 489e7bcd65Smrg "|170 x |171 y |172 z |173 { |174 | |175 } |176 ~ |177 del|" 499e7bcd65Smrg "| 00 nul| 01 soh| 02 stx| 03 etx| 04 eot| 05 enq| 06 ack| 07 bel|" 509e7bcd65Smrg "| 08 bs | 09 ht | 0a nl | 0b vt | 0c np | 0d cr | 0e so | 0f si |" 519e7bcd65Smrg "| 10 dle| 11 dc1| 12 dc2| 13 dc3| 14 dc4| 15 nak| 16 syn| 17 etb|" 529e7bcd65Smrg "| 18 can| 19 em | 1a sub| 1b esc| 1c fs | 1d gs | 1e rs | 1f us |" 539e7bcd65Smrg "| 20 sp | 21 ! | 22 \" | 23 # | 24 $ | 25 % | 26 & | 27 ' |" 549e7bcd65Smrg "| 28 ( | 29 ) | 2a * | 2b + | 2c , | 2d - | 2e . | 2f / |" 559e7bcd65Smrg "| 30 0 | 31 1 | 32 2 | 33 3 | 34 4 | 35 5 | 36 6 | 37 7 |" 569e7bcd65Smrg "| 38 8 | 39 9 | 3a : | 3b ; | 3c < | 3d = | 3e > | 3f ? |" 579e7bcd65Smrg "| 40 @ | 41 A | 42 B | 43 C | 44 D | 45 E | 46 F | 47 G |" 589e7bcd65Smrg "| 48 H | 49 I | 4a J | 4b K | 4c L | 4d M | 4e N | 4f O |" 599e7bcd65Smrg "| 50 P | 51 Q | 52 R | 53 S | 54 T | 55 U | 56 V | 57 W |" 609e7bcd65Smrg "| 58 X | 59 Y | 5a Z | 5b [ | 5c \\ | 5d ] | 5e ^ | 5f _ |" 619e7bcd65Smrg "| 60 ` | 61 a | 62 b | 63 c | 64 d | 65 e | 66 f | 67 g |" 629e7bcd65Smrg "| 68 h | 69 i | 6a j | 6b k | 6c l | 6d m | 6e n | 6f o |" 639e7bcd65Smrg "| 70 p | 71 q | 72 r | 73 s | 74 t | 75 u | 76 v | 77 w |" 649e7bcd65Smrg "| 78 x | 79 y | 7a z | 7b { | 7c | | 7d } | 7e ~ | 7f del|"; 659e7bcd65Smrg 669e7bcd65Smrg 679e7bcd65Smrg/* Test a simple short string & int */ 689e7bcd65Smrgstatic void test_XtAsprintf_short(void) 699e7bcd65Smrg{ 709e7bcd65Smrg char snbuf[1024]; 719e7bcd65Smrg char *asbuf; 729e7bcd65Smrg gint32 r = g_test_rand_int(); 739e7bcd65Smrg int snlen, aslen; 749e7bcd65Smrg 759e7bcd65Smrg snlen = snprintf(snbuf, sizeof(snbuf), "%s: %d\n", program_name, r); 769e7bcd65Smrg aslen = XtAsprintf(&asbuf, "%s: %d\n", program_name, r); 779e7bcd65Smrg 789e7bcd65Smrg g_assert(asbuf != NULL); 799e7bcd65Smrg g_assert(snlen == aslen); 809e7bcd65Smrg g_assert(strcmp(snbuf, asbuf) == 0); 819e7bcd65Smrg g_assert(asbuf[aslen] == '\0'); 829e7bcd65Smrg} 839e7bcd65Smrg 849e7bcd65Smrg/* Test a string long enough to be past the 256 character limit that 859e7bcd65Smrg makes XtAsprintf re-run snprintf after allocating memory */ 869e7bcd65Smrgstatic void test_XtAsprintf_long(void) 879e7bcd65Smrg{ 889e7bcd65Smrg char *asbuf; 899e7bcd65Smrg int aslen; 909e7bcd65Smrg gint r1 = g_test_rand_int_range(0, 256); 919e7bcd65Smrg gint r2 = g_test_rand_int_range(1024, sizeof(test_chars) - r1); 929e7bcd65Smrg 939e7bcd65Smrg aslen = XtAsprintf(&asbuf, "%.*s", r2, test_chars + r1); 949e7bcd65Smrg 959e7bcd65Smrg g_assert(asbuf != NULL); 969e7bcd65Smrg g_assert(aslen == r2); 979e7bcd65Smrg g_assert(strncmp(asbuf, test_chars + r1, r2) == 0); 989e7bcd65Smrg g_assert(asbuf[aslen] == '\0'); 999e7bcd65Smrg} 1009e7bcd65Smrg 1019e7bcd65Smrgint main(int argc, char** argv) 1029e7bcd65Smrg{ 1039e7bcd65Smrg program_name = argv[0]; 1049e7bcd65Smrg 1059e7bcd65Smrg g_test_init(&argc, &argv, NULL); 1069e7bcd65Smrg g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); 1079e7bcd65Smrg 1089e7bcd65Smrg g_test_add_func("/Alloc/XtAsprintf/short", test_XtAsprintf_short); 1099e7bcd65Smrg g_test_add_func("/Alloc/XtAsprintf/long", test_XtAsprintf_long); 1109e7bcd65Smrg 1119e7bcd65Smrg return g_test_run(); 1129e7bcd65Smrg} 113