/* gutenfetch - a small utility to list and fetch books available through project gutenberg Copyright (C) 2001, 2002, 2003, 2004 Russell Francis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc. 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA Last updated on $Date: 2004/03/21 21:40:15 $ by $Author: johntabularasa $. */ #include "stddefs.h" #include "libgutenfetch_init.h" #include "libgutenfetch_filter.h" #include "libgutenfetch_error.h" #include "libgutenfetch_servers.h" #include "libgutenfetch_listing.h" #include "libgutenfetch_utility.h" #include "libgutenfetch_detail.h" #include "libgutenfetch_cache.h" #include #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif /** * Initialize the gutenfetch library. * * @return GUTENFETCH_OK on success, something else on failure. */ gutenfetch_error_t gutenfetch_init(void) { char *tempdir; #if (HAVE_CURL_GLOBAL_INIT == 1) long curl_flags; #endif /** * This library should never be run as root! */ if ( (getuid() == 0) || (geteuid() == 0)) { fprintf(stderr, "Never ever run this application as root!\n"); exit (-1); } #ifdef ENABLE_NLS /* Enable Il8N */ setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); #endif /* ENABLE_NLS */ /* This will create and initialize our temporary working directory. */ tempdir = gutenfetch_util_get_temp_dir(); FREE_NULL(tempdir); gutenfetch_error_init(); gutenfetch_filter_init(); gutenfetch_servers_init(); gutenfetch_listing_init(); gutenfetch_detail_init(); gutenfetch_cache_init(FALSE); // default is to not use the cache. #if (HAVE_CURL_GLOBAL_INIT == 1) /* This function was defined in curl 7.8 so it may not be * present on older libraries, don't call if it is not * present. */ # if defined(WIN32) curl_flags = CURL_GLOBAL_WIN32; # else curl_flags = CURL_GLOBAL_NOTHING; # endif /* WIN32 */ if (curl_global_init(curl_flags) != CURLE_OK) return GUTENFETCH_CURL_GLOBAL_INIT_FAILED; #endif /* HAVE_CURL_GLOBAL_INIT */ return GUTENFETCH_OK; } /** * Release all resources used by the gutenfetch library. * */ void gutenfetch_shutdown(void) { #if (HAVE_CURL_GLOBAL_INIT == 1) curl_global_cleanup(); #endif /* HAVE_CURL_GLOBAL_INIT */ gutenfetch_cache_shutdown(); gutenfetch_detail_shutdown(); gutenfetch_listing_shutdown(); gutenfetch_servers_shutdown(); gutenfetch_filter_shutdown(); gutenfetch_error_shutdown(); gutenfetch_util_free_temp_dir(); } /** * gutenfetch_init_curl_handle * * Initialize a curl handle used for making network * connections. * * @return A valid CURL* handle or NULL. */ CURL * gutenfetch_init_curl_handle(void) { CURL *handle; if ( (handle = curl_easy_init()) == NULL) { return NULL; } if (curl_easy_setopt(handle, CURLOPT_HEADER, FALSE) != CURLE_OK) { curl_easy_cleanup(handle); return NULL; } if (curl_easy_setopt(handle, CURLOPT_USERAGENT, PACKAGE_STRING) != CURLE_OK) { curl_easy_cleanup(handle); return NULL; } return handle; } /** * gutenfetch_shutdown_curl_handle * * Release resources used by the network connection. * * @param handle The network handle to free. */ void gutenfetch_shutdown_curl_handle(CURL *handle) { curl_easy_cleanup(handle); } /** * Return the version of the library. * * @return a statically allocated string which states the version * of libgutenfetch we are. */ char * gutenfetch_version(void) { return PACKAGE_VERSION; } /** * Return whether the library is thread-safe or not. * * @return TRUE if the library is thread-safe, FALSE * if it is not. */ int gutenfetch_is_threadsafe(void) { #ifdef HAVE_PTHREAD return TRUE; #else return FALSE; #endif }