コード例 #1
0
ファイル: iopentest1.c プロジェクト: DCteam/lustre
static char *get_iname(char *fname, const char *mtpt)
{
        char *iname;
        int fd, rc;
        struct stat buf;

        iname = malloc(INAME_LEN);
        CHECK_IT(iname, "malloc() failed");

        fd = open(fname, O_CREAT, 0644);
        if (fd < 0 && errno != EISDIR) {
                fprintf(stderr, "%s:%d: open(%s) failed: %s\n", __FILE__,
                        __LINE__, fname, strerror(errno));
                exit(1);
        }

        if (fd >= 0)
                close(fd);

        rc = stat(fname, &buf);
        if (rc != 0) {
                fprintf(stderr, "%s:%d: stat(%s) failed: %s\n", __FILE__,
                        __LINE__, fname, strerror(errno));
                exit(1);
        }

        rc = snprintf(iname, INAME_LEN,
                      "%s/__iopen__/%lu", mtpt, (unsigned long)buf.st_ino);
        CHECK_SNPRINTF(rc, INAME_LEN);

        return iname;
}
コード例 #2
0
ファイル: test.c プロジェクト: matsumoto-r/qrintf
void test_simple()
{
    CHECK("%c", 'Z');
    CHECK("%3c", 'Z');
    CHECK("%s", "abc");
    CHECK("%3s", "a");
    CHECK("%3s", "abc");
    CHECK("%3s", "abcde");
    CHECK("%03s", "abc");
    CHECK("%03s", "abcde");
    CHECK("%*s", (size_t)3, "a");
    CHECK("%*s", (size_t)3, "abc");
    CHECK("%*s", (size_t)3, "abcde");
    CHECK("%x_", 1);
    CHECK("%d%%", 10);
    CHECK("%%%d", 10);
    CHECK("%%d%d", 10);

    CHECK("%s%s", "a,b", "c");
    CHECK("%s%d", "hi" /*hmm */, // test
        3);
    CHECK("%s%d", "a\",b", 123);

#define CHECK_MULTI(type, conv, min, max) \
    CHECK(conv, (type)0); \
    CHECK(conv, (type)12345); \
    CHECK(conv, (type)-12345); \
    CHECK(conv, (type)min); \
    CHECK(conv, (type)max);

    CHECK_MULTI(short, "%hd", SHRT_MIN, SHRT_MAX);
    CHECK_MULTI(int, "%d", INT_MIN, INT_MAX);
    CHECK_MULTI(long, "%ld", LONG_MIN, LONG_MAX);
    CHECK_MULTI(long long, "%lld", LLONG_MIN, LLONG_MAX);

    CHECK_MULTI(short, "%hi", SHRT_MIN, SHRT_MAX);
    CHECK_MULTI(int, "%i", INT_MIN, INT_MAX);
    CHECK_MULTI(long, "%li", LONG_MIN, LONG_MAX);
    CHECK_MULTI(long long, "%lli", LLONG_MIN, LLONG_MAX);

    CHECK_MULTI(unsigned short, "%hu", 0, USHRT_MAX);
    CHECK_MULTI(unsigned , "%u", 0, UINT_MAX);
    CHECK_MULTI(unsigned long, "%lu", 0, ULONG_MAX);
    CHECK_MULTI(unsigned long long, "%llu", 0, ULLONG_MAX);
    CHECK_MULTI(size_t, "%zu", 0, SIZE_MAX);

    CHECK_MULTI(unsigned short, "%hx", 0, USHRT_MAX);
    CHECK_MULTI(unsigned , "%x", 0, UINT_MAX);
    CHECK_MULTI(unsigned long, "%lx", 0, ULONG_MAX);
    CHECK_MULTI(unsigned long long, "%llx", 0, ULLONG_MAX);
    CHECK_MULTI(size_t, "%zx", 0, SIZE_MAX);

    CHECK_MULTI(unsigned short, "%hX", 0, USHRT_MAX);
    CHECK_MULTI(unsigned , "%X", 0, UINT_MAX);
    CHECK_MULTI(unsigned long, "%lX", 0, ULONG_MAX);
    CHECK_MULTI(unsigned long long, "%llX", 0, ULLONG_MAX);
    CHECK_MULTI(size_t, "%zX", 0, SIZE_MAX);

    CHECK_MULTI(int, "%7d", INT_MIN, INT_MAX);
    CHECK_MULTI(int, "%07d", INT_MIN, INT_MAX);
    CHECK_MULTI(unsigned, "%7u", 0, UINT_MAX);
    CHECK_MULTI(unsigned, "%07u", 0, UINT_MAX);
    CHECK_MULTI(unsigned, "%7x", 0, UINT_MAX);
    CHECK_MULTI(unsigned, "%07x", 0, UINT_MAX);

    CHECK_SNPRINTF(8, "%s", "abcdef"); /* below the bounds */
    CHECK_SNPRINTF(8, "1234%s", "abcdef"); /* partial write */
    CHECK_SNPRINTF(8, "1234567890%s", "abcdef"); /* no write */

    CHECK_SNPRINTF(3, "%d", 12345);
    CHECK_SNPRINTF(10, "%u.%u.%u.%u", 12, 34, 56, 78);
    CHECK_SNPRINTF(3, "%x", 0xffff);

    CHECK_SNPRINTF(3, "%hx",  USHRT_MAX);
    CHECK_SNPRINTF(3, "%x",   UINT_MAX);
    CHECK_SNPRINTF(3, "%lx",  ULONG_MAX);
    CHECK_SNPRINTF(3, "%llx", ULLONG_MAX);
}