summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLAN-TW <lantw44@gmail.com>2013-10-24 11:57:00 +0800
committerLAN-TW <lantw44@gmail.com>2013-10-24 11:57:00 +0800
commit00a434d5591166916ab85a5229984b447e09d8ae (patch)
treeeefcfe340d2ca057c92da47df62a818c0aafc22e
parentb6bf030497fb7814c5549b02540198c76ab9c98b (diff)
downloadcn2013-00a434d5591166916ab85a5229984b447e09d8ae.tar.gz
cn2013-00a434d5591166916ab85a5229984b447e09d8ae.tar.zst
cn2013-00a434d5591166916ab85a5229984b447e09d8ae.zip
HW1: 修正在 FreeBSD 編譯失敗的問題
-rw-r--r--hw1/configure.ac13
-rw-r--r--hw1/connection.c3
-rw-r--r--hw1/server-main.c2
-rw-r--r--hw1/server.c9
-rw-r--r--hw1/session.c6
-rw-r--r--hw1/socktool.c2
6 files changed, 24 insertions, 11 deletions
diff --git a/hw1/configure.ac b/hw1/configure.ac
index e37e45c..7c1ac81 100644
--- a/hw1/configure.ac
+++ b/hw1/configure.ac
@@ -8,6 +8,19 @@ AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([foreign])
AM_SILENT_RULES([yes])
+AC_CANONICAL_HOST
+AC_CANONICAL_BUILD
+AH_TEMPLATE([_POSIX_C_SOURCE])
+AH_TEMPLATE([_XOPEN_SOURCE])
+AH_TEMPLATE([_BSD_SOURCE])
+case "$build_os" in
+ *linux*)
+ AC_DEFINE([_POSIX_C_SOURCE], [200809L])
+ AC_DEFINE([_XOPEN_SOURCE], [700])
+ AC_DEFINE([_BSD_SOURCE])
+ ;;
+esac
+
# Checks for programs.
AC_PROG_CC
AC_PROG_CC_C99
diff --git a/hw1/connection.c b/hw1/connection.c
index 4ca17b2..237c9ad 100644
--- a/hw1/connection.c
+++ b/hw1/connection.c
@@ -12,6 +12,7 @@
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
+#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
@@ -56,7 +57,7 @@ int ras_conn_init (
conn->id = id;
conn->name = xsprintf ("%s-%d (%s-%s)",
name, conn->id,
- domain == AF_LOCAL ? "unix" :
+ domain == AF_UNIX ? "unix" :
domain == AF_INET ? "ipv4" :
domain == AF_INET6 ? "ipv6" : "unknown",
perm == RAS_CONN_PERM_RESTRICTED ? "restricted" :
diff --git a/hw1/server-main.c b/hw1/server-main.c
index e313c0e..92ff84b 100644
--- a/hw1/server-main.c
+++ b/hw1/server-main.c
@@ -93,7 +93,7 @@ int main (int argc, char* argv[]) {
/* XXX Check before unlink */
unlink ("/tmp/ras-server.sock");
- ras_server_init (&svr, RAS_CONN_PERM_ADMIN, AF_LOCAL, NULL, sid), sid++;
+ ras_server_init (&svr, RAS_CONN_PERM_ADMIN, AF_UNIX, NULL, sid), sid++;
if (ras_server_listen (&svr, "/tmp/ras-server.sock", 0600) < 0) {
return 1;
} else {
diff --git a/hw1/server.c b/hw1/server.c
index 3794847..d98d4f2 100644
--- a/hw1/server.c
+++ b/hw1/server.c
@@ -12,6 +12,7 @@
#include <netinet/in.h>
#include <stdbool.h>
#include <stddef.h>
+#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -33,7 +34,7 @@ int ras_server_init (
}
void ras_server_destroy (RasServer* server) {
- if (RAS_CONN (server)->domain == AF_LOCAL) {
+ if (RAS_CONN (server)->domain == AF_UNIX) {
unlink (SOCKADDR_UN (&server->addr)->sun_path);
}
@@ -50,10 +51,10 @@ int ras_server_listen (RasServer* server, const char* addr, int arg) {
socklen_t socklen;
memset (&sock, 0, sizeof (sock));
switch (RAS_CONN (server)->domain) {
- case AF_LOCAL:
+ case AF_UNIX:
socklen = sizeof (struct sockaddr_un);
len = socklen - offsetof (struct sockaddr_un, sun_path) - 1;
- SOCKADDR_UN (&sock)->sun_family = AF_LOCAL;
+ SOCKADDR_UN (&sock)->sun_family = AF_UNIX;
strncpy (SOCKADDR_UN (&sock)->sun_path, addr, len);
ras_server_log (server, "addr = %s, mode = %o", addr, arg);
break;
@@ -100,7 +101,7 @@ int ras_server_listen (RasServer* server, const char* addr, int arg) {
int yes = 1;
setsockopt (fd, IPPROTO_IPV6, IPV6_V6ONLY, &yes, sizeof (yes));
}
- if (RAS_CONN (server)->domain == AF_LOCAL) {
+ if (RAS_CONN (server)->domain == AF_UNIX) {
fchmod (fd, arg);
}
diff --git a/hw1/session.c b/hw1/session.c
index 4c4db13..b406c90 100644
--- a/hw1/session.c
+++ b/hw1/session.c
@@ -2,9 +2,6 @@
# include "config.h"
#endif
-#define _XOPEN_SOURCE 600
-#define _BSD_SOURCE
-
#include "session.h"
#include "xwrap.h"
@@ -23,6 +20,7 @@
#include <stdlib.h>
#include <string.h>
#include <sys/select.h>
+#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
@@ -262,7 +260,7 @@ int ras_session_start_shell (RasSession* session) {
}
ras_session_log (session, "new pseudo-tty is %s", slave_dev);
} else {
- if (socketpair (AF_LOCAL, SOCK_STREAM, 0, sockpair) < 0) {
+ if (socketpair (AF_UNIX, SOCK_STREAM, 0, sockpair) < 0) {
write (RAS_CONN (session)->fd, noshell_msg, noshell_len);
ras_session_log (session, "cannot socketpair: %s", strerror (errno));
return -1;
diff --git a/hw1/socktool.c b/hw1/socktool.c
index cf60b31..109a02c 100644
--- a/hw1/socktool.c
+++ b/hw1/socktool.c
@@ -26,7 +26,7 @@ static char* ras_socktool_get_name (int sockfd, SockNameGetter getter) {
}
int domain = sock.ss_family;
- if (domain == AF_LOCAL) {
+ if (domain == AF_UNIX) {
return xstrdup ("local process");
}