Drizzled Public API Documentation

conn_uds.c

Go to the documentation of this file.
00001 /*
00002  * Drizzle Client & Protocol Library
00003  *
00004  * Copyright (C) 2008 Eric Day (eday@oddments.org)
00005  * All rights reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions are
00009  * met:
00010  *
00011  *     * Redistributions of source code must retain the above copyright
00012  * notice, this list of conditions and the following disclaimer.
00013  *
00014  *     * Redistributions in binary form must reproduce the above
00015  * copyright notice, this list of conditions and the following disclaimer
00016  * in the documentation and/or other materials provided with the
00017  * distribution.
00018  *
00019  *     * The names of its contributors may not be used to endorse or
00020  * promote products derived from this software without specific prior
00021  * written permission.
00022  *
00023  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00026  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00027  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00028  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00029  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00030  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00031  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00032  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034  *
00035  */
00036 
00042 #include "common.h"
00043 
00044 const char *drizzle_con_uds(const drizzle_con_st *con)
00045 {
00046   if (con->socket_type == DRIZZLE_CON_SOCKET_UDS)
00047   {
00048     if (con->socket.uds.sockaddr.sun_path[0] != 0)
00049       return con->socket.uds.sockaddr.sun_path;
00050 
00051     if (con->options & DRIZZLE_CON_MYSQL)
00052       return DRIZZLE_DEFAULT_UDS_MYSQL;
00053 
00054     return DRIZZLE_DEFAULT_UDS;
00055   }
00056 
00057   return NULL;
00058 }
00059 
00060 void drizzle_con_set_uds(drizzle_con_st *con, const char *uds)
00061 {
00062   drizzle_con_reset_addrinfo(con);
00063 
00064   con->socket_type= DRIZZLE_CON_SOCKET_UDS;
00065 
00066   if (uds == NULL)
00067     uds= "";
00068 
00069   con->socket.uds.sockaddr.sun_family= AF_UNIX;
00070   strncpy(con->socket.uds.sockaddr.sun_path, uds,
00071           sizeof(con->socket.uds.sockaddr.sun_path));
00072   con->socket.uds.sockaddr.sun_path[sizeof(con->socket.uds.sockaddr.sun_path) - 1]= 0;
00073 
00074   con->socket.uds.addrinfo.ai_family= AF_UNIX;
00075   con->socket.uds.addrinfo.ai_socktype= SOCK_STREAM;
00076   con->socket.uds.addrinfo.ai_protocol= 0;
00077   con->socket.uds.addrinfo.ai_addrlen= sizeof(struct sockaddr_un);
00078   con->socket.uds.addrinfo.ai_addr= (struct sockaddr *)&(con->socket.uds.sockaddr);
00079 }