| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #include "config.h"
- #include <stdio.h>
- #include <string.h>
- /**
- * cast - routines for safer casting.
- *
- * Often you want to cast in a limited way, such as removing a const or
- * switching between integer types. However, normal casts will work on
- * almost any type, making them dangerous when the code changes.
- *
- * These C++-inspired macros serve two purposes: they make it clear the
- * exact reason for the cast, and they also (with some compilers) cause
- * errors when misused.
- *
- * Based on Jan Engelhardt's libHX macros: http://libhx.sourceforge.net/
- *
- * Author: Jan Engelhardt
- * Maintainer: Rusty Russell <rusty@rustcorp.com.au>
- * License: LGPL (v2.1 or any later version)
- *
- * Example:
- * // Given "test" output contains "3 t's in 'test string'"
- * #include <ccan/cast/cast.h>
- * #include <stdint.h>
- * #include <stdio.h>
- * #include <stdlib.h>
- *
- * // Find char @orig in @str, if @repl, replace them. Return number.
- * static size_t find_chars(char *str, char orig, char repl)
- * {
- * size_t i, count = 0;
- * for (i = 0; str[i]; i++) {
- * if (str[i] == orig) {
- * count++;
- * if (repl)
- * str[i] = repl;
- * }
- * }
- * return count;
- * }
- *
- * // Terrible hash function.
- * static uint64_t hash_string(const unsigned char *str)
- * {
- * size_t i;
- * uint64_t hash = 0;
- * for (i = 0; str[i]; i++)
- * hash += str[i];
- * return hash;
- * }
- *
- * int main(int argc, char *argv[])
- * {
- * uint64_t hash;
- *
- * if (argc != 2) {
- * fprintf(stderr, "Needs argument\n"); exit(1);
- * }
- * // find_chars wants a non-const string, but doesn't
- * // need it if repl == 0.
- * printf("%zu %c's in 'test string'\n",
- * find_chars(cast_const(char *, "test string"),
- * argv[1][0], 0),
- * argv[1][0]);
- *
- * // hash_string wants an unsigned char.
- * hash = hash_string(cast_signed(unsigned char *, argv[1]));
- *
- * // Need a long long to hand to printf.
- * printf("Hash of '%s' = %llu\n", argv[1],
- * cast_static(unsigned long long, hash));
- * return 0;
- * }
- *
- */
- int main(int argc, char *argv[])
- {
- /* Expect exactly one argument */
- if (argc != 2)
- return 1;
- if (strcmp(argv[1], "depends") == 0) {
- printf("ccan/build_assert\n");
- return 0;
- }
- return 1;
- }
|