/* Copyright (c) 2015 Google, Inc.
 * Barret Rhoden <brho@cs.berkeley.edu>
 * See LICENSE for details. */

#include <errno.h>
#include <sys/socket.h>

#include <sys/plan9_helpers.h>

static int sol_socket_sso(Rock *r, int optname, void *optval, socklen_t optlen)
{
	switch (optname) {
		#if 0
		/* We don't support setting any options yet */
		case (SO_FOO):
			if (optlen < foo_len) {
				__set_errno(EINVAL);
				return -1;
			}
			r->foo = *optval;
			break;
		#endif
		default:
			__set_errno(ENOPROTOOPT);
			return -1;
	};
	return 0;
}

int __setsockopt(int sockfd, int level, int optname, const __ptr_t __optval,
                 socklen_t optlen)
{
	Rock *r = _sock_findrock(sockfd, 0);
	void *optval = (void*)__optval;
	if (!r) {
		/* could be EBADF too, we can't tell */
		__set_errno(ENOTSOCK);
		return -1;
	}
	switch (level) {
		case (SOL_SOCKET):
			return sol_socket_sso(r, optname, optval, optlen);
		default:
			__set_errno(ENOPROTOOPT);
			return -1;
	};
}
weak_alias (__setsockopt, setsockopt)
