~ubuntu-branches/ubuntu/lucid/man-db/lucid-updates

« back to all changes in this revision

Viewing changes to gnulib/lib/intprops.h

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2010-02-17 00:56:08 UTC
  • mfrom: (1.1.10 upstream) (5.2.10 sid)
  • Revision ID: james.westby@ubuntu.com-20100217005608-ko3mxv0qr29iaptz
Tags: 2.5.7-1
* New upstream release:
  - Make man(1) refer to the "Warnings" node in 'info groff' for a list of
    available warning names (closes: #545805).
  - Don't run tests if cross-compiling.
  - Add option to disable justification (closes: #440047).
  - Do what the user probably means when the full path to an executable is
    given as an argument (closes: #505465).
  - Search man<sec><ext> directories in the GNU layout (closes: #519807).
  - Prefer getting a page from the best manual section over getting a page
    in the correct language; I have my reservations about this, but it
    seems to be what people are requesting (closes: #519547).
  - 'man -f' and 'man -k' now pass through any -s option to apropos/whatis
    respectively.
  - All programs now support a MAN_DEBUG environment variable which can be
    used in place of the -d/--debug option. This is useful in some
    situations where a program is being called deep in a process tree.
  - Fix off-by-one error when write returns EAGAIN (thanks, Samuel
    Thibault; closes: #564818).
  - "%s: nothing appropriate." is an error; write it to stderr, not stdout
    (closes: #565255).
  - Don't bother printing error messages for SIGINT and SIGQUIT, since
    these correspond to explicit user actions (closes: #568000).
  - Fix sense of directory check while decompressing (closes: #537434).
  - Always save cat pages in UTF-8 (closes: #446741).
* Convert to source format 3.0 (quilt).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* intprops.h -- properties of integer types
2
2
 
3
 
   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
3
   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 Free Software
 
4
   Foundation, Inc.
4
5
 
5
6
   This program is free software: you can redistribute it and/or modify
6
7
   it under the terms of the GNU General Public License as published by
17
18
 
18
19
/* Written by Paul Eggert.  */
19
20
 
20
 
#include <limits.h>
 
21
#ifndef GL_INTPROPS_H
 
22
# define GL_INTPROPS_H
 
23
 
 
24
# include <limits.h>
21
25
 
22
26
/* The extra casts in the following macros work around compiler bugs,
23
27
   e.g., in Cray C 5.0.3.0.  */
24
28
 
25
29
/* True if the arithmetic type T is an integer type.  bool counts as
26
30
   an integer.  */
27
 
#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
 
31
# define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
28
32
 
29
33
/* True if negative values of the signed integer type T use two's
30
34
   complement, ones' complement, or signed magnitude representation,
31
35
   respectively.  Much GNU code assumes two's complement, but some
32
36
   people like to be portable to all possible C hosts.  */
33
 
#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
34
 
#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
35
 
#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
 
37
# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
 
38
# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
 
39
# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
36
40
 
37
41
/* True if the arithmetic type T is signed.  */
38
 
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
 
42
# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
39
43
 
40
44
/* The maximum and minimum values for the integer type T.  These
41
45
   macros have undefined behavior if T is signed and has padding bits.
42
46
   If this is a problem for you, please let us know how to fix it for
43
47
   your host.  */
44
 
#define TYPE_MINIMUM(t) \
45
 
  ((t) (! TYPE_SIGNED (t) \
46
 
        ? (t) 0 \
47
 
        : TYPE_SIGNED_MAGNITUDE (t) \
48
 
        ? ~ (t) 0 \
49
 
        : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
50
 
#define TYPE_MAXIMUM(t) \
51
 
  ((t) (! TYPE_SIGNED (t) \
52
 
        ? (t) -1 \
53
 
        : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
 
48
# define TYPE_MINIMUM(t) \
 
49
  ((t) (! TYPE_SIGNED (t) \
 
50
        ? (t) 0 \
 
51
        : TYPE_SIGNED_MAGNITUDE (t) \
 
52
        ? ~ (t) 0 \
 
53
        : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
 
54
# define TYPE_MAXIMUM(t) \
 
55
  ((t) (! TYPE_SIGNED (t) \
 
56
        ? (t) -1 \
 
57
        : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
54
58
 
55
59
/* Return zero if T can be determined to be an unsigned type.
56
60
   Otherwise, return 1.
58
62
   tighter bound.  Otherwise, it overestimates the true bound by one byte
59
63
   when applied to unsigned types of size 2, 4, 16, ... bytes.
60
64
   The symbol signed_type_or_expr__ is private to this header file.  */
61
 
#if __GNUC__ >= 2
62
 
# define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t))
63
 
#else
64
 
# define signed_type_or_expr__(t) 1
65
 
#endif
 
65
# if __GNUC__ >= 2
 
66
#  define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t))
 
67
# else
 
68
#  define signed_type_or_expr__(t) 1
 
69
# endif
66
70
 
67
71
/* Bound on length of the string representing an integer type or expression T.
68
72
   Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485;
69
73
   add 1 for integer division truncation; add 1 more for a minus sign
70
74
   if needed.  */
71
 
#define INT_STRLEN_BOUND(t) \
 
75
# define INT_STRLEN_BOUND(t) \
72
76
  ((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \
73
77
   + signed_type_or_expr__ (t) + 1)
74
78
 
75
79
/* Bound on buffer size needed to represent an integer type or expression T,
76
80
   including the terminating null.  */
77
 
#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
 
81
# define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
 
82
 
 
83
#endif /* GL_INTPROPS_H */