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