Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions libc/config/linux/aarch64/entrypoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -945,6 +945,7 @@ if(LLVM_LIBC_FULL_BUILD)
# arpa/inet.h entrypoints
libc.src.arpa.inet.htonl
libc.src.arpa.inet.htons
libc.src.arpa.inet.inet_addr
libc.src.arpa.inet.inet_aton
libc.src.arpa.inet.ntohl
libc.src.arpa.inet.ntohs
Expand Down
1 change: 1 addition & 0 deletions libc/config/linux/riscv/entrypoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1078,6 +1078,7 @@ if(LLVM_LIBC_FULL_BUILD)
# arpa/inet.h entrypoints
libc.src.arpa.inet.htonl
libc.src.arpa.inet.htons
libc.src.arpa.inet.inet_addr
libc.src.arpa.inet.inet_aton
libc.src.arpa.inet.ntohl
libc.src.arpa.inet.ntohs
Expand Down
1 change: 1 addition & 0 deletions libc/config/linux/x86_64/entrypoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1116,6 +1116,7 @@ if(LLVM_LIBC_FULL_BUILD)
# arpa/inet.h entrypoints
libc.src.arpa.inet.htonl
libc.src.arpa.inet.htons
libc.src.arpa.inet.inet_addr
libc.src.arpa.inet.inet_aton
libc.src.arpa.inet.ntohl
libc.src.arpa.inet.ntohs
Expand Down
7 changes: 7 additions & 0 deletions libc/include/arpa/inet.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ header_template: inet.h.def
macros: []
types:
- type_name: in_addr
- type_name: in_addr_t
enums: []
objects: []
functions:
Expand All @@ -18,6 +19,12 @@ functions:
return_type: uint16_t
arguments:
- type: uint16_t
- name: inet_addr
standards:
- POSIX
return_type: in_addr_t
arguments:
- type: const char *
- name: inet_aton
standards:
- llvm_libc_ext
Expand Down
1 change: 1 addition & 0 deletions libc/include/llvm-libc-macros/netinet-in-macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

#define INADDR_ANY __LLVM_LIBC_CAST(static_cast, in_addr_t, 0x00000000)
#define INADDR_BROADCAST __LLVM_LIBC_CAST(static_cast, in_addr_t, 0xffffffff)
#define INADDR_NONE __LLVM_LIBC_CAST(static_cast, in_addr_t, 0xffffffff)

#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46
Expand Down
15 changes: 15 additions & 0 deletions libc/src/arpa/inet/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,21 @@ add_entrypoint_object(
libc.src.__support.str_to_integer
)

add_entrypoint_object(
inet_addr
SRCS
inet_addr.cpp
HDRS
inet_addr.h
DEPENDS
libc.include.arpa_inet
libc.include.llvm-libc-macros.netinet_in_macros
libc.include.llvm-libc-types.in_addr
libc.include.llvm-libc-types.in_addr_t
libc.src.__support.common
libc.src.arpa.inet.inet_aton
)

add_entrypoint_object(
ntohl
SRCS
Expand Down
23 changes: 23 additions & 0 deletions libc/src/arpa/inet/inet_addr.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//===-- Implementation of inet_addr function ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/arpa/inet/inet_addr.h"
#include "include/llvm-libc-macros/netinet-in-macros.h"
#include "include/llvm-libc-types/in_addr.h"
#include "include/llvm-libc-types/in_addr_t.h"
#include "src/__support/common.h"
#include "src/arpa/inet/inet_aton.h"

namespace LIBC_NAMESPACE_DECL {

LLVM_LIBC_FUNCTION(in_addr_t, inet_addr, (const char *cp)) {
in_addr addr;
return inet_aton(cp, &addr) ? addr.s_addr : INADDR_NONE;
}

} // namespace LIBC_NAMESPACE_DECL
21 changes: 21 additions & 0 deletions libc/src/arpa/inet/inet_addr.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//===-- Implementation header of inet_addr ----------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_SRC_ARPA_INET_INET_ADDR_H
#define LLVM_LIBC_SRC_ARPA_INET_INET_ADDR_H

#include "include/llvm-libc-types/in_addr_t.h"
#include "src/__support/macros/config.h"

namespace LIBC_NAMESPACE_DECL {

in_addr_t inet_addr(const char *cp);

} // namespace LIBC_NAMESPACE_DECL

#endif // LLVM_LIBC_SRC_ARPA_INET_INET_ADDR_H
11 changes: 11 additions & 0 deletions libc/test/src/arpa/inet/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,17 @@ add_libc_unittest(
libc.src.arpa.inet.ntohs
)

add_libc_unittest(
inet_addr
SUITE
libc_arpa_inet_unittests
SRCS
inet_addr_test.cpp
DEPENDS
libc.src.arpa.inet.htonl
libc.src.arpa.inet.inet_addr
)

add_libc_unittest(
inet_aton
SUITE
Expand Down
25 changes: 25 additions & 0 deletions libc/test/src/arpa/inet/inet_addr_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//===-- Unittests for inet_addr -------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/arpa/inet/htonl.h"
#include "src/arpa/inet/inet_addr.h"
#include "test/UnitTest/Test.h"

namespace LIBC_NAMESPACE_DECL {

TEST(LlvmLibcInetAddr, ValidTest) {
ASSERT_EQ(htonl(0x7f010204), inet_addr("127.1.2.4"));
ASSERT_EQ(htonl(0x7f010004), inet_addr("127.1.4"));
}

TEST(LlvmLibcInetAddr, InvalidTest) {
ASSERT_EQ(htonl(0xffffffff), inet_addr(""));
ASSERT_EQ(htonl(0xffffffff), inet_addr("x"));
}

} // namespace LIBC_NAMESPACE_DECL
Loading