45 lines · cpp
1// RUN: %clangxx -O0 %s -o %t && %run %t2 3// REQUIRES: glibc, netbase4 5#include <arpa/inet.h>6#include <assert.h>7#include <fcntl.h>8#include <netdb.h>9#include <stdio.h>10#include <stdlib.h>11#include <string.h>12#include <unistd.h>13 14void CheckResult(const char *file, int line, int ret) {15 if (ret != 0) {16 fprintf(stderr, "ERROR: %s:%d - %s\n", file, line, strerror(ret));17 }18 assert(ret == 0);19}20 21#define CHECK_RESULT(ret) CheckResult(__FILE__, __LINE__, ret)22 23int main(void) {24 assert(access("/etc/services", O_RDONLY) == 0);25 struct servent result_buf;26 struct servent *result;27 char buf[1024];28 // If these fail, check /etc/services if "ssh" exists. I picked this because29 // it should exist everywhere, if it doesn't, I am sorry. Disable the test30 // then please.31 CHECK_RESULT(32 getservbyname_r("ssh", nullptr, &result_buf, buf, sizeof(buf), &result));33 assert(result != nullptr);34 CHECK_RESULT(getservbyport_r(htons(22), nullptr, &result_buf, buf,35 sizeof(buf), &result));36 assert(result != nullptr);37 38 CHECK_RESULT(getservent_r(&result_buf, buf, sizeof(buf), &result));39 assert(result != nullptr);40 41 CHECK_RESULT(getservbyname_r("invalidhadfuiasdhi", nullptr, &result_buf, buf,42 sizeof(buf), &result));43 assert(result == nullptr);44}45