Updated cURL version.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
set(EXE_NAME curl)
|
||||
|
||||
# First try to locate tool_hugehelp.c to see if it has already been created
|
||||
# TODO Find the file WITHOUT adding a cache entry!!! Or else the user can delete the file after the script was first run, and the script won't notice it has gone.
|
||||
find_file(HUGEHELP_C_FILE tool_hugehelp.c PATHS . NO_DEFAULT_PATH)
|
||||
if (NOT HUGEHELP_C_FILE)
|
||||
message(STATUS "Warning: tool_hugehelp.c file was not generated before. Generating an 'empty' file...")
|
||||
file(WRITE tool_hugehelp.c "/* built-in manual is disabled, blank function */\n#include \"tool_hugehelp.h\"\nvoid hugehelp(void) {}\n\n")
|
||||
endif()
|
||||
|
||||
transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
|
||||
include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
|
||||
|
||||
if(MSVC)
|
||||
list(APPEND CURL_SOURCE curl.rc)
|
||||
endif()
|
||||
|
||||
add_executable(
|
||||
${EXE_NAME}
|
||||
${curl_SOURCES}
|
||||
)
|
||||
|
||||
source_group("cURLX source files" FILES ${CURLX_ONES})
|
||||
source_group("cURL source files" FILES ${CURL_CFILES})
|
||||
source_group("cURL header files" FILES ${CURL_HFILES})
|
||||
|
||||
include_directories(
|
||||
${CURL_SOURCE_DIR}/lib # To be able to reach "curl_setup_once.h"
|
||||
${CURL_BINARY_DIR}/lib # To be able to reach "curl_config.h"
|
||||
${CURL_BINARY_DIR}/include # To be able to reach "curl/curlbuild.h"
|
||||
)
|
||||
|
||||
|
||||
# Setup dependencies
|
||||
setup_curl_dependencies(${EXE_NAME})
|
||||
target_link_libraries( ${EXE_NAME} libcurl )
|
||||
|
||||
|
||||
################################################################################
|
||||
|
||||
#SET_TARGET_PROPERTIES(${EXE_NAME} ARCHIVE_OUTPUT_DIRECTORY "blah blah blah")
|
||||
#SET_TARGET_PROPERTIES(${EXE_NAME} RUNTIME_OUTPUT_DIRECTORY "blah blah blah")
|
||||
#SET_TARGET_PROPERTIES(${EXE_NAME} LIBRARY_OUTPUT_DIRECTORY "blah blah blah")
|
||||
|
||||
# Add the postfix to the executable since it is not added automatically as for modules and shared libraries
|
||||
set_target_properties(${EXE_NAME} PROPERTIES
|
||||
DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
|
||||
|
||||
if(MSVC)
|
||||
if(NOT BUILD_RELEASE_DEBUG_DIRS)
|
||||
# Ugly workaround to remove the "/debug" or "/release" in each output
|
||||
set_target_properties(${EXE_NAME} PROPERTIES PREFIX "../")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#INCLUDE(ModuleInstall OPTIONAL)
|
||||
|
||||
install(TARGETS ${EXE_NAME} DESTINATION bin)
|
||||
@@ -2,107 +2,211 @@
|
||||
# Watcom / OpenWatcom / Win32 makefile for cURL.
|
||||
# G. Vanem <[email protected]>
|
||||
#
|
||||
# $Id: Makefile.Watcom,v 1.13 2008-10-27 15:47:59 giva Exp $
|
||||
|
||||
!ifndef %watcom
|
||||
!error WATCOM environment variable not set!
|
||||
!endif
|
||||
|
||||
!ifdef %libname
|
||||
LIBNAME = $(%libname)
|
||||
!else
|
||||
LIBNAME = libcurl
|
||||
!endif
|
||||
TARGETS = $(LIBNAME).dll $(LIBNAME)_imp.lib $(LIBNAME).lib
|
||||
|
||||
CC = wcc386
|
||||
LD = wlink
|
||||
AR = wlib
|
||||
RC = wrc
|
||||
|
||||
CFLAGS = -3r -mf -d3 -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm &
|
||||
-bt=nt -d+ -dWIN32 -dHAVE_STRTOLL -dCURLDEBUG -dENABLE_IPV6 &
|
||||
-dHAVE_WINSOCK2_H -I..\include -I..\lib
|
||||
!ifdef __LOADDLL__
|
||||
! loaddll wcc386 wccd386
|
||||
! loaddll wpp386 wppd386
|
||||
! loaddll wlib wlibd
|
||||
! if $(__VERSION__) > 1270
|
||||
! loaddll wlink wlinkd
|
||||
! else
|
||||
! loaddll wlink wlink
|
||||
! endif
|
||||
!endif
|
||||
|
||||
OBJ_DIR = WC_Win32.obj
|
||||
!ifdef __LINUX__
|
||||
DS = /
|
||||
CP = cp
|
||||
MD = mkdir -p
|
||||
RD = rmdir -p
|
||||
RM = rm -f
|
||||
!else
|
||||
DS = $(X)\$(X)
|
||||
CP = copy 2>NUL
|
||||
MD = mkdir
|
||||
RD = rmdir /q /s 2>NUL
|
||||
!if $(__VERSION__) < 1250
|
||||
RM = del /q /f 2>NUL
|
||||
!else
|
||||
RM = rm -f
|
||||
!endif
|
||||
!endif
|
||||
|
||||
OBJS = $(OBJ_DIR)\getpass.obj $(OBJ_DIR)\homedir.obj $(OBJ_DIR)\hugehelp.obj &
|
||||
$(OBJ_DIR)\main.obj $(OBJ_DIR)\urlglob.obj $(OBJ_DIR)\writeenv.obj &
|
||||
$(OBJ_DIR)\writeout.obj $(OBJ_DIR)\curlutil.obj $(OBJ_DIR)\rawstr.obj
|
||||
SYS_INCL = -I$(%watcom)$(DS)h$(DS)nt -I$(%watcom)$(DS)h
|
||||
SYS_LIBS = $(%watcom)$(DS)lib386$(DS)nt;$(%watcom)$(DS)lib386
|
||||
|
||||
RESOURCE = $(OBJ_DIR)\curl.res
|
||||
CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm &
|
||||
-wcd=201 -bt=nt -bc -d+ -dWIN32 -dHAVE_STRTOLL &
|
||||
-I..$(DS)include -I..$(DS)lib $(SYS_INCL)
|
||||
|
||||
all: hugehelp.c $(OBJ_DIR) curl.exe .SYMBOLIC
|
||||
!ifdef %debug
|
||||
DEBUG = -dDEBUG=1 -dDEBUGBUILD
|
||||
CFLAGS += -d3 $(DEBUG)
|
||||
!else
|
||||
CFLAGS += -d0
|
||||
!endif
|
||||
|
||||
!ifdef %use_ipv6
|
||||
CFLAGS += -d_WIN32_WINNT=0x0501 -dENABLE_IPV6
|
||||
!endif
|
||||
|
||||
#
|
||||
# Change to suite.
|
||||
#
|
||||
!ifdef %zlib_root
|
||||
ZLIB_ROOT = $(%zlib_root)
|
||||
!else
|
||||
ZLIB_ROOT = ..$(DS)..$(DS)zlib-1.2.7
|
||||
!endif
|
||||
|
||||
!ifdef %libssh2_root
|
||||
LIBSSH2_ROOT = $(%libssh2_root)
|
||||
!else
|
||||
LIBSSH2_ROOT = ..$(DS)..$(DS)libssh2-1.4.3
|
||||
!endif
|
||||
|
||||
!ifdef %librtmp_root
|
||||
LIBRTMP_ROOT = $(%librtmp_root)
|
||||
!else
|
||||
LIBRTMP_ROOT = ..$(DS)..$(DS)rtmpdump-2.3
|
||||
!endif
|
||||
|
||||
!ifdef %openssl_root
|
||||
OPENSSL_ROOT = $(%openssl_root)
|
||||
!else
|
||||
OPENSSL_ROOT = ..$(DS)..$(DS)openssl-0.9.8x
|
||||
!endif
|
||||
|
||||
!ifdef %ares_root
|
||||
ARES_ROOT = $(%ares_root)
|
||||
!else
|
||||
ARES_ROOT = ..$(DS)ares
|
||||
!endif
|
||||
|
||||
!ifdef %use_ssl
|
||||
CFLAGS += -wcd=138 -dUSE_OPENSSL -dUSE_SSLEAY -I$(OPENSSL_ROOT)$(DS)inc32
|
||||
!endif
|
||||
|
||||
OBJ_DIR = WC_Win32.obj
|
||||
LINK_ARG = $(OBJ_DIR)$(DS)wlink.arg
|
||||
|
||||
# In order to process Makefile.inc wmake must be called with -u switch!
|
||||
!ifndef %MAKEFLAGS
|
||||
!error You MUST call wmake with the -u switch!
|
||||
!else
|
||||
!include Makefile.inc
|
||||
!endif
|
||||
# For now we still define the CURLX_ONES sources here unless we know how
|
||||
# to split off the prefixed path.
|
||||
CURLX_SOURCES = rawstr.c nonblock.c
|
||||
|
||||
OBJS = $(CURL_CFILES:.c=.obj)
|
||||
!ifdef %curl_static
|
||||
CFLAGS += -DCURL_STATICLIB
|
||||
!else
|
||||
CFLAGS += -br
|
||||
OBJS += $(CURLX_SOURCES:.c=.obj)
|
||||
!endif
|
||||
!ifdef __LINUX__
|
||||
OBJS = $OBJ_DIR/$(OBJS: = $OBJ_DIR/)
|
||||
|
||||
!else
|
||||
OBJS = $OBJ_DIR\$(OBJS: = $OBJ_DIR\)
|
||||
!endif
|
||||
|
||||
RESOURCE = $(OBJ_DIR)$(DS)curl.res
|
||||
|
||||
all: tool_hugehelp.c $(OBJ_DIR) curl.exe .SYMBOLIC
|
||||
@echo Welcome to cURL
|
||||
|
||||
hugehelp.c: hugehelp.c.cvs
|
||||
copy hugehelp.c.cvs hugehelp.c
|
||||
clean: .SYMBOLIC
|
||||
-$(RM) $(OBJS)
|
||||
-$(RM) $(RESOURCE) $(LINK_ARG)
|
||||
|
||||
vclean distclean: clean .SYMBOLIC
|
||||
-$(RD) $(OBJ_DIR)
|
||||
-$(RM) curl.exe curl.map curl.sym tool_hugehelp.c
|
||||
|
||||
tool_hugehelp.c: tool_hugehelp.c.cvs
|
||||
$(CP) $[@ $^@
|
||||
|
||||
tool_hugehelp.c.cvs: .EXISTSONLY
|
||||
$(CP) tool_hugehelp.c $^@
|
||||
|
||||
$(OBJ_DIR):
|
||||
mkdir $(OBJ_DIR)
|
||||
-$(MD) $^@
|
||||
|
||||
curl.exe: $(OBJS) $(RESOURCE)
|
||||
wlink name $@ system nt file { $(OBJS) } &
|
||||
option quiet, map, caseexact, eliminate, res=$(RESOURCE) &
|
||||
libpath $(%watcom)\lib386;$(%watcom)\lib386\nt &
|
||||
library ..\lib\libcurl_wc_imp.lib, clib3r.lib, ws2_32.lib
|
||||
|
||||
clean: .SYMBOLIC
|
||||
- rm -f $(OBJS) $(RESOURCE)
|
||||
|
||||
vclean realclean: clean .SYMBOLIC
|
||||
- rm -f curl.exe curl.map hugehelp.c
|
||||
- rmdir $(OBJ_DIR)
|
||||
curl.exe: $(OBJS) $(RESOURCE) $(LINK_ARG)
|
||||
$(LD) name $^@ @$]@
|
||||
|
||||
$(RESOURCE): curl.rc
|
||||
wrc -dCURLDEBUG=1 -q -r -zm -I..\include -fo=$@ curl.rc
|
||||
$(RC) $(DEBUG) -q -r -zm -bt=nt -I..$(DS)include $(SYS_INCL) $[@ -fo=$^@
|
||||
|
||||
# suffix search path - vpath-like hack
|
||||
.c: ..$(DS)lib
|
||||
|
||||
.ERASE
|
||||
.c{$(OBJ_DIR)}.obj:
|
||||
$(CC) $[@ $(CFLAGS) -fo=$@
|
||||
$(CC) $(CFLAGS) $[@ -fo=$^@
|
||||
|
||||
.ERASE
|
||||
$(OBJ_DIR)\rawstr.obj: ..\lib\rawstr.c
|
||||
$(CC) $[@ $(CFLAGS) -fo=$@
|
||||
$(LINK_ARG): $(__MAKEFILES__)
|
||||
%create $^@
|
||||
@%append $^@ system nt
|
||||
@%append $^@ file { $(OBJS) }
|
||||
!ifdef %debug
|
||||
@%append $^@ debug all
|
||||
@%append $^@ option symfile
|
||||
!endif
|
||||
@%append $^@ option quiet, map, caseexact, eliminate,
|
||||
@%append $^@ res=$(RESOURCE) libpath $(SYS_LIBS)
|
||||
!ifdef %curl_static
|
||||
@%append $^@ library wldap32.lib
|
||||
@%append $^@ library ..$(DS)lib$(DS)$(LIBNAME).lib
|
||||
!ifdef %use_zlib
|
||||
@%append $^@ library $(ZLIB_ROOT)$(DS)zlib.lib
|
||||
!endif
|
||||
!ifdef %use_rtmp
|
||||
@%append $^@ library $(LIBRTMP_ROOT)$(DS)librtmp$(DS)librtmp.lib, winmm.lib
|
||||
!endif
|
||||
!ifdef %use_ssh2
|
||||
@%append $^@ library $(LIBSSH2_ROOT)$(DS)win32$(DS)libssh2.lib
|
||||
!endif
|
||||
!ifdef %use_ssl
|
||||
@%append $^@ library $(OPENSSL_ROOT)$(DS)out32$(DS)libeay32.lib, $(OPENSSL_ROOT)$(DS)out32$(DS)ssleay32.lib
|
||||
!endif
|
||||
!ifdef %use_ares
|
||||
@%append $^@ library $(ARES_ROOT)$(DS)cares.lib
|
||||
!endif
|
||||
!ifdef %use_winidn
|
||||
! if $(__VERSION__) > 1290
|
||||
@%append $^@ library normaliz.lib
|
||||
! else
|
||||
@%append $^@ import '_IdnToAscii@20' 'NORMALIZ.DLL'.'IdnToAscii'
|
||||
@%append $^@ import '_IdnToUnicode@20' 'NORMALIZ.DLL'.'IdnToUnicode'
|
||||
! endif
|
||||
!endif
|
||||
!else
|
||||
@%append $^@ library ..$(DS)lib$(DS)$(LIBNAME)_imp.lib
|
||||
!endif
|
||||
!ifeq USE_WATT32 1
|
||||
@%append $^@ library $(%watt_root)$(DS)lib$(DS)wattcpw_imp.lib
|
||||
!else
|
||||
@%append $^@ library ws2_32.lib
|
||||
!endif
|
||||
|
||||
#
|
||||
# Dependencies based on "gcc -MM .."
|
||||
#
|
||||
$(OBJ_DIR)\getpass.obj: getpass.c setup.h config-win32.h ..\lib\setup_once.h getpass.h &
|
||||
..\lib\memdebug.h ..\lib\setup.h ..\lib\config-win32.h &
|
||||
..\include\curl\curlbuild.h ..\include\curl\curlrules.h &
|
||||
..\include\curl\curl.h ..\include\curl\curlver.h &
|
||||
..\include\curl\curlrules.h ..\include\curl\easy.h &
|
||||
..\include\curl\multi.h ..\include\curl\curl.h
|
||||
|
||||
$(OBJ_DIR)\homedir.obj: homedir.c setup.h config-win32.h ..\lib\setup_once.h homedir.h &
|
||||
..\lib\memdebug.h ..\lib\setup.h ..\lib\config-win32.h &
|
||||
..\include\curl\curlbuild.h ..\include\curl\curlrules.h &
|
||||
..\include\curl\curl.h ..\include\curl\curlver.h &
|
||||
..\include\curl\curlrules.h ..\include\curl\easy.h &
|
||||
..\include\curl\multi.h ..\include\curl\curl.h
|
||||
|
||||
$(OBJ_DIR)\hugehelp.obj: hugehelp.c
|
||||
|
||||
$(OBJ_DIR)\main.obj: main.c setup.h config-win32.h ..\lib\setup_once.h &
|
||||
..\include\curl\curl.h ..\include\curl\curlver.h &
|
||||
..\include\curl\curlbuild.h ..\include\curl\curlrules.h &
|
||||
..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
|
||||
urlglob.h writeout.h getpass.h homedir.h curlutil.h hugehelp.h &
|
||||
version.h ..\include\curl\curlver.h ..\lib\curlx.h &
|
||||
..\include\curl\mprintf.h ..\lib\strequal.h ..\lib\strtoofft.h &
|
||||
..\lib\setup.h ..\lib\config-win32.h ..\include\curl\curlbuild.h &
|
||||
..\include\curl\curlrules.h ..\lib\timeval.h ..\lib\memdebug.h
|
||||
|
||||
$(OBJ_DIR)\urlglob.obj: urlglob.c setup.h config-win32.h ..\lib\setup_once.h &
|
||||
..\include\curl\curl.h ..\include\curl\curlver.h &
|
||||
..\include\curl\curlbuild.h ..\include\curl\curlrules.h &
|
||||
..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
|
||||
..\include\curl\mprintf.h urlglob.h ..\lib\memdebug.h ..\lib\setup.h &
|
||||
..\lib\config-win32.h ..\include\curl\curlbuild.h &
|
||||
..\include\curl\curlrules.h
|
||||
|
||||
$(OBJ_DIR)\writeenv.obj: writeenv.c setup.h config-win32.h ..\lib\setup_once.h
|
||||
|
||||
$(OBJ_DIR)\writeout.obj: writeout.c setup.h config-win32.h ..\lib\setup_once.h &
|
||||
..\include\curl\curl.h ..\include\curl\curlver.h &
|
||||
..\include\curl\curlbuild.h ..\include\curl\curlrules.h &
|
||||
..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
|
||||
..\include\curl\mprintf.h writeout.h
|
||||
|
||||
$(OBJ_DIR)\curlutil.obj: curlutil.c setup.h config-win32.h ..\lib\setup_once.h &
|
||||
curlutil.h
|
||||
|
||||
$(OBJ_DIR)\rawstr.obj: ..\lib\rawstr.c ..\lib\setup.h ..\lib\config-win32.h &
|
||||
..\include\curl\curlbuild.h ..\include\curl\curlrules.h ..\lib\setup_once.h &
|
||||
..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\curlrules.h &
|
||||
..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
|
||||
..\lib\strerror.h ..\lib\urldata.h ..\lib\cookie.h ..\lib\formdata.h &
|
||||
..\lib\timeval.h ..\lib\http_chunks.h ..\lib\hostip.h ..\lib\hash.h &
|
||||
..\lib\llist.h ..\lib\splay.h ..\include\curl\mprintf.h
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1998 - 2008, Daniel Stenberg, <[email protected]>, et al.
|
||||
# Copyright (C) 1998 - 2013, Daniel Stenberg, <[email protected]>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
@@ -18,7 +18,6 @@
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
# $Id: Makefile.am,v 1.59 2008-08-29 02:08:11 yangtse Exp $
|
||||
###########################################################################
|
||||
AUTOMAKE_OPTIONS = foreign nostdinc
|
||||
|
||||
@@ -27,59 +26,82 @@ AUTOMAKE_OPTIONS = foreign nostdinc
|
||||
# being currently built and tested are searched before the library which
|
||||
# might possibly already be installed in the system.
|
||||
#
|
||||
# $(top_builddir)/include is for libcurl's generated curl/curlbuild.h file
|
||||
# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
|
||||
# $(top_builddir)/include for generated curlbuild.h inc. from lib/curl_setup.h
|
||||
# $(top_srcdir)/include is for libcurl's external include files
|
||||
# $(top_builddir)/lib is for libcurl's generated lib/config.h file
|
||||
# $(top_builddir)/src is for curl's generated src/config.h file
|
||||
# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files
|
||||
# $(top_srcdir)/src is for curl's src/setup.h and "curl-private" files
|
||||
# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
|
||||
# $(top_builddir)/src is for curl's generated src/curl_config.h file
|
||||
# $(top_srcdir)/lib for libcurl's lib/curl_setup.h and other "borrowed" files
|
||||
# $(top_srcdir)/src is for curl's src/tool_setup.h and "curl-private" files
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_builddir)/lib \
|
||||
-I$(top_builddir)/src \
|
||||
-I$(top_srcdir)/lib \
|
||||
-I$(top_srcdir)/src
|
||||
AM_CPPFLAGS = -I$(top_builddir)/include/curl \
|
||||
-I$(top_builddir)/include \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_builddir)/lib \
|
||||
-I$(top_builddir)/src \
|
||||
-I$(top_srcdir)/lib \
|
||||
-I$(top_srcdir)/src
|
||||
|
||||
bin_PROGRAMS = curl
|
||||
|
||||
# Mostly for Windows build targets, when using static libcurl
|
||||
if USE_CPPFLAG_CURL_STATICLIB
|
||||
AM_CPPFLAGS += -DCURL_STATICLIB
|
||||
endif
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
curl_LDADD = ../lib/libcurl.la @CURL_LIBS@
|
||||
curl_DEPENDENCIES = ../lib/libcurl.la
|
||||
BUILT_SOURCES = hugehelp.c
|
||||
CLEANFILES = hugehelp.c
|
||||
# This might hold -Werror
|
||||
CFLAGS += @CURL_CFLAG_EXTRAS@
|
||||
|
||||
# Prevent LIBS from being used for all link targets
|
||||
LIBS = $(BLANK_AT_MAKETIME)
|
||||
|
||||
if USE_EXPLICIT_LIB_DEPS
|
||||
curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @LIBCURL_LIBS@
|
||||
else
|
||||
curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
|
||||
endif
|
||||
|
||||
curl_LDFLAGS = @LIBMETALINK_LDFLAGS@
|
||||
curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS)
|
||||
curl_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
|
||||
|
||||
BUILT_SOURCES = tool_hugehelp.c
|
||||
CLEANFILES = tool_hugehelp.c
|
||||
# Use the C locale to ensure that only ASCII characters appear in the
|
||||
# embedded text.
|
||||
NROFF=env LC_ALL=C @NROFF@ @MANOPT@ # figured out by the configure script
|
||||
|
||||
EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32 Makefile.m32 \
|
||||
Makefile.riscos config.h.in macos/curl.mcp.xml.sit.hqx \
|
||||
macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp curlsrc.dsp \
|
||||
macos/src/macos_main.cpp config-amigaos.h makefile.amiga curl.rc \
|
||||
Makefile.netware Makefile.inc Makefile.Watcom curlsrc.dsw
|
||||
macos/curl.mcp.xml.sit.hqx \
|
||||
macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp vc6curlsrc.dsp \
|
||||
macos/src/macos_main.cpp makefile.amiga curl.rc \
|
||||
Makefile.netware Makefile.inc Makefile.Watcom vc6curlsrc.dsw \
|
||||
CMakeLists.txt
|
||||
|
||||
MANPAGE=$(top_srcdir)/docs/curl.1
|
||||
README=$(top_srcdir)/docs/MANUAL
|
||||
MKHELP=$(top_srcdir)/src/mkhelp.pl
|
||||
HUGE=hugehelp.c
|
||||
HUGE=tool_hugehelp.c
|
||||
|
||||
if USE_MANUAL
|
||||
# Here are the stuff to create a built-in manual
|
||||
|
||||
if HAVE_LIBZ
|
||||
# This generates the hugehelp.c file in both uncompressed and compressed formats
|
||||
# This generates the tool_hugehelp.c file in both uncompressed and
|
||||
# compressed formats
|
||||
$(HUGE): $(README) $(MANPAGE) mkhelp.pl
|
||||
echo '#include "setup.h"' > $(HUGE)
|
||||
echo '#include "tool_setup.h"' > $(HUGE)
|
||||
echo '#ifndef HAVE_LIBZ' >> $(HUGE)
|
||||
$(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE)
|
||||
echo '#else' >> $(HUGE)
|
||||
$(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c $(README) >> $(HUGE)
|
||||
echo '#endif /* HAVE_LIBZ */' >> $(HUGE)
|
||||
else # HAVE_LIBZ
|
||||
# This generates the hugehelp.c file uncompressed only
|
||||
# This generates the tool_hugehelp.c file uncompressed only
|
||||
$(HUGE): $(README) $(MANPAGE) mkhelp.pl
|
||||
echo '#include "setup.h"' > $(HUGE)
|
||||
echo '#include "tool_setup.h"' > $(HUGE)
|
||||
$(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE)
|
||||
endif
|
||||
|
||||
@@ -87,6 +109,16 @@ else # USE_MANUAL
|
||||
# built-in manual has been disabled, make a blank file
|
||||
$(HUGE):
|
||||
echo "/* built-in manual is disabled, blank function */" > $(HUGE)
|
||||
echo '#include "hugehelp.h"' >> $(HUGE)
|
||||
echo '#include "tool_hugehelp.h"' >> $(HUGE)
|
||||
echo "void hugehelp(void) {}" >>$(HUGE)
|
||||
endif
|
||||
|
||||
# ignore tool_hugehelp.c since it is generated source code and it plays
|
||||
# by slightly different rules!
|
||||
checksrc:
|
||||
@@PERL@ $(top_srcdir)/lib/checksrc.pl -D$(top_srcdir)/src -Wtool_hugehelp.c $(CURL_CFILES) $(CURL_HFILES)
|
||||
|
||||
if CURLDEBUG
|
||||
# for debug builds, we scan the sources on all regular make invokes
|
||||
all-local: checksrc
|
||||
endif
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
############################################################
|
||||
# $Id: Makefile.b32,v 1.11 2004/11/14 13:51:33 giva Exp $
|
||||
#
|
||||
# Makefile.b32 - Borland's C++ Compiler 5.X
|
||||
#
|
||||
@@ -7,84 +6,112 @@
|
||||
#
|
||||
# 'BCCDIR' has to be set up to point to the base directory
|
||||
# of the compiler, i.e. SET BCCDIR = c:\Borland\BCC55
|
||||
# where c:\Borland\BCC55 is the compiler is installed
|
||||
#
|
||||
# Written by Jaepil Kim, [email protected]
|
||||
# Initially written by Jaepil Kim, [email protected]
|
||||
############################################################
|
||||
|
||||
!if "$(__MAKE__)" == ""
|
||||
!error __MAKE__ not defined. Use Borlands's MAKE to process this makefile.
|
||||
!endif
|
||||
|
||||
# Borland's $(MAKEDIR) expands to the path where make.exe is located,
|
||||
# use this feature to define BCCDIR when user has not defined BCCDIR.
|
||||
!ifndef BCCDIR
|
||||
BCCDIR = $(MAKEDIR)\..
|
||||
!endif
|
||||
|
||||
# Edit the path below to point to the base of your Zlib sources.
|
||||
!ifndef ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.1
|
||||
ZLIB_PATH = ..\..\zlib-1.2.7
|
||||
!endif
|
||||
|
||||
# Edit the path below to point to the base of your OpenSSL package.
|
||||
!ifndef OPENSSL_PATH
|
||||
OPENSSL_PATH = ../../openssl-0.9.7d
|
||||
OPENSSL_PATH = ..\..\openssl-0.9.8x
|
||||
!endif
|
||||
|
||||
# Set program's name
|
||||
PROGNAME = curl.exe
|
||||
|
||||
# Setup environment
|
||||
CXX = bcc32
|
||||
CC_CMD = bcc32 -q -c
|
||||
LD = bcc32
|
||||
CP = copy
|
||||
RM = del
|
||||
LIB = tlib
|
||||
RM = del 2>NUL
|
||||
MKDIR = md
|
||||
RMDIR = rd /q 2>nul
|
||||
COPY = $(COMSPEC) /c copy /y
|
||||
|
||||
CXXFLAGS = -q -5 -O2 -w-aus -w-ccc -w-csu -w-par -w-pia -w-rch -w-inl -w-ngu -w-pro -tWM
|
||||
CC_FLAGS = -5 -O2 -tWM -w -w-aus -w-ccc -w-dup -w-prc -w-pro -w-rch -w-sig -w-spa -w-inl -w-pia -w-pin -Dinline=__inline
|
||||
LDFLAGS = -q -lq -lap
|
||||
|
||||
INCDIRS = -I.;../include;../lib
|
||||
LINKLIB = $(BCCDIR)/lib/cw32mt.lib
|
||||
|
||||
# If you build with SSL support, set WITH_SSL=1
|
||||
SRCDIRS = .;..\lib
|
||||
OBJDIR = .\BCC_objs
|
||||
INCDIRS = -I.;..\include;..\lib
|
||||
LINKLIB = $(BCCDIR)\lib\cw32mt.lib
|
||||
DEFINES = -DNDEBUG -DWIN32
|
||||
|
||||
!ifdef DYNAMIC
|
||||
LIBCURL_LIB = ../lib/libcurl_imp.lib
|
||||
LIBCURL_LIB = ..\lib\libcurl_imp.lib
|
||||
!else
|
||||
LIBCURL_LIB = ../lib/libcurl.lib
|
||||
LIBCURL_LIB = ..\lib\libcurl.lib
|
||||
DEFINES = $(DEFINES) -DCURL_STATICLIB
|
||||
!endif
|
||||
|
||||
# ZLIB support is enabled setting WITH_ZLIB=1
|
||||
!ifdef WITH_ZLIB
|
||||
DEFINES = $(DEFINES) -DHAVE_LIBZ -DHAVE_ZLIB_H
|
||||
INCDIRS = $(INCDIRS);$(ZLIB_PATH)
|
||||
LINKLIB = $(LINKLIB) $(ZLIB_PATH)/zlib.lib
|
||||
LINKLIB = $(LINKLIB) $(ZLIB_PATH)\zlib.lib
|
||||
!endif
|
||||
|
||||
# SSL support is enabled setting WITH_SSL=1
|
||||
!ifdef WITH_SSL
|
||||
DEFINES = $(DEFINES) -DUSE_SSLEAY
|
||||
INCDIRS = $(INCDIRS);$(OPENSSL_PATH)/inc32;$(OPENSSL_PATH)/inc32/openssl
|
||||
LINKLIB = $(LINKLIB) $(OPENSSL_PATH)/out32/ssleay32.lib $(OPENSSL_PATH)/out32/libeay32.lib
|
||||
INCDIRS = $(INCDIRS);$(OPENSSL_PATH)\inc32;$(OPENSSL_PATH)\inc32\openssl
|
||||
LINKLIB = $(LINKLIB) $(OPENSSL_PATH)\out32\ssleay32.lib $(OPENSSL_PATH)\out32\libeay32.lib
|
||||
!endif
|
||||
|
||||
.autodepend
|
||||
|
||||
.path.c = $(SRCDIRS)
|
||||
.path.obj = $(OBJDIR)
|
||||
|
||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
||||
top_srcdir = ..
|
||||
!include Makefile.inc
|
||||
|
||||
CSOURCES = $(CURL_SOURCES) $(CURLX_ONES)
|
||||
CSOURCES = $(CURL_CFILES) $(CURLX_ONES:../lib/=)
|
||||
OBJECTS = $(CSOURCES:.c=.obj)
|
||||
|
||||
.c.obj:
|
||||
$(CXX) -c $(INCDIRS) $(CXXFLAGS) $(DEFINES) $<
|
||||
$(CC_CMD) $(CC_FLAGS) $(INCDIRS) $(DEFINES) -o$@ $<
|
||||
|
||||
all: $(PROGNAME)
|
||||
all: $(OBJDIR) tool_hugehelp $(PROGNAME)
|
||||
|
||||
clean:
|
||||
-$(RM) $(PROGNAME)
|
||||
-$(RM) *.obj
|
||||
-$(RM) hugehelp.c
|
||||
cd $(OBJDIR)
|
||||
@-$(RM) $(OBJECTS)
|
||||
cd ..
|
||||
@-$(RMDIR) $(OBJDIR)
|
||||
@-$(RM) $(PROGNAME)
|
||||
@-$(RM) curl.tds
|
||||
|
||||
$(OBJDIR):
|
||||
@-$(RMDIR) $(OBJDIR)
|
||||
@-$(MKDIR) $(OBJDIR)
|
||||
|
||||
!ifdef WITH_ZLIB
|
||||
tool_hugehelp: ..\docs\MANUAL ..\docs\curl.1 mkhelp.pl
|
||||
groff -Tascii -man -P -c ../docs/curl.1 > tool_hugehelp.tmp
|
||||
perl -w mkhelp.pl -c ../docs/MANUAL < tool_hugehelp.tmp > tool_hugehelp.c
|
||||
@-$(RM) tool_hugehelp.tmp
|
||||
!else
|
||||
tool_hugehelp:
|
||||
$(COPY) tool_hugehelp.c.cvs tool_hugehelp.c
|
||||
!endif
|
||||
|
||||
$(PROGNAME): $(OBJECTS) $(LIBCURL_LIB) $(LINKLIB)
|
||||
@-$(RM) $@
|
||||
@-$(RM) $(PROGNAME)
|
||||
$(LD) $(LDFLAGS) -e$@ $**
|
||||
|
||||
hugehelp.c: hugehelp.c.cvs
|
||||
@echo Creating $@
|
||||
@$(CP) $** $@
|
||||
|
||||
|
||||
# End of Makefile.b32
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,102 @@
|
||||
# ./src/Makefile.inc
|
||||
|
||||
# Using the backslash as line continuation character might be problematic
|
||||
# with some make flavours, as Watcom's wmake showed us already. If we
|
||||
# ever want to change this in a portable manner then we should consider
|
||||
# this idea (posted to the libcurl list by Adam Kellas):
|
||||
# CSRC1 = file1.c file2.c file3.c
|
||||
# CSRC2 = file4.c file5.c file6.c
|
||||
# CSOURCES = $(CSRC1) $(CSRC2)
|
||||
|
||||
# libcurl has sources that provide functions named curlx_* that aren't part of
|
||||
# the official API, but we re-use the code here to avoid duplication.
|
||||
CURLX_ONES = $(top_srcdir)/lib/strtoofft.c \
|
||||
$(top_srcdir)/lib/strdup.c \
|
||||
$(top_srcdir)/lib/rawstr.c
|
||||
CURLX_ONES = \
|
||||
../lib/strtoofft.c \
|
||||
../lib/strdup.c \
|
||||
../lib/rawstr.c \
|
||||
../lib/nonblock.c
|
||||
|
||||
CURL_SOURCES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \
|
||||
getpass.c homedir.c curlutil.c
|
||||
CURL_CFILES = \
|
||||
tool_binmode.c \
|
||||
tool_bname.c \
|
||||
tool_cb_dbg.c \
|
||||
tool_cb_hdr.c \
|
||||
tool_cb_prg.c \
|
||||
tool_cb_rea.c \
|
||||
tool_cb_see.c \
|
||||
tool_cb_wrt.c \
|
||||
tool_cfgable.c \
|
||||
tool_convert.c \
|
||||
tool_dirhie.c \
|
||||
tool_doswin.c \
|
||||
tool_easysrc.c \
|
||||
tool_formparse.c \
|
||||
tool_getparam.c \
|
||||
tool_getpass.c \
|
||||
tool_help.c \
|
||||
tool_helpers.c \
|
||||
tool_homedir.c \
|
||||
tool_hugehelp.c \
|
||||
tool_libinfo.c \
|
||||
tool_main.c \
|
||||
tool_metalink.c \
|
||||
tool_mfiles.c \
|
||||
tool_msgs.c \
|
||||
tool_operate.c \
|
||||
tool_operhlp.c \
|
||||
tool_panykey.c \
|
||||
tool_paramhlp.c \
|
||||
tool_parsecfg.c \
|
||||
tool_setopt.c \
|
||||
tool_sleep.c \
|
||||
tool_urlglob.c \
|
||||
tool_util.c \
|
||||
tool_vms.c \
|
||||
tool_writeenv.c \
|
||||
tool_writeout.c \
|
||||
tool_xattr.c
|
||||
|
||||
CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \
|
||||
config-riscos.h urlglob.h version.h \
|
||||
writeout.h writeenv.h getpass.h homedir.h curlutil.h
|
||||
|
||||
curl_SOURCES = $(CURL_SOURCES) $(CURLX_ONES) $(CURL_HFILES)
|
||||
CURL_HFILES = \
|
||||
tool_binmode.h \
|
||||
tool_bname.h \
|
||||
tool_cb_dbg.h \
|
||||
tool_cb_hdr.h \
|
||||
tool_cb_prg.h \
|
||||
tool_cb_rea.h \
|
||||
tool_cb_see.h \
|
||||
tool_cb_wrt.h \
|
||||
tool_cfgable.h \
|
||||
tool_convert.h \
|
||||
tool_dirhie.h \
|
||||
tool_doswin.h \
|
||||
tool_easysrc.h \
|
||||
tool_formparse.h \
|
||||
tool_getparam.h \
|
||||
tool_getpass.h \
|
||||
tool_help.h \
|
||||
tool_helpers.h \
|
||||
tool_homedir.h \
|
||||
tool_hugehelp.h \
|
||||
tool_libinfo.h \
|
||||
tool_main.h \
|
||||
tool_metalink.h \
|
||||
tool_mfiles.h \
|
||||
tool_msgs.h \
|
||||
tool_operate.h \
|
||||
tool_operhlp.h \
|
||||
tool_panykey.h \
|
||||
tool_paramhlp.h \
|
||||
tool_parsecfg.h \
|
||||
tool_sdecls.h \
|
||||
tool_setopt.h \
|
||||
tool_setup.h \
|
||||
tool_sleep.h \
|
||||
tool_urlglob.h \
|
||||
tool_util.h \
|
||||
tool_version.h \
|
||||
tool_vms.h \
|
||||
tool_writeenv.h \
|
||||
tool_writeout.h \
|
||||
tool_xattr.h
|
||||
|
||||
curl_SOURCES = $(CURL_CFILES) $(CURLX_ONES) $(CURL_HFILES)
|
||||
|
||||
|
||||
@@ -1,101 +1,261 @@
|
||||
#########################################################################
|
||||
# $Id: Makefile.m32,v 1.47 2008-11-13 01:39:10 gknauf Exp $
|
||||
###########################################################################
|
||||
#
|
||||
## Makefile for building curl.exe with MingW32 (GCC-3.2)
|
||||
## and optionally OpenSSL (0.9.8), libssh2 (0.18), zlib (1.2.3)
|
||||
## Makefile for building curl.exe with MingW (GCC-3.2 or later)
|
||||
## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3)
|
||||
##
|
||||
## Usage:
|
||||
## mingw32-make -f Makefile.m32 [SSL=1] [SSH2=1] [ZLIB=1] [IDN=1] [SSPI=1] [IPV6=1] [LDAPS=1] [DYN=1]
|
||||
## Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
|
||||
## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn
|
||||
##
|
||||
## Hint: you can also set environment vars to control the build, f.e.:
|
||||
## set ZLIB_PATH=c:/zlib-1.2.3
|
||||
## set ZLIB_PATH=c:/zlib-1.2.7
|
||||
## set ZLIB=1
|
||||
##
|
||||
## Comments to: Troy Engel <[email protected]> or
|
||||
## Joern Hartroth <[email protected]>
|
||||
#########################################################################
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
# Edit the path below to point to the base of your Zlib sources.
|
||||
ifndef ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.3
|
||||
ZLIB_PATH = ../../zlib-1.2.7
|
||||
endif
|
||||
# Edit the path below to point to the base of your OpenSSL package.
|
||||
ifndef OPENSSL_PATH
|
||||
OPENSSL_PATH = ../../openssl-0.9.8i
|
||||
OPENSSL_PATH = ../../openssl-0.9.8x
|
||||
endif
|
||||
# Edit the path below to point to the base of your LibSSH2 package.
|
||||
ifndef LIBSSH2_PATH
|
||||
LIBSSH2_PATH = ../../libssh2-0.18
|
||||
LIBSSH2_PATH = ../../libssh2-1.4.3
|
||||
endif
|
||||
# Edit the path below to point to the base of your librtmp package.
|
||||
ifndef LIBRTMP_PATH
|
||||
LIBRTMP_PATH = ../../librtmp-2.3
|
||||
endif
|
||||
# Edit the path below to point to the base of your libmetalink package.
|
||||
ifndef LIBMETALINK_PATH
|
||||
LIBMETALINK_PATH = ../../libmetalink-0.1.2
|
||||
endif
|
||||
# Edit the path below to point to the base of your libexpat package.
|
||||
ifndef LIBEXPAT_PATH
|
||||
LIBEXPAT_PATH = ../../expat-2.1.0
|
||||
endif
|
||||
# Edit the path below to point to the base of your libxml2 package.
|
||||
ifndef LIBXML2_PATH
|
||||
LIBXML2_PATH = ../../libxml2-2.9.0
|
||||
endif
|
||||
# Edit the path below to point to the base of your libidn package.
|
||||
ifndef LIBIDN_PATH
|
||||
LIBIDN_PATH = ../../libidn-1.11
|
||||
LIBIDN_PATH = ../../libidn-1.18
|
||||
endif
|
||||
# Edit the path below to point to the base of your MS IDN package.
|
||||
# Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
|
||||
# http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815
|
||||
ifndef WINIDN_PATH
|
||||
WINIDN_PATH = ../../Microsoft IDN Mitigation APIs
|
||||
endif
|
||||
# Edit the path below to point to the base of your Novell LDAP NDK.
|
||||
ifndef LDAP_SDK
|
||||
LDAP_SDK = c:/novell/ndk/cldapsdk/win32
|
||||
endif
|
||||
|
||||
ARES_LIB = ../ares
|
||||
PROOT = ..
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -g -O2
|
||||
# Edit the path below to point to the base of your c-ares package.
|
||||
ifndef LIBCARES_PATH
|
||||
LIBCARES_PATH = $(PROOT)/ares
|
||||
endif
|
||||
|
||||
# Edit the var below to set to your architecture or set environment var.
|
||||
ifndef ARCH
|
||||
ARCH = w32
|
||||
endif
|
||||
|
||||
CC = $(CROSSPREFIX)gcc
|
||||
CFLAGS = -g -O2 -Wall
|
||||
CFLAGS += -fno-strict-aliasing
|
||||
ifeq ($(ARCH),w64)
|
||||
CFLAGS += -D_AMD64_
|
||||
endif
|
||||
# comment LDFLAGS below to keep debug info
|
||||
LDFLAGS = -s
|
||||
RC = windres
|
||||
RCFLAGS = --include-dir=../include -O COFF -i
|
||||
RM = del /q /f > NUL 2>&1
|
||||
CP = copy
|
||||
LDFLAGS = -s
|
||||
AR = $(CROSSPREFIX)ar
|
||||
RC = $(CROSSPREFIX)windres
|
||||
RCFLAGS = --include-dir=$(PROOT)/include -O COFF -i
|
||||
|
||||
# We may need these someday
|
||||
# PERL = perl
|
||||
# NROFF = nroff
|
||||
|
||||
# Platform-dependent helper tool macros
|
||||
ifeq ($(findstring /sh,$(SHELL)),/sh)
|
||||
DEL = rm -f $1
|
||||
RMDIR = rm -fr $1
|
||||
MKDIR = mkdir -p $1
|
||||
COPY = -cp -afv $1 $2
|
||||
#COPYR = -cp -afr $1/* $2
|
||||
COPYR = -rsync -aC $1/* $2
|
||||
TOUCH = touch $1
|
||||
CAT = cat
|
||||
ECHONL = echo ""
|
||||
DL = '
|
||||
else
|
||||
ifeq "$(OS)" "Windows_NT"
|
||||
DEL = -del 2>NUL /q /f $(subst /,\,$1)
|
||||
RMDIR = -rd 2>NUL /q /s $(subst /,\,$1)
|
||||
else
|
||||
DEL = -del 2>NUL $(subst /,\,$1)
|
||||
RMDIR = -deltree 2>NUL /y $(subst /,\,$1)
|
||||
endif
|
||||
MKDIR = -md 2>NUL $(subst /,\,$1)
|
||||
COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2)
|
||||
COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2)
|
||||
TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,,
|
||||
CAT = type
|
||||
ECHONL = $(ComSpec) /c echo.
|
||||
endif
|
||||
|
||||
########################################################
|
||||
## Nothing more to do below this line!
|
||||
|
||||
INCLUDES = -I. -I.. -I../include -I../lib
|
||||
LINK = $(CC) $(LDFLAGS) -o $@
|
||||
ifeq ($(findstring -dyn,$(CFG)),-dyn)
|
||||
DYN = 1
|
||||
endif
|
||||
ifeq ($(findstring -ares,$(CFG)),-ares)
|
||||
ARES = 1
|
||||
endif
|
||||
ifeq ($(findstring -rtmp,$(CFG)),-rtmp)
|
||||
RTMP = 1
|
||||
SSL = 1
|
||||
ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -ssh2,$(CFG)),-ssh2)
|
||||
SSH2 = 1
|
||||
SSL = 1
|
||||
ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -ssl,$(CFG)),-ssl)
|
||||
SSL = 1
|
||||
endif
|
||||
ifeq ($(findstring -zlib,$(CFG)),-zlib)
|
||||
ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -idn,$(CFG)),-idn)
|
||||
IDN = 1
|
||||
endif
|
||||
ifeq ($(findstring -winidn,$(CFG)),-winidn)
|
||||
WINIDN = 1
|
||||
endif
|
||||
ifeq ($(findstring -sspi,$(CFG)),-sspi)
|
||||
SSPI = 1
|
||||
endif
|
||||
ifeq ($(findstring -spnego,$(CFG)),-spnego)
|
||||
SPNEGO = 1
|
||||
endif
|
||||
ifeq ($(findstring -ldaps,$(CFG)),-ldaps)
|
||||
LDAPS = 1
|
||||
endif
|
||||
ifeq ($(findstring -ipv6,$(CFG)),-ipv6)
|
||||
IPV6 = 1
|
||||
endif
|
||||
ifeq ($(findstring -metalink,$(CFG)),-metalink)
|
||||
METALINK = 1
|
||||
endif
|
||||
ifeq ($(findstring -winssl,$(CFG)),-winssl)
|
||||
WINSSL = 1
|
||||
SSPI = 1
|
||||
endif
|
||||
|
||||
INCLUDES = -I. -I../include -I../lib
|
||||
|
||||
curl_PROGRAMS = curl.exe
|
||||
ifdef DYN
|
||||
curl_DEPENDENCIES = ../lib/libcurldll.a ../lib/libcurl.dll
|
||||
curl_LDADD = -L../lib -lcurldll
|
||||
curl_DEPENDENCIES = $(PROOT)/lib/libcurldll.a $(PROOT)/lib/libcurl.dll
|
||||
curl_LDADD = -L$(PROOT)/lib -lcurldll
|
||||
else
|
||||
curl_DEPENDENCIES = ../lib/libcurl.a
|
||||
curl_LDADD = -L../lib -lcurl
|
||||
curl_DEPENDENCIES = $(PROOT)/lib/libcurl.a
|
||||
curl_LDADD = -L$(PROOT)/lib -lcurl
|
||||
CFLAGS += -DCURL_STATICLIB
|
||||
LDFLAGS += -static
|
||||
endif
|
||||
ifdef ARES
|
||||
ifndef DYN
|
||||
curl_DEPENDENCIES += $(ARES_LIB)/libcares.a
|
||||
curl_DEPENDENCIES += $(LIBCARES_PATH)/libcares.a
|
||||
endif
|
||||
CFLAGS += -DUSE_ARES
|
||||
curl_LDADD += -L$(ARES_LIB) -lcares
|
||||
curl_LDADD += -L"$(LIBCARES_PATH)" -lcares
|
||||
endif
|
||||
ifdef RTMP
|
||||
CFLAGS += -DUSE_LIBRTMP
|
||||
curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
|
||||
endif
|
||||
ifdef SSH2
|
||||
CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
|
||||
curl_LDADD += -L$(LIBSSH2_PATH)/win32 -lssh2
|
||||
curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2
|
||||
endif
|
||||
ifdef SSL
|
||||
CFLAGS += -DUSE_SSLEAY -DHAVE_OPENSSL_ENGINE_H
|
||||
curl_LDADD += -L$(OPENSSL_PATH)/out -leay32 -lssl32
|
||||
ifndef OPENSSL_INCLUDE
|
||||
ifeq "$(wildcard $(OPENSSL_PATH)/outinc)" "$(OPENSSL_PATH)/outinc"
|
||||
OPENSSL_INCLUDE = $(OPENSSL_PATH)/outinc
|
||||
endif
|
||||
ifeq "$(wildcard $(OPENSSL_PATH)/include)" "$(OPENSSL_PATH)/include"
|
||||
OPENSSL_INCLUDE = $(OPENSSL_PATH)/include
|
||||
endif
|
||||
endif
|
||||
ifneq "$(wildcard $(OPENSSL_INCLUDE)/openssl/opensslv.h)" "$(OPENSSL_INCLUDE)/openssl/opensslv.h"
|
||||
$(error Invalid path to OpenSSL package: $(OPENSSL_PATH))
|
||||
endif
|
||||
ifndef OPENSSL_LIBPATH
|
||||
OPENSSL_LIBS = -lssl -lcrypto
|
||||
ifeq "$(wildcard $(OPENSSL_PATH)/out)" "$(OPENSSL_PATH)/out"
|
||||
OPENSSL_LIBPATH = $(OPENSSL_PATH)/out
|
||||
ifdef DYN
|
||||
OPENSSL_LIBS = -lssl32 -leay32
|
||||
endif
|
||||
endif
|
||||
ifeq "$(wildcard $(OPENSSL_PATH)/lib)" "$(OPENSSL_PATH)/lib"
|
||||
OPENSSL_LIBPATH = $(OPENSSL_PATH)/lib
|
||||
endif
|
||||
endif
|
||||
ifndef DYN
|
||||
OPENSSL_LIBS += -lgdi32 -lcrypt32
|
||||
endif
|
||||
INCLUDES += -I"$(OPENSSL_INCLUDE)"
|
||||
CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL
|
||||
curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
|
||||
endif
|
||||
ifdef ZLIB
|
||||
INCLUDES += -I"$(ZLIB_PATH)"
|
||||
CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
|
||||
curl_LDADD += -L$(ZLIB_PATH) -lz
|
||||
curl_LDADD += -L"$(ZLIB_PATH)" -lz
|
||||
endif
|
||||
ifdef IDN
|
||||
INCLUDES += -I"$(LIBIDN_PATH)/include"
|
||||
CFLAGS += -DUSE_LIBIDN
|
||||
curl_LDADD += -L$(LIBIDN_PATH)/lib -lidn
|
||||
curl_LDADD += -L"$(LIBIDN_PATH)/lib" -lidn
|
||||
else
|
||||
ifdef WINIDN
|
||||
CFLAGS += -DUSE_WIN32_IDN
|
||||
curl_LDADD += -L"$(WINIDN_PATH)" -lnormaliz
|
||||
endif
|
||||
endif
|
||||
ifdef METALINK
|
||||
INCLUDES += -I"$(LIBMETALINK_PATH)/include"
|
||||
CFLAGS += -DUSE_METALINK
|
||||
curl_LDADD += -L"$(LIBMETALINK_PATH)/lib" -lmetalink
|
||||
ifndef DYN
|
||||
ifeq ($(findstring libexpat_metalink_parser.o,$(shell $(AR) t "$(LIBMETALINK_PATH)/lib/libmetalink.a")),libexpat_metalink_parser.o)
|
||||
curl_LDADD += -L"$(LIBEXPAT_PATH)/lib" -lexpat
|
||||
else
|
||||
curl_LDADD += -L"$(LIBXML2_PATH)/lib" -lxml2
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifdef SSPI
|
||||
CFLAGS += -DUSE_WINDOWS_SSPI
|
||||
ifdef WINSSL
|
||||
CFLAGS += -DUSE_SCHANNEL
|
||||
endif
|
||||
endif
|
||||
ifdef SPNEGO
|
||||
CFLAGS += -DHAVE_SPNEGO
|
||||
endif
|
||||
ifdef IPV6
|
||||
CFLAGS += -DENABLE_IPV6
|
||||
CFLAGS += -DENABLE_IPV6 -D_WIN32_WINNT=0x0501
|
||||
endif
|
||||
ifdef LDAPS
|
||||
CFLAGS += -DHAVE_LDAP_SSL
|
||||
@@ -114,47 +274,48 @@ curl_LDADD += -lwldap32
|
||||
endif
|
||||
endif
|
||||
curl_LDADD += -lws2_32
|
||||
COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
|
||||
|
||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
||||
include Makefile.inc
|
||||
|
||||
curl_OBJECTS := $(patsubst %.c,%.o,$(strip $(CURL_SOURCES)))
|
||||
# curlx_OBJECTS := $(patsubst %.c,%.o,$(notdir $(strip $(CURLX_ONES))))
|
||||
# vpath %.c ../lib
|
||||
curl_PROGRAMS = curl.exe
|
||||
curl_OBJECTS := $(patsubst %.c,%.o,$(strip $(CURL_CFILES)))
|
||||
curlx_OBJECTS := $(patsubst %.c,%.o,$(notdir $(strip $(CURLX_ONES))))
|
||||
ifdef DYN
|
||||
curl_OBJECTS += $(curlx_OBJECTS)
|
||||
vpath %.c $(PROOT)/lib
|
||||
endif
|
||||
|
||||
RESOURCE = curl.res
|
||||
|
||||
.SUFFIXES: .rc .res
|
||||
|
||||
all: curl.exe
|
||||
all: $(curl_PROGRAMS)
|
||||
|
||||
curl.exe: $(RESOURCE) $(curl_OBJECTS) $(curl_DEPENDENCIES)
|
||||
-$(RM) $@
|
||||
$(LINK) $< $(curl_OBJECTS) $(curl_LDADD)
|
||||
$(call DEL, $@)
|
||||
$(CC) $(LDFLAGS) -o $@ $< $(curl_OBJECTS) $(curl_LDADD)
|
||||
|
||||
# We don't have nroff normally under win32
|
||||
# hugehelp.c: ../README.curl ../curl.1 mkhelp.pl
|
||||
# -$(RM) hugehelp.c
|
||||
# $(NROFF) -man ../curl.1 | $(PERL) mkhelp.pl ../README.curl > hugehelp.c
|
||||
# tool_hugehelp.c: $(PROOT)/docs/MANUAL $(PROOT)/docs/curl.1 mkhelp.pl
|
||||
# @$(call DEL, tool_hugehelp.c)
|
||||
# $(NROFF) -man $(PROOT)/docs/curl.1 | $(PERL) mkhelp.pl $(PROOT)/docs/MANUAL > tool_hugehelp.c
|
||||
|
||||
hugehelp.c:
|
||||
tool_hugehelp.c:
|
||||
@echo Creating $@
|
||||
@$(CP) hugehelp.c.cvs $@
|
||||
@$(call COPY, $@.cvs, $@)
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
%.o: %.c
|
||||
$(CC) $(INCLUDES) $(CFLAGS) -c $<
|
||||
|
||||
.rc.res:
|
||||
%.res: %.rc
|
||||
$(RC) $(RCFLAGS) $< -o $@
|
||||
|
||||
clean:
|
||||
ifeq "$(wildcard hugehelp.c.cvs)" "hugehelp.c.cvs"
|
||||
-$(RM) hugehelp.c
|
||||
ifeq "$(wildcard tool_hugehelp.c.cvs)" "tool_hugehelp.c.cvs"
|
||||
@$(call DEL, tool_hugehelp.c)
|
||||
endif
|
||||
-$(RM) $(curl_OBJECTS) $(RESOURCE)
|
||||
|
||||
distrib: clean
|
||||
-$(RM) $(curl_PROGRAMS)
|
||||
@$(call DEL, $(curl_OBJECTS) $(curlx_OBJECTS) $(RESOURCE))
|
||||
|
||||
distclean vclean: clean
|
||||
@$(call DEL, $(curl_PROGRAMS))
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
#################################################################
|
||||
# $Id: Makefile.netware,v 1.93 2008-11-13 01:39:10 gknauf Exp $
|
||||
#
|
||||
## Makefile for building curl.nlm (NetWare version - gnu make)
|
||||
## Use: make -f Makefile.netware
|
||||
##
|
||||
## Comments to: Guenter Knauf http://www.gknw.de/phpbb
|
||||
## Comments to: Guenter Knauf http://www.gknw.net/phpbb
|
||||
#
|
||||
#################################################################
|
||||
|
||||
@@ -15,22 +14,57 @@ endif
|
||||
|
||||
# Edit the path below to point to the base of your Zlib sources.
|
||||
ifndef ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.3
|
||||
ZLIB_PATH = ../../zlib-1.2.7
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your OpenSSL package.
|
||||
ifndef OPENSSL_PATH
|
||||
OPENSSL_PATH = ../../openssl-0.9.8i
|
||||
OPENSSL_PATH = ../../openssl-0.9.8x
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your LibSSH2 package.
|
||||
ifndef LIBSSH2_PATH
|
||||
LIBSSH2_PATH = ../../libssh2-0.18
|
||||
LIBSSH2_PATH = ../../libssh2-1.4.3
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your axTLS package.
|
||||
ifndef AXTLS_PATH
|
||||
AXTLS_PATH = ../../axTLS-1.2.7
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your libidn package.
|
||||
ifndef LIBIDN_PATH
|
||||
LIBIDN_PATH = ../../libidn-1.11
|
||||
LIBIDN_PATH = ../../libidn-1.18
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your librtmp package.
|
||||
ifndef LIBRTMP_PATH
|
||||
LIBRTMP_PATH = ../../librtmp-2.3
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your fbopenssl package.
|
||||
ifndef FBOPENSSL_PATH
|
||||
FBOPENSSL_PATH = ../../fbopenssl-0.4
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your libmetalink package.
|
||||
ifndef LIBMETALINK_PATH
|
||||
LIBMETALINK_PATH = ../../libmetalink-0.1.2
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your libexpat package.
|
||||
ifndef LIBEXPAT_PATH
|
||||
LIBEXPAT_PATH = ../../expat-2.1.0
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your libXML2 package.
|
||||
ifndef LIBXML2_PATH
|
||||
LIBXML2_PATH = ../../libxml2-2.8.0
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your c-ares package.
|
||||
ifndef LIBCARES_PATH
|
||||
LIBCARES_PATH = ../ares
|
||||
endif
|
||||
|
||||
ifndef INSTDIR
|
||||
@@ -81,13 +115,13 @@ else
|
||||
CC = gcc
|
||||
endif
|
||||
PERL = perl
|
||||
# a native win32 awk can be downloaded from here:
|
||||
# http://www.gknw.net/development/prgtools/awk-20070501.zip
|
||||
# Here you can find a native Win32 binary of the original awk:
|
||||
# http://www.gknw.net/development/prgtools/awk-20100523.zip
|
||||
AWK = awk
|
||||
CP = cp -afv
|
||||
MKDIR = mkdir
|
||||
# RM = rm -f
|
||||
# if you want to mark the target as MTSAFE you will need a tool for
|
||||
# If you want to mark the target as MTSAFE you will need a tool for
|
||||
# generating the xdc data for the linker; here's a minimal tool:
|
||||
# http://www.gknw.net/development/prgtools/mkxdc.zip
|
||||
MPKXDC = mkxdc
|
||||
@@ -110,13 +144,13 @@ CFLAGS += -relax_pointers
|
||||
#CFLAGS += -w on
|
||||
ifeq ($(LIBARCH),LIBC)
|
||||
ifeq ($(POSIXFL),1)
|
||||
PRELUDE = $(SDK_LIBC)/imports/posixpre.o
|
||||
PRELUDE = $(NDK_LIBC)/imports/posixpre.o
|
||||
else
|
||||
PRELUDE = $(SDK_LIBC)/imports/libcpre.o
|
||||
PRELUDE = $(NDK_LIBC)/imports/libcpre.o
|
||||
endif
|
||||
CFLAGS += -align 4
|
||||
else
|
||||
# PRELUDE = $(SDK_CLIB)/imports/clibpre.o
|
||||
# PRELUDE = $(NDK_CLIB)/imports/clibpre.o
|
||||
# to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
|
||||
PRELUDE = "$(MWCW_PATH)/libraries/runtime/prelude.obj"
|
||||
# CFLAGS += -include "$(MWCW_PATH)/headers/nlm_clib_prefix.h"
|
||||
@@ -126,16 +160,20 @@ else
|
||||
LD = nlmconv
|
||||
LDFLAGS = -T
|
||||
LIBEXT = a
|
||||
CFLAGS += -fno-builtin -fpcc-struct-return -fno-strict-aliasing
|
||||
CFLAGS += -m32
|
||||
CFLAGS += -fno-builtin -fno-strict-aliasing
|
||||
ifeq ($(findstring gcc,$(CC)),gcc)
|
||||
CFLAGS += -fpcc-struct-return
|
||||
endif
|
||||
CFLAGS += -Wall # -pedantic
|
||||
ifeq ($(LIBARCH),LIBC)
|
||||
ifeq ($(POSIXFL),1)
|
||||
PRELUDE = $(SDK_LIBC)/imports/posixpre.gcc.o
|
||||
PRELUDE = $(NDK_LIBC)/imports/posixpre.gcc.o
|
||||
else
|
||||
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
|
||||
PRELUDE = $(NDK_LIBC)/imports/libcpre.gcc.o
|
||||
endif
|
||||
else
|
||||
# PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
|
||||
# PRELUDE = $(NDK_CLIB)/imports/clibpre.gcc.o
|
||||
# to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
|
||||
# http://www.gknw.net/development/mk_nlm/gcc_pre.zip
|
||||
PRELUDE = $(NDK_ROOT)/pre/prelude.o
|
||||
@@ -144,26 +182,73 @@ endif
|
||||
endif
|
||||
|
||||
NDK_ROOT = $(NDKBASE)/ndk
|
||||
SDK_CLIB = $(NDK_ROOT)/nwsdk
|
||||
SDK_LIBC = $(NDK_ROOT)/libc
|
||||
SDK_LDAP = $(NDK_ROOT)/cldapsdk/netware
|
||||
ifndef NDK_CLIB
|
||||
NDK_CLIB = $(NDK_ROOT)/nwsdk
|
||||
endif
|
||||
ifndef NDK_LIBC
|
||||
NDK_LIBC = $(NDK_ROOT)/libc
|
||||
endif
|
||||
ifndef NDK_LDAP
|
||||
NDK_LDAP = $(NDK_ROOT)/cldapsdk/netware
|
||||
endif
|
||||
CURL_INC = ../include
|
||||
CURL_LIB = ../lib
|
||||
ARES_LIB = ../ares
|
||||
|
||||
INCLUDES = -I$(CURL_INC) -I$(CURL_LIB)
|
||||
|
||||
ifeq ($(findstring -static,$(CFG)),-static)
|
||||
LINK_STATIC = 1
|
||||
endif
|
||||
ifeq ($(findstring -ares,$(CFG)),-ares)
|
||||
WITH_ARES = 1
|
||||
endif
|
||||
ifeq ($(findstring -rtmp,$(CFG)),-rtmp)
|
||||
WITH_RTMP = 1
|
||||
WITH_SSL = 1
|
||||
WITH_ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -ssh2,$(CFG)),-ssh2)
|
||||
WITH_SSH2 = 1
|
||||
WITH_SSL = 1
|
||||
WITH_ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -axtls,$(CFG)),-axtls)
|
||||
WITH_AXTLS = 1
|
||||
WITH_SSL =
|
||||
else
|
||||
ifeq ($(findstring -ssl,$(CFG)),-ssl)
|
||||
WITH_SSL = 1
|
||||
endif
|
||||
endif
|
||||
ifeq ($(findstring -zlib,$(CFG)),-zlib)
|
||||
WITH_ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -idn,$(CFG)),-idn)
|
||||
WITH_IDN = 1
|
||||
endif
|
||||
ifeq ($(findstring -spnego,$(CFG)),-spnego)
|
||||
WITH_SPNEGO = 1
|
||||
WITH_SSL = 1
|
||||
endif
|
||||
ifeq ($(findstring -metalink,$(CFG)),-metalink)
|
||||
WITH_METALINK = 1
|
||||
WITH_SSL = 1
|
||||
endif
|
||||
ifeq ($(findstring -ipv6,$(CFG)),-ipv6)
|
||||
ENABLE_IPV6 = 1
|
||||
endif
|
||||
|
||||
ifdef LINK_STATIC
|
||||
LDLIBS = $(CURL_LIB)/libcurl.$(LIBEXT)
|
||||
ifdef WITH_ARES
|
||||
LDLIBS += $(ARES_LIB)/libcares.$(LIBEXT)
|
||||
LDLIBS += $(LIBCARES_PATH)/libcares.$(LIBEXT)
|
||||
endif
|
||||
else
|
||||
MODULES = libcurl.nlm
|
||||
IMPORTS = @$(CURL_LIB)/libcurl.imp
|
||||
endif
|
||||
ifdef WITH_SSH2
|
||||
INCLUDES += -I$(LIBSSH2_PATH)/include
|
||||
# INCLUDES += -I$(LIBSSH2_PATH)/include
|
||||
ifdef LINK_STATIC
|
||||
LDLIBS += $(LIBSSH2_PATH)/nw/libssh2.$(LIBEXT)
|
||||
else
|
||||
@@ -171,11 +256,31 @@ else
|
||||
IMPORTS += @$(LIBSSH2_PATH)/nw/libssh2.imp
|
||||
endif
|
||||
endif
|
||||
ifdef WITH_RTMP
|
||||
# INCLUDES += -I$(LIBRTMP_PATH)
|
||||
ifdef LINK_STATIC
|
||||
LDLIBS += $(LIBRTMP_PATH)/librtmp/librtmp.$(LIBEXT)
|
||||
endif
|
||||
endif
|
||||
ifdef WITH_SSL
|
||||
INCLUDES += -I$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)
|
||||
# INCLUDES += -I$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)
|
||||
LDLIBS += $(OPENSSL_PATH)/out_nw_$(LIBARCH_L)/ssl.$(LIBEXT)
|
||||
LDLIBS += $(OPENSSL_PATH)/out_nw_$(LIBARCH_L)/crypto.$(LIBEXT)
|
||||
IMPORTS += GetProcessSwitchCount RunningProcess
|
||||
ifdef WITH_SPNEGO
|
||||
# INCLUDES += -I$(FBOPENSSL_PATH)/include
|
||||
LDLIBS += $(FBOPENSSL_PATH)/nw/fbopenssl.$(LIBEXT)
|
||||
endif
|
||||
else
|
||||
ifdef WITH_AXTLS
|
||||
# INCLUDES += -I$(AXTLS_PATH)/inc
|
||||
ifdef LINK_STATIC
|
||||
LDLIBS += $(AXTLS_PATH)/lib/libaxtls.$(LIBEXT)
|
||||
else
|
||||
MODULES += libaxtls.nlm
|
||||
IMPORTS += $(AXTLS_PATH)/lib/libaxtls.imp
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifdef WITH_ZLIB
|
||||
INCLUDES += -I$(ZLIB_PATH)
|
||||
@@ -190,18 +295,38 @@ ifdef WITH_IDN
|
||||
# INCLUDES += -I$(LIBIDN_PATH)/include
|
||||
LDLIBS += $(LIBIDN_PATH)/lib/libidn.$(LIBEXT)
|
||||
endif
|
||||
ifdef WITH_METALINK
|
||||
CFLAGS += -DUSE_METALINK
|
||||
INCLUDES += -I$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)
|
||||
INCLUDES += -I$(LIBMETALINK_PATH)/include
|
||||
LDLIBS += $(LIBMETALINK_PATH)/lib/libmetalink.$(LIBEXT)
|
||||
ifdef WITH_LIBEXPAT
|
||||
ifeq ($(LIBARCH),LIBC)
|
||||
IMPORTS += @$(LIBEXPAT_PATH)/imports/expatlbc.imp
|
||||
MODULES += expatlbc
|
||||
else
|
||||
IMPORTS += @$(LIBEXPAT_PATH)/imports/expatlib.imp
|
||||
MODULES += expatlib
|
||||
endif
|
||||
else
|
||||
ifdef WITH_LIBXML2
|
||||
IMPORTS += @$(LIBXML2_PATH)/lib/libxml2.imp
|
||||
MODULES += libxml2
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(LIBARCH),LIBC)
|
||||
INCLUDES += -I$(SDK_LIBC)/include
|
||||
# INCLUDES += -I$(SDK_LIBC)/include/nks
|
||||
# INCLUDES += -I$(SDK_LIBC)/include/winsock
|
||||
INCLUDES += -I$(NDK_LIBC)/include
|
||||
# INCLUDES += -I$(NDK_LIBC)/include/nks
|
||||
# INCLUDES += -I$(NDK_LIBC)/include/winsock
|
||||
CFLAGS += -D_POSIX_SOURCE
|
||||
else
|
||||
INCLUDES += -I$(SDK_CLIB)/include/nlm
|
||||
# INCLUDES += -I$(SDK_CLIB)/include
|
||||
INCLUDES += -I$(NDK_CLIB)/include/nlm
|
||||
# INCLUDES += -I$(NDK_CLIB)/include
|
||||
endif
|
||||
ifndef DISABLE_LDAP
|
||||
# INCLUDES += -I$(SDK_LDAP)/$(LIBARCH_L)/inc
|
||||
# INCLUDES += -I$(NDK_LDAP)/$(LIBARCH_L)/inc
|
||||
endif
|
||||
CFLAGS += $(INCLUDES)
|
||||
|
||||
@@ -215,7 +340,7 @@ ifdef XDCOPT
|
||||
XDCDATA = $(OBJDIR)/$(TARGET).xdc
|
||||
endif
|
||||
|
||||
ifeq ($(findstring linux,$(OSTYPE)),linux)
|
||||
ifeq ($(findstring /sh,$(SHELL)),/sh)
|
||||
DL = '
|
||||
DS = /
|
||||
PCT = %
|
||||
@@ -229,13 +354,16 @@ endif
|
||||
include Makefile.inc
|
||||
|
||||
OBJX := $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(strip $(CURLX_ONES))))
|
||||
OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CURL_SOURCES))) $(OBJX)
|
||||
OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CURL_CFILES)))
|
||||
ifndef LINK_STATIC
|
||||
OBJS += $(OBJX)
|
||||
endif
|
||||
|
||||
vpath %.c $(CURL_LIB)
|
||||
|
||||
all: prebuild $(TARGET).nlm
|
||||
|
||||
prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h
|
||||
prebuild: $(OBJDIR) $(OBJDIR)/version.inc
|
||||
|
||||
$(OBJDIR)/%.o: %.c
|
||||
# @echo Compiling $<
|
||||
@@ -251,13 +379,12 @@ install: $(INSTDIR) all
|
||||
@$(CP) $(TARGET).nlm $(INSTDIR)
|
||||
|
||||
clean:
|
||||
ifeq "$(wildcard hugehelp.c.cvs)" "hugehelp.c.cvs"
|
||||
-$(RM) hugehelp.c
|
||||
ifeq "$(wildcard tool_hugehelp.c.cvs)" "tool_hugehelp.c.cvs"
|
||||
-$(RM) tool_hugehelp.c
|
||||
endif
|
||||
-$(RM) config.h
|
||||
-$(RM) -r $(OBJDIR)
|
||||
|
||||
distclean: clean
|
||||
distclean vclean: clean
|
||||
-$(RM) $(TARGET).nlm
|
||||
|
||||
$(OBJDIR) $(INSTDIR):
|
||||
@@ -307,15 +434,15 @@ endif
|
||||
ifeq ($(LIBARCH),CLIB)
|
||||
@echo $(DL)start _Prelude$(DL) >> $@
|
||||
@echo $(DL)exit _Stop$(DL) >> $@
|
||||
@echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_CLIB)/imports/clib.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_CLIB)/imports/threads.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_CLIB)/imports/socklib.imp$(DL) >> $@
|
||||
@echo $(DL)module clib$(DL) >> $@
|
||||
ifndef DISABLE_LDAP
|
||||
@echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapsdk.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapssl.imp$(DL) >> $@
|
||||
# @echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapx.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapsdk.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapssl.imp$(DL) >> $@
|
||||
# @echo $(DL)import @$(NDK_LDAP)/clib/imports/ldapx.imp$(DL) >> $@
|
||||
@echo $(DL)module ldapsdk ldapssl$(DL) >> $@
|
||||
endif
|
||||
else
|
||||
@@ -333,13 +460,13 @@ else
|
||||
@echo $(DL)exit _LibCPostlude$(DL) >> $@
|
||||
@echo $(DL)check _LibCCheckUnload$(DL) >> $@
|
||||
endif
|
||||
@echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_LIBC)/imports/libc.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_LIBC)/imports/netware.imp$(DL) >> $@
|
||||
@echo $(DL)module libc$(DL) >> $@
|
||||
ifndef DISABLE_LDAP
|
||||
@echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapsdk.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapssl.imp$(DL) >> $@
|
||||
# @echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapx.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapsdk.imp$(DL) >> $@
|
||||
@echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapssl.imp$(DL) >> $@
|
||||
# @echo $(DL)import @$(NDK_LDAP)/libc/imports/lldapx.imp$(DL) >> $@
|
||||
@echo $(DL)module lldapsdk lldapssl$(DL) >> $@
|
||||
endif
|
||||
endif
|
||||
@@ -361,202 +488,11 @@ endif
|
||||
@echo $(DL)output $(TARGET).nlm$(DL) >> $@
|
||||
endif
|
||||
|
||||
config.h: Makefile.netware
|
||||
tool_hugehelp.c:
|
||||
@echo Creating $@
|
||||
@echo $(DL)/* $@ for NetWare target.$(DL) > $@
|
||||
@echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
|
||||
@echo $(DL)** All your changes will be lost!!$(DL) >> $@
|
||||
@echo $(DL)*/$(DL) >> $@
|
||||
@echo $(DL)#ifndef NETWARE$(DL) >> $@
|
||||
@echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@
|
||||
@echo $(DL)#endif$(DL) >> $@
|
||||
@echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@
|
||||
@echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
|
||||
ifeq ($(LIBARCH),CLIB)
|
||||
@echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@
|
||||
@echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRICMP 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRNICMP 1$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG2 char$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG3 int$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG6 int$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_RETV int$(DL) >> $@
|
||||
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
|
||||
@echo $(DL)#define socklen_t int$(DL) >> $@
|
||||
@echo $(DL)#define pressanykey PressAnyKeyToContinue$(DL) >> $@
|
||||
else
|
||||
@echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRTOLL 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG2 void *$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
||||
@echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG2 void$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG3 size_t$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG6 size_t$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_RETV ssize_t$(DL) >> $@
|
||||
@echo $(DL)#define RECVFROM_TYPE_ARG2_IS_VOID 1$(DL) >> $@
|
||||
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG3 size_t$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
|
||||
@echo $(DL)#define SEND_TYPE_RETV ssize_t$(DL) >> $@
|
||||
@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
|
||||
@echo $(DL)#define SIZEOF_OFF_T 8$(DL) >> $@
|
||||
@echo $(DL)#define _LARGEFILE 1$(DL) >> $@
|
||||
ifdef ENABLE_IPV6
|
||||
@echo $(DL)#define ENABLE_IPV6 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_FREEADDRINFO 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_GETADDRINFO 1$(DL) >> $@
|
||||
endif
|
||||
endif
|
||||
@echo $(DL)#define USE_MANUAL 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_FIONBIO 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LL 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LOCALE_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LOCALTIME_R 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_RECV 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_RECVFROM 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SEND 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SETLOCALE 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_STRUCT_TIMEVAL 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_IOCTL_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_UTIME 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_WRITEV 1$(DL) >> $@
|
||||
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
||||
@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
|
||||
@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
|
||||
@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
|
||||
ifdef DISABLE_LDAP
|
||||
@echo $(DL)#define CURL_DISABLE_LDAP 1$(DL) >> $@
|
||||
else
|
||||
@echo $(DL)#define CURL_HAS_NOVELL_LDAPSDK 1$(DL) >> $@
|
||||
ifndef DISABLE_LDAPS
|
||||
@echo $(DL)#define HAVE_LDAP_SSL 1$(DL) >> $@
|
||||
endif
|
||||
@echo $(DL)#define HAVE_LDAP_SSL_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LDAP_URL_PARSE 1$(DL) >> $@
|
||||
endif
|
||||
ifdef NW_WINSOCK
|
||||
@echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@
|
||||
else
|
||||
@echo $(DL)#define USE_BSD_SOCKETS 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
|
||||
endif
|
||||
ifdef WITH_ARES
|
||||
@echo $(DL)#define USE_ARES 1$(DL) >> $@
|
||||
endif
|
||||
ifdef WITH_ZLIB
|
||||
@echo $(DL)#define HAVE_ZLIB_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LIBZ 1$(DL) >> $@
|
||||
endif
|
||||
ifdef WITH_SSL
|
||||
@echo $(DL)#define USE_SSLEAY 1$(DL) >> $@
|
||||
@echo $(DL)#define USE_OPENSSL 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_OPENSSL_X509_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_OPENSSL_SSL_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_OPENSSL_RSA_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_OPENSSL_PEM_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_OPENSSL_ERR_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_OPENSSL_CRYPTO_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_OPENSSL_ENGINE_H 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LIBSSL 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LIBCRYPTO 1$(DL) >> $@
|
||||
@echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@
|
||||
endif
|
||||
ifdef WITH_SSH2
|
||||
@echo $(DL)#define USE_LIBSSH2 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_LIBSSH2_H 1$(DL) >> $@
|
||||
endif
|
||||
ifdef WITH_IDN
|
||||
@echo $(DL)#define HAVE_LIBIDN 1$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_TLD_H 1$(DL) >> $@
|
||||
endif
|
||||
@echo $(DL)#ifdef __GNUC__$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@
|
||||
@echo $(DL)#else$(DL) >> $@
|
||||
@echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
|
||||
@echo $(DL)#endif$(DL) >> $@
|
||||
ifdef OLD_NOVELLSDK
|
||||
@echo $(DL)#define socklen_t int$(DL) >> $@
|
||||
endif
|
||||
ifdef CABUNDLE
|
||||
@echo $(DL)#define CURL_CA_BUNDLE "$(CABUNDLE)"$(DL) >> $@
|
||||
else
|
||||
@echo $(DL)#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")$(DL) >> $@
|
||||
endif
|
||||
@$(CP) tool_hugehelp.c.cvs $@
|
||||
|
||||
hugehelp.c:
|
||||
@echo Creating $@
|
||||
@$(CP) hugehelp.c.cvs $@
|
||||
|
||||
$(ARES_LIB)/libcares.$(LIBEXT):
|
||||
$(MAKE) -C $(ARES_LIB) -f Makefile.netware lib
|
||||
$(LIBCARES_PATH)/libcares.$(LIBEXT):
|
||||
$(MAKE) -C $(LIBCARES_PATH) -f Makefile.netware lib
|
||||
|
||||
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# Makefile for project cURL
|
||||
# Generated on Sun,13 Jan 2002.17:11:10 by EasyGCC (0.1.3 [beta 2] (3 Jan 2002))
|
||||
# Manually updated
|
||||
# Contact: [email protected]
|
||||
|
||||
# Project objects:
|
||||
objs = o.hugehelp o.main o.urlglob o.writeout o.writeenv o.rawstr
|
||||
|
||||
|
||||
# Compile options:
|
||||
linkopts = ../lib/libcurl openldap:libraries/libldap/libldap -o curl
|
||||
compileropts = -mpoke-function-name -IUtilLib: -mthrowback
|
||||
|
||||
# Project target:
|
||||
curl: $(objs)
|
||||
gcc $(linkopts) $(objs)
|
||||
|
||||
# Static dependancies:
|
||||
o.hugehelp: c.hugehelp
|
||||
gcc $(compileropts) -c -o hugehelp.o c.hugehelp
|
||||
|
||||
o.main: c.main
|
||||
gcc $(compileropts) -c -o main.o c.main
|
||||
|
||||
o.urlglob: c.urlglob
|
||||
gcc $(compileropts) -c -o urlglob.o c.urlglob
|
||||
|
||||
o.writeout: c.writeout
|
||||
gcc $(compileropts) -c -o writeout.o c.writeout
|
||||
|
||||
o.writeenv: c.writeenv
|
||||
gcc $(compileropts) -c -o writeenv.o c.writeenv
|
||||
|
||||
o.rawstr: ../lib/c.rawstr
|
||||
gcc $(compileropts) -c -o rawstr.o ../lib/c.rawstr
|
||||
|
||||
# Dynamic dependancies:
|
||||
o.hugehelp: c.hugehelp
|
||||
|
||||
o.main: c.main
|
||||
o.main: h.setup
|
||||
o.main: h.urlglob
|
||||
o.main: h.writeout
|
||||
o.main: h.version
|
||||
|
||||
o.urlglob: c.urlglob
|
||||
o.urlglob: h.setup
|
||||
o.urlglob: h.urlglob
|
||||
|
||||
o.writeout: c.writeout
|
||||
o.writeout: h.writeout
|
||||
|
||||
@@ -0,0 +1,522 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1999 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
#***************************************************************************
|
||||
|
||||
# All files in the Makefile.vc* series are generated automatically from the
|
||||
# one made for MSVC version 6. Alas, if you want to do changes to any of the
|
||||
# files and send back to the project, edit the version six, make your diff and
|
||||
# mail curl-users.
|
||||
|
||||
#############################################################
|
||||
#
|
||||
## Makefile for building curl.exe with MSVC10
|
||||
## Use: nmake -f makefile.vc10 [release | debug] [CFG=release-ssl]
|
||||
## (default is release)
|
||||
## "nmake -f makefile.vc10 CFG=release-ssl" statically links OpenSSL
|
||||
## into curl.exe producing a standalone SSL-enabled executable.
|
||||
##
|
||||
#
|
||||
#############################################################
|
||||
|
||||
PROGRAM_NAME = curl.exe
|
||||
|
||||
# -------------------------------------------
|
||||
# Verify that current subdir is curl's 'src'
|
||||
# -------------------------------------------
|
||||
|
||||
!IF ! EXIST(.\tool_main.c)
|
||||
! MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.
|
||||
! MESSAGE Change to curl's 'src' subdirectory, and try again.
|
||||
! ERROR See previous message.
|
||||
!ENDIF
|
||||
|
||||
# ------------------------------------------------
|
||||
# Makefile.msvc.names provides libcurl file names
|
||||
# ------------------------------------------------
|
||||
|
||||
!INCLUDE ..\Makefile.msvc.names
|
||||
|
||||
|
||||
|
||||
!IFNDEF OPENSSL_PATH
|
||||
OPENSSL_PATH = ../../openssl-0.9.8x
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.7
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF MACHINE
|
||||
MACHINE = X86
|
||||
!ENDIF
|
||||
|
||||
# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
|
||||
# without an openssl installation and offers the ability to authenticate
|
||||
# using the "current logged in user". Since at least with MSVC10 the sspi.h
|
||||
# header is broken it is either required to install the Windows SDK,
|
||||
# or to fix sspi.h with adding this define at the beginning of sspi.h:
|
||||
# #define FreeCredentialHandle FreeCredentialsHandle
|
||||
#
|
||||
# If, for some reason the Windows SDK is installed but not installed
|
||||
# in the default location, you can specify WINDOWS_SDK_PATH.
|
||||
# It can be downloaded from:
|
||||
# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
|
||||
|
||||
# WINDOWS_SSPI = 1
|
||||
|
||||
!IFDEF WINDOWS_SSPI
|
||||
!IFNDEF WINDOWS_SDK_PATH
|
||||
WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
########################################################
|
||||
## Nothing more to do below this line!
|
||||
|
||||
ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
|
||||
ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
|
||||
ZLIB_LIBS = zlib.lib
|
||||
ZLIB_IMP_LIBS = zdll.lib
|
||||
|
||||
SSL_CFLAGS = /DUSE_SSLEAY
|
||||
SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
|
||||
SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
|
||||
SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib
|
||||
|
||||
# Runtime library configuration
|
||||
RTLIB = /MD
|
||||
RTLIBD = /MDd
|
||||
|
||||
!IF "$(RTLIBCFG)" == "static"
|
||||
RTLIB = /MT
|
||||
RTLIBD = /MTd
|
||||
!ENDIF
|
||||
|
||||
## Release
|
||||
CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
|
||||
LINKR = link.exe /incremental:no /libpath:"../lib"
|
||||
RCR = rc.exe /dDEBUGBUILD=0
|
||||
|
||||
## Debug
|
||||
CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1
|
||||
LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
|
||||
RCD = rc.exe /dDEBUGBUILD=1
|
||||
|
||||
CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1
|
||||
LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
|
||||
RESFLAGS = /i../include
|
||||
|
||||
# This manifest thing is for VC8, enabled by the maketgz script that
|
||||
# builds the VC8 version of this makefile. Left commented out in the VC10
|
||||
# version!
|
||||
#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
|
||||
|
||||
!IFDEF WINDOWS_SSPI
|
||||
CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
|
||||
!ENDIF
|
||||
|
||||
RELEASE_OBJS= \
|
||||
nonblockr.obj \
|
||||
rawstrr.obj \
|
||||
strtoofftr.obj \
|
||||
tool_binmoder.obj \
|
||||
tool_bnamer.obj \
|
||||
tool_cb_dbgr.obj \
|
||||
tool_cb_hdrr.obj \
|
||||
tool_cb_prgr.obj \
|
||||
tool_cb_rear.obj \
|
||||
tool_cb_seer.obj \
|
||||
tool_cb_wrtr.obj \
|
||||
tool_cfgabler.obj \
|
||||
tool_convertr.obj \
|
||||
tool_dirhier.obj \
|
||||
tool_doswinr.obj \
|
||||
tool_easysrcr.obj \
|
||||
tool_formparser.obj \
|
||||
tool_getparamr.obj \
|
||||
tool_getpassr.obj \
|
||||
tool_helpr.obj \
|
||||
tool_helpersr.obj \
|
||||
tool_homedirr.obj \
|
||||
tool_hugehelpr.obj \
|
||||
tool_libinfor.obj \
|
||||
tool_mainr.obj \
|
||||
tool_metalinkr.obj \
|
||||
tool_mfilesr.obj \
|
||||
tool_msgsr.obj \
|
||||
tool_operater.obj \
|
||||
tool_operhlpr.obj \
|
||||
tool_panykeyr.obj \
|
||||
tool_paramhlpr.obj \
|
||||
tool_parsecfgr.obj \
|
||||
tool_setoptr.obj \
|
||||
tool_sleepr.obj \
|
||||
tool_urlglobr.obj \
|
||||
tool_utilr.obj \
|
||||
tool_vmsr.obj \
|
||||
tool_writeenvr.obj \
|
||||
tool_writeoutr.obj \
|
||||
tool_xattrr.obj \
|
||||
curlr.res
|
||||
|
||||
DEBUG_OBJS= \
|
||||
nonblockd.obj \
|
||||
rawstrd.obj \
|
||||
strtoofftd.obj \
|
||||
tool_binmoded.obj \
|
||||
tool_bnamed.obj \
|
||||
tool_cb_dbgd.obj \
|
||||
tool_cb_hdrd.obj \
|
||||
tool_cb_prgd.obj \
|
||||
tool_cb_read.obj \
|
||||
tool_cb_seed.obj \
|
||||
tool_cb_wrtd.obj \
|
||||
tool_cfgabled.obj \
|
||||
tool_convertd.obj \
|
||||
tool_dirhied.obj \
|
||||
tool_doswind.obj \
|
||||
tool_easysrcd.obj \
|
||||
tool_formparsed.obj \
|
||||
tool_getparamd.obj \
|
||||
tool_getpassd.obj \
|
||||
tool_helpd.obj \
|
||||
tool_helpersd.obj \
|
||||
tool_homedird.obj \
|
||||
tool_hugehelpd.obj \
|
||||
tool_libinfod.obj \
|
||||
tool_maind.obj \
|
||||
tool_metalinkd.obj \
|
||||
tool_mfilesd.obj \
|
||||
tool_msgsd.obj \
|
||||
tool_operated.obj \
|
||||
tool_operhlpd.obj \
|
||||
tool_panykeyd.obj \
|
||||
tool_paramhlpd.obj \
|
||||
tool_parsecfgd.obj \
|
||||
tool_setoptd.obj \
|
||||
tool_sleepd.obj \
|
||||
tool_urlglobd.obj \
|
||||
tool_utild.obj \
|
||||
tool_vmsd.obj \
|
||||
tool_writeenvd.obj \
|
||||
tool_writeoutd.obj \
|
||||
tool_xattrd.obj \
|
||||
curld.res
|
||||
|
||||
#################################################
|
||||
# If CFG not specified, use static libs
|
||||
|
||||
CFLAGS = $(CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)
|
||||
|
||||
#################################################
|
||||
# release dynamic library
|
||||
|
||||
!IF "$(CFG)" == "release-dll"
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with zlib
|
||||
|
||||
!IF "$(CFG)" == "release-zlib"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with ssl
|
||||
|
||||
!IF "$(CFG)" == "release-ssl"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release dynamic library with dynamic ssl
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with ssl and zlib
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-zlib"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with dynamic ssl
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release dynamic library with dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with dynamic ssl and dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release dynamic library with dynamic ssl and dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
|
||||
LINKLIBS = $(LINKLIBS) ws2_32.lib wldap32.lib advapi32.lib
|
||||
LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib wldap32.lib advapi32.lib
|
||||
|
||||
all : release
|
||||
|
||||
release: $(RELEASE_OBJS)
|
||||
$(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
|
||||
$(MANIFESTTOOL)
|
||||
|
||||
debug: $(DEBUG_OBJS)
|
||||
$(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
|
||||
$(MANIFESTTOOL)
|
||||
|
||||
## Release
|
||||
nonblockr.obj: ../lib/nonblock.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrr.obj: ../lib/rawstr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftr.obj: ../lib/strtoofft.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
tool_binmoder.obj: tool_binmode.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamer.obj: tool_bname.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgr.obj: tool_cb_dbg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrr.obj: tool_cb_hdr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgr.obj: tool_cb_prg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_rear.obj: tool_cb_rea.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seer.obj: tool_cb_see.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtr.obj: tool_cb_wrt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabler.obj: tool_cfgable.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertr.obj: tool_convert.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhier.obj: tool_dirhie.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswinr.obj: tool_doswin.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcr.obj: tool_easysrc.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparser.obj: tool_formparse.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamr.obj: tool_getparam.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassr.obj: tool_getpass.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpr.obj: tool_help.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersr.obj: tool_helpers.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedirr.obj: tool_homedir.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpr.obj: tool_hugehelp.c
|
||||
$(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfor.obj: tool_libinfo.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_mainr.obj: tool_main.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkr.obj: tool_metalink.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesr.obj: tool_mfiles.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsr.obj: tool_msgs.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operater.obj: tool_operate.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpr.obj: tool_operhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyr.obj: tool_panykey.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpr.obj: tool_paramhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgr.obj: tool_parsecfg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptr.obj: tool_setopt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepr.obj: tool_sleep.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobr.obj: tool_urlglob.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utilr.obj: tool_util.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsr.obj: tool_vms.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvr.obj: tool_writeenv.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutr.obj: tool_writeout.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrr.obj: tool_xattr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curlr.res : curl.rc
|
||||
$(RCR) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
## Debug
|
||||
nonblockd.obj: ../lib/nonblock.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrd.obj: ../lib/rawstr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftd.obj: ../lib/strtoofft.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
tool_binmoded.obj: tool_binmode.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamed.obj: tool_bname.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgd.obj: tool_cb_dbg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrd.obj: tool_cb_hdr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgd.obj: tool_cb_prg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_read.obj: tool_cb_rea.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seed.obj: tool_cb_see.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtd.obj: tool_cb_wrt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabled.obj: tool_cfgable.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertd.obj: tool_convert.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhied.obj: tool_dirhie.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswind.obj: tool_doswin.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcd.obj: tool_easysrc.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparsed.obj: tool_formparse.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamd.obj: tool_getparam.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassd.obj: tool_getpass.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpd.obj: tool_help.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersd.obj: tool_helpers.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedird.obj: tool_homedir.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpd.obj: tool_hugehelp.c
|
||||
$(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfod.obj: tool_libinfo.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_maind.obj: tool_main.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkd.obj: tool_metalink.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesd.obj: tool_mfiles.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsd.obj: tool_msgs.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operated.obj: tool_operate.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpd.obj: tool_operhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyd.obj: tool_panykey.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpd.obj: tool_paramhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgd.obj: tool_parsecfg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptd.obj: tool_setopt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepd.obj: tool_sleep.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobd.obj: tool_urlglob.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utild.obj: tool_util.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsd.obj: tool_vms.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvd.obj: tool_writeenv.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutd.obj: tool_writeout.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrd.obj: tool_xattr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curld.res : curl.rc
|
||||
$(RCD) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
clean:
|
||||
@-erase $(PROGRAM_NAME) 2> NUL
|
||||
@-erase $(RELEASE_OBJS) 2> NUL
|
||||
@-erase $(DEBUG_OBJS) 2> NUL
|
||||
@-erase *.idb 2> NUL
|
||||
@-erase *.pdb 2> NUL
|
||||
@-erase *.pch 2> NUL
|
||||
@-erase *.ilk 2> NUL
|
||||
@@ -1,5 +1,31 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1999 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
#***************************************************************************
|
||||
|
||||
# All files in the Makefile.vc* series are generated automatically from the
|
||||
# one made for MSVC version 6. Alas, if you want to do changes to any of the
|
||||
# files and send back to the project, edit the version six, make your diff and
|
||||
# mail curl-users.
|
||||
|
||||
#############################################################
|
||||
# $Id: Makefile.vc6,v 1.19 2004/11/14 13:48:15 giva Exp $
|
||||
#
|
||||
## Makefile for building curl.exe with MSVC6
|
||||
## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]
|
||||
@@ -7,20 +33,35 @@
|
||||
## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL
|
||||
## into curl.exe producing a standalone SSL-enabled executable.
|
||||
##
|
||||
## Comments to: Troy Engel <[email protected]>
|
||||
## Updated by: Craig Davison <[email protected]>
|
||||
## release-ssl added by Miklos Nemeth <[email protected]>
|
||||
#
|
||||
#############################################################
|
||||
|
||||
PROGRAM_NAME = curl.exe
|
||||
|
||||
!IFNDEF ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.3
|
||||
# -------------------------------------------
|
||||
# Verify that current subdir is curl's 'src'
|
||||
# -------------------------------------------
|
||||
|
||||
!IF ! EXIST(.\tool_main.c)
|
||||
! MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.
|
||||
! MESSAGE Change to curl's 'src' subdirectory, and try again.
|
||||
! ERROR See previous message.
|
||||
!ENDIF
|
||||
|
||||
# ------------------------------------------------
|
||||
# Makefile.msvc.names provides libcurl file names
|
||||
# ------------------------------------------------
|
||||
|
||||
!INCLUDE ..\Makefile.msvc.names
|
||||
|
||||
|
||||
|
||||
!IFNDEF OPENSSL_PATH
|
||||
OPENSSL_PATH = ../../openssl-0.9.8g
|
||||
OPENSSL_PATH = ../../openssl-0.9.8x
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.7
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF MACHINE
|
||||
@@ -43,12 +84,13 @@ MACHINE = X86
|
||||
|
||||
!IFDEF WINDOWS_SSPI
|
||||
!IFNDEF WINDOWS_SDK_PATH
|
||||
WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
|
||||
WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
########################################################
|
||||
## Nothing more to do below this line!
|
||||
|
||||
ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
|
||||
ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
|
||||
ZLIB_LIBS = zlib.lib
|
||||
@@ -57,7 +99,7 @@ ZLIB_IMP_LIBS = zdll.lib
|
||||
SSL_CFLAGS = /DUSE_SSLEAY
|
||||
SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
|
||||
SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
|
||||
SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
|
||||
SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib
|
||||
|
||||
# Runtime library configuration
|
||||
RTLIB = /MD
|
||||
@@ -71,14 +113,14 @@ RTLIBD = /MTd
|
||||
## Release
|
||||
CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
|
||||
LINKR = link.exe /incremental:no /libpath:"../lib"
|
||||
RCR = rc.exe /dCURLDEBUG=0
|
||||
RCR = rc.exe /dDEBUGBUILD=0
|
||||
|
||||
## Debug
|
||||
CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /GZ
|
||||
LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
|
||||
RCD = rc.exe /dCURLDEBUG=1
|
||||
RCD = rc.exe /dDEBUGBUILD=1
|
||||
|
||||
CFLAGS = /I../lib /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c
|
||||
CFLAGS = /I../lib /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1
|
||||
LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
|
||||
RESFLAGS = /i../include
|
||||
|
||||
@@ -92,42 +134,106 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
|
||||
!ENDIF
|
||||
|
||||
RELEASE_OBJS= \
|
||||
hugehelpr.obj \
|
||||
writeoutr.obj \
|
||||
urlglobr.obj \
|
||||
getpassr.obj \
|
||||
homedirr.obj \
|
||||
curlutilr.obj \
|
||||
nonblockr.obj \
|
||||
rawstrr.obj \
|
||||
strtoofftr.obj \
|
||||
mainr.obj \
|
||||
tool_binmoder.obj \
|
||||
tool_bnamer.obj \
|
||||
tool_cb_dbgr.obj \
|
||||
tool_cb_hdrr.obj \
|
||||
tool_cb_prgr.obj \
|
||||
tool_cb_rear.obj \
|
||||
tool_cb_seer.obj \
|
||||
tool_cb_wrtr.obj \
|
||||
tool_cfgabler.obj \
|
||||
tool_convertr.obj \
|
||||
tool_dirhier.obj \
|
||||
tool_doswinr.obj \
|
||||
tool_easysrcr.obj \
|
||||
tool_formparser.obj \
|
||||
tool_getparamr.obj \
|
||||
tool_getpassr.obj \
|
||||
tool_helpr.obj \
|
||||
tool_helpersr.obj \
|
||||
tool_homedirr.obj \
|
||||
tool_hugehelpr.obj \
|
||||
tool_libinfor.obj \
|
||||
tool_mainr.obj \
|
||||
tool_metalinkr.obj \
|
||||
tool_mfilesr.obj \
|
||||
tool_msgsr.obj \
|
||||
tool_operater.obj \
|
||||
tool_operhlpr.obj \
|
||||
tool_panykeyr.obj \
|
||||
tool_paramhlpr.obj \
|
||||
tool_parsecfgr.obj \
|
||||
tool_setoptr.obj \
|
||||
tool_sleepr.obj \
|
||||
tool_urlglobr.obj \
|
||||
tool_utilr.obj \
|
||||
tool_vmsr.obj \
|
||||
tool_writeenvr.obj \
|
||||
tool_writeoutr.obj \
|
||||
tool_xattrr.obj \
|
||||
curlr.res
|
||||
|
||||
DEBUG_OBJS= \
|
||||
hugehelpd.obj \
|
||||
writeoutd.obj \
|
||||
urlglobd.obj \
|
||||
getpassd.obj \
|
||||
homedird.obj \
|
||||
curlutild.obj \
|
||||
nonblockd.obj \
|
||||
rawstrd.obj \
|
||||
strtoofftd.obj \
|
||||
maind.obj \
|
||||
tool_binmoded.obj \
|
||||
tool_bnamed.obj \
|
||||
tool_cb_dbgd.obj \
|
||||
tool_cb_hdrd.obj \
|
||||
tool_cb_prgd.obj \
|
||||
tool_cb_read.obj \
|
||||
tool_cb_seed.obj \
|
||||
tool_cb_wrtd.obj \
|
||||
tool_cfgabled.obj \
|
||||
tool_convertd.obj \
|
||||
tool_dirhied.obj \
|
||||
tool_doswind.obj \
|
||||
tool_easysrcd.obj \
|
||||
tool_formparsed.obj \
|
||||
tool_getparamd.obj \
|
||||
tool_getpassd.obj \
|
||||
tool_helpd.obj \
|
||||
tool_helpersd.obj \
|
||||
tool_homedird.obj \
|
||||
tool_hugehelpd.obj \
|
||||
tool_libinfod.obj \
|
||||
tool_maind.obj \
|
||||
tool_metalinkd.obj \
|
||||
tool_mfilesd.obj \
|
||||
tool_msgsd.obj \
|
||||
tool_operated.obj \
|
||||
tool_operhlpd.obj \
|
||||
tool_panykeyd.obj \
|
||||
tool_paramhlpd.obj \
|
||||
tool_parsecfgd.obj \
|
||||
tool_setoptd.obj \
|
||||
tool_sleepd.obj \
|
||||
tool_urlglobd.obj \
|
||||
tool_utild.obj \
|
||||
tool_vmsd.obj \
|
||||
tool_writeenvd.obj \
|
||||
tool_writeoutd.obj \
|
||||
tool_xattrd.obj \
|
||||
curld.res
|
||||
|
||||
#################################################
|
||||
# If CFG not specified, use static libs
|
||||
|
||||
CFLAGS = $(CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib
|
||||
LINKLIBS_DEBUG = libcurld.lib
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)
|
||||
|
||||
#################################################
|
||||
# release dynamic library
|
||||
|
||||
!IF "$(CFG)" == "release-dll"
|
||||
LINKLIBS = libcurl_imp.lib
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
@@ -135,8 +241,8 @@ LINKLIBS_DEBUG = libcurld_imp.lib
|
||||
|
||||
!IF "$(CFG)" == "release-zlib"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(ZLIB_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -145,8 +251,8 @@ LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -155,8 +261,8 @@ LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
|
||||
LINKLIBS = libcurl_imp.lib $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -165,8 +271,8 @@ LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-zlib"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -175,8 +281,8 @@ LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -185,8 +291,8 @@ LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -195,8 +301,8 @@ LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = libcurl_imp.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -205,8 +311,8 @@ LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -215,14 +321,14 @@ LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = libcurl_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
|
||||
LINKLIBS = $(LINKLIBS) wsock32.lib wldap32.lib
|
||||
LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) wsock32.lib wldap32.lib
|
||||
LINKLIBS = $(LINKLIBS) ws2_32.lib wldap32.lib advapi32.lib
|
||||
LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib wldap32.lib advapi32.lib
|
||||
|
||||
all : release
|
||||
|
||||
@@ -235,46 +341,174 @@ debug: $(DEBUG_OBJS)
|
||||
$(MANIFESTTOOL)
|
||||
|
||||
## Release
|
||||
hugehelpr.obj: hugehelp.c
|
||||
$(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
|
||||
writeoutr.obj: writeout.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" writeout.c
|
||||
urlglobr.obj: urlglob.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" urlglob.c
|
||||
getpassr.obj: getpass.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" getpass.c
|
||||
homedirr.obj: homedir.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" homedir.c
|
||||
curlutilr.obj: curlutil.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" curlutil.c
|
||||
nonblockr.obj: ../lib/nonblock.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrr.obj: ../lib/rawstr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftr.obj: ../lib/strtoofft.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
mainr.obj: main.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" main.c
|
||||
tool_binmoder.obj: tool_binmode.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamer.obj: tool_bname.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgr.obj: tool_cb_dbg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrr.obj: tool_cb_hdr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgr.obj: tool_cb_prg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_rear.obj: tool_cb_rea.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seer.obj: tool_cb_see.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtr.obj: tool_cb_wrt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabler.obj: tool_cfgable.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertr.obj: tool_convert.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhier.obj: tool_dirhie.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswinr.obj: tool_doswin.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcr.obj: tool_easysrc.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparser.obj: tool_formparse.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamr.obj: tool_getparam.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassr.obj: tool_getpass.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpr.obj: tool_help.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersr.obj: tool_helpers.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedirr.obj: tool_homedir.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpr.obj: tool_hugehelp.c
|
||||
$(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfor.obj: tool_libinfo.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_mainr.obj: tool_main.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkr.obj: tool_metalink.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesr.obj: tool_mfiles.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsr.obj: tool_msgs.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operater.obj: tool_operate.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpr.obj: tool_operhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyr.obj: tool_panykey.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpr.obj: tool_paramhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgr.obj: tool_parsecfg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptr.obj: tool_setopt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepr.obj: tool_sleep.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobr.obj: tool_urlglob.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utilr.obj: tool_util.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsr.obj: tool_vms.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvr.obj: tool_writeenv.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutr.obj: tool_writeout.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrr.obj: tool_xattr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curlr.res : curl.rc
|
||||
$(RCR) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
## Debug
|
||||
hugehelpd.obj: hugehelp.c
|
||||
$(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
|
||||
writeoutd.obj: writeout.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" writeout.c
|
||||
urlglobd.obj: urlglob.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" urlglob.c
|
||||
getpassd.obj: getpass.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" getpass.c
|
||||
homedird.obj: homedir.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" homedir.c
|
||||
curlutild.obj: curlutil.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" curlutil.c
|
||||
nonblockd.obj: ../lib/nonblock.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrd.obj: ../lib/rawstr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftd.obj: ../lib/strtoofft.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
maind.obj: main.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" main.c
|
||||
tool_binmoded.obj: tool_binmode.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamed.obj: tool_bname.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgd.obj: tool_cb_dbg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrd.obj: tool_cb_hdr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgd.obj: tool_cb_prg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_read.obj: tool_cb_rea.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seed.obj: tool_cb_see.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtd.obj: tool_cb_wrt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabled.obj: tool_cfgable.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertd.obj: tool_convert.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhied.obj: tool_dirhie.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswind.obj: tool_doswin.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcd.obj: tool_easysrc.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparsed.obj: tool_formparse.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamd.obj: tool_getparam.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassd.obj: tool_getpass.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpd.obj: tool_help.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersd.obj: tool_helpers.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedird.obj: tool_homedir.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpd.obj: tool_hugehelp.c
|
||||
$(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfod.obj: tool_libinfo.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_maind.obj: tool_main.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkd.obj: tool_metalink.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesd.obj: tool_mfiles.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsd.obj: tool_msgs.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operated.obj: tool_operate.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpd.obj: tool_operhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyd.obj: tool_panykey.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpd.obj: tool_paramhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgd.obj: tool_parsecfg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptd.obj: tool_setopt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepd.obj: tool_sleep.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobd.obj: tool_urlglob.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utild.obj: tool_util.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsd.obj: tool_vms.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvd.obj: tool_writeenv.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutd.obj: tool_writeout.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrd.obj: tool_xattr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curld.res : curl.rc
|
||||
$(RCD) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
|
||||
@@ -1,26 +1,67 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1999 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
#***************************************************************************
|
||||
|
||||
# All files in the Makefile.vc* series are generated automatically from the
|
||||
# one made for MSVC version 6. Alas, if you want to do changes to any of the
|
||||
# files and send back to the project, edit the version six, make your diff and
|
||||
# mail curl-users.
|
||||
|
||||
#############################################################
|
||||
# $Id: Makefile.vc8,v 1.19 2004/11/14 13:48:15 giva Exp $
|
||||
#
|
||||
## Makefile for building curl.exe with MSVC8
|
||||
## Use: nmake -f makefile.vc8 [release | debug] [CFG=release-ssl]
|
||||
## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]
|
||||
## (default is release)
|
||||
## "nmake -f makefile.vc8 CFG=release-ssl" statically links OpenSSL
|
||||
## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL
|
||||
## into curl.exe producing a standalone SSL-enabled executable.
|
||||
##
|
||||
## Comments to: Troy Engel <[email protected]>
|
||||
## Updated by: Craig Davison <[email protected]>
|
||||
## release-ssl added by Miklos Nemeth <[email protected]>
|
||||
#
|
||||
#############################################################
|
||||
|
||||
PROGRAM_NAME = curl.exe
|
||||
|
||||
!IFNDEF ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.3
|
||||
# -------------------------------------------
|
||||
# Verify that current subdir is curl's 'src'
|
||||
# -------------------------------------------
|
||||
|
||||
!IF ! EXIST(.\tool_main.c)
|
||||
! MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.
|
||||
! MESSAGE Change to curl's 'src' subdirectory, and try again.
|
||||
! ERROR See previous message.
|
||||
!ENDIF
|
||||
|
||||
# ------------------------------------------------
|
||||
# Makefile.msvc.names provides libcurl file names
|
||||
# ------------------------------------------------
|
||||
|
||||
!INCLUDE ..\Makefile.msvc.names
|
||||
|
||||
|
||||
|
||||
!IFNDEF OPENSSL_PATH
|
||||
OPENSSL_PATH = ../../openssl-0.9.8g
|
||||
OPENSSL_PATH = ../../openssl-0.9.8x
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.7
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF MACHINE
|
||||
@@ -43,12 +84,13 @@ MACHINE = X86
|
||||
|
||||
!IFDEF WINDOWS_SSPI
|
||||
!IFNDEF WINDOWS_SDK_PATH
|
||||
WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK"
|
||||
WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
########################################################
|
||||
## Nothing more to do below this line!
|
||||
|
||||
ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
|
||||
ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
|
||||
ZLIB_LIBS = zlib.lib
|
||||
@@ -57,7 +99,7 @@ ZLIB_IMP_LIBS = zdll.lib
|
||||
SSL_CFLAGS = /DUSE_SSLEAY
|
||||
SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
|
||||
SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
|
||||
SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
|
||||
SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib
|
||||
|
||||
# Runtime library configuration
|
||||
RTLIB = /MD
|
||||
@@ -71,63 +113,127 @@ RTLIBD = /MTd
|
||||
## Release
|
||||
CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
|
||||
LINKR = link.exe /incremental:no /libpath:"../lib"
|
||||
RCR = rc.exe /dCURLDEBUG=0
|
||||
RCR = rc.exe /dDEBUGBUILD=0
|
||||
|
||||
## Debug
|
||||
CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1
|
||||
LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
|
||||
RCD = rc.exe /dCURLDEBUG=1
|
||||
RCD = rc.exe /dDEBUGBUILD=1
|
||||
|
||||
CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c
|
||||
CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1
|
||||
LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
|
||||
RESFLAGS = /i../include
|
||||
|
||||
# This manifest thing is for VC8, enabled by the maketgz script that
|
||||
# builds the VC8 version of this makefile. Left commented out in the VC8
|
||||
# version!
|
||||
MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
|
||||
#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
|
||||
|
||||
!IFDEF WINDOWS_SSPI
|
||||
CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
|
||||
!ENDIF
|
||||
|
||||
RELEASE_OBJS= \
|
||||
hugehelpr.obj \
|
||||
writeoutr.obj \
|
||||
urlglobr.obj \
|
||||
getpassr.obj \
|
||||
homedirr.obj \
|
||||
curlutilr.obj \
|
||||
nonblockr.obj \
|
||||
rawstrr.obj \
|
||||
strtoofftr.obj \
|
||||
mainr.obj \
|
||||
tool_binmoder.obj \
|
||||
tool_bnamer.obj \
|
||||
tool_cb_dbgr.obj \
|
||||
tool_cb_hdrr.obj \
|
||||
tool_cb_prgr.obj \
|
||||
tool_cb_rear.obj \
|
||||
tool_cb_seer.obj \
|
||||
tool_cb_wrtr.obj \
|
||||
tool_cfgabler.obj \
|
||||
tool_convertr.obj \
|
||||
tool_dirhier.obj \
|
||||
tool_doswinr.obj \
|
||||
tool_easysrcr.obj \
|
||||
tool_formparser.obj \
|
||||
tool_getparamr.obj \
|
||||
tool_getpassr.obj \
|
||||
tool_helpr.obj \
|
||||
tool_helpersr.obj \
|
||||
tool_homedirr.obj \
|
||||
tool_hugehelpr.obj \
|
||||
tool_libinfor.obj \
|
||||
tool_mainr.obj \
|
||||
tool_metalinkr.obj \
|
||||
tool_mfilesr.obj \
|
||||
tool_msgsr.obj \
|
||||
tool_operater.obj \
|
||||
tool_operhlpr.obj \
|
||||
tool_panykeyr.obj \
|
||||
tool_paramhlpr.obj \
|
||||
tool_parsecfgr.obj \
|
||||
tool_setoptr.obj \
|
||||
tool_sleepr.obj \
|
||||
tool_urlglobr.obj \
|
||||
tool_utilr.obj \
|
||||
tool_vmsr.obj \
|
||||
tool_writeenvr.obj \
|
||||
tool_writeoutr.obj \
|
||||
tool_xattrr.obj \
|
||||
curlr.res
|
||||
|
||||
DEBUG_OBJS= \
|
||||
hugehelpd.obj \
|
||||
writeoutd.obj \
|
||||
urlglobd.obj \
|
||||
getpassd.obj \
|
||||
homedird.obj \
|
||||
curlutild.obj \
|
||||
nonblockd.obj \
|
||||
rawstrd.obj \
|
||||
strtoofftd.obj \
|
||||
maind.obj \
|
||||
tool_binmoded.obj \
|
||||
tool_bnamed.obj \
|
||||
tool_cb_dbgd.obj \
|
||||
tool_cb_hdrd.obj \
|
||||
tool_cb_prgd.obj \
|
||||
tool_cb_read.obj \
|
||||
tool_cb_seed.obj \
|
||||
tool_cb_wrtd.obj \
|
||||
tool_cfgabled.obj \
|
||||
tool_convertd.obj \
|
||||
tool_dirhied.obj \
|
||||
tool_doswind.obj \
|
||||
tool_easysrcd.obj \
|
||||
tool_formparsed.obj \
|
||||
tool_getparamd.obj \
|
||||
tool_getpassd.obj \
|
||||
tool_helpd.obj \
|
||||
tool_helpersd.obj \
|
||||
tool_homedird.obj \
|
||||
tool_hugehelpd.obj \
|
||||
tool_libinfod.obj \
|
||||
tool_maind.obj \
|
||||
tool_metalinkd.obj \
|
||||
tool_mfilesd.obj \
|
||||
tool_msgsd.obj \
|
||||
tool_operated.obj \
|
||||
tool_operhlpd.obj \
|
||||
tool_panykeyd.obj \
|
||||
tool_paramhlpd.obj \
|
||||
tool_parsecfgd.obj \
|
||||
tool_setoptd.obj \
|
||||
tool_sleepd.obj \
|
||||
tool_urlglobd.obj \
|
||||
tool_utild.obj \
|
||||
tool_vmsd.obj \
|
||||
tool_writeenvd.obj \
|
||||
tool_writeoutd.obj \
|
||||
tool_xattrd.obj \
|
||||
curld.res
|
||||
|
||||
#################################################
|
||||
# If CFG not specified, use static libs
|
||||
|
||||
CFLAGS = $(CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib
|
||||
LINKLIBS_DEBUG = libcurld.lib
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)
|
||||
|
||||
#################################################
|
||||
# release dynamic library
|
||||
|
||||
!IF "$(CFG)" == "release-dll"
|
||||
LINKLIBS = libcurl_imp.lib
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
@@ -135,8 +241,8 @@ LINKLIBS_DEBUG = libcurld_imp.lib
|
||||
|
||||
!IF "$(CFG)" == "release-zlib"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(ZLIB_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -145,8 +251,8 @@ LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -155,8 +261,8 @@ LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
|
||||
LINKLIBS = libcurl_imp.lib $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -165,8 +271,8 @@ LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-zlib"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -175,8 +281,8 @@ LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -185,8 +291,8 @@ LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -195,8 +301,8 @@ LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = libcurl_imp.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -205,8 +311,8 @@ LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = libcurl.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
@@ -215,14 +321,14 @@ LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = libcurl_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = libcurld_imp.lib $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
|
||||
LINKLIBS = $(LINKLIBS) wsock32.lib bufferoverflowu.lib wldap32.lib
|
||||
LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) wsock32.lib bufferoverflowu.lib wldap32.lib
|
||||
LINKLIBS = $(LINKLIBS) ws2_32.lib bufferoverflowu.lib wldap32.lib advapi32.lib
|
||||
LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib bufferoverflowu.lib wldap32.lib advapi32.lib
|
||||
|
||||
all : release
|
||||
|
||||
@@ -235,46 +341,174 @@ debug: $(DEBUG_OBJS)
|
||||
$(MANIFESTTOOL)
|
||||
|
||||
## Release
|
||||
hugehelpr.obj: hugehelp.c
|
||||
$(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
|
||||
writeoutr.obj: writeout.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" writeout.c
|
||||
urlglobr.obj: urlglob.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" urlglob.c
|
||||
getpassr.obj: getpass.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" getpass.c
|
||||
homedirr.obj: homedir.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" homedir.c
|
||||
curlutilr.obj: curlutil.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" curlutil.c
|
||||
nonblockr.obj: ../lib/nonblock.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrr.obj: ../lib/rawstr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftr.obj: ../lib/strtoofft.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
mainr.obj: main.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" main.c
|
||||
tool_binmoder.obj: tool_binmode.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamer.obj: tool_bname.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgr.obj: tool_cb_dbg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrr.obj: tool_cb_hdr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgr.obj: tool_cb_prg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_rear.obj: tool_cb_rea.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seer.obj: tool_cb_see.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtr.obj: tool_cb_wrt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabler.obj: tool_cfgable.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertr.obj: tool_convert.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhier.obj: tool_dirhie.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswinr.obj: tool_doswin.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcr.obj: tool_easysrc.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparser.obj: tool_formparse.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamr.obj: tool_getparam.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassr.obj: tool_getpass.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpr.obj: tool_help.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersr.obj: tool_helpers.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedirr.obj: tool_homedir.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpr.obj: tool_hugehelp.c
|
||||
$(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfor.obj: tool_libinfo.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_mainr.obj: tool_main.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkr.obj: tool_metalink.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesr.obj: tool_mfiles.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsr.obj: tool_msgs.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operater.obj: tool_operate.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpr.obj: tool_operhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyr.obj: tool_panykey.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpr.obj: tool_paramhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgr.obj: tool_parsecfg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptr.obj: tool_setopt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepr.obj: tool_sleep.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobr.obj: tool_urlglob.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utilr.obj: tool_util.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsr.obj: tool_vms.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvr.obj: tool_writeenv.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutr.obj: tool_writeout.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrr.obj: tool_xattr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curlr.res : curl.rc
|
||||
$(RCR) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
## Debug
|
||||
hugehelpd.obj: hugehelp.c
|
||||
$(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c
|
||||
writeoutd.obj: writeout.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" writeout.c
|
||||
urlglobd.obj: urlglob.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" urlglob.c
|
||||
getpassd.obj: getpass.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" getpass.c
|
||||
homedird.obj: homedir.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" homedir.c
|
||||
curlutild.obj: curlutil.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" curlutil.c
|
||||
nonblockd.obj: ../lib/nonblock.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrd.obj: ../lib/rawstr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftd.obj: ../lib/strtoofft.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
maind.obj: main.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" main.c
|
||||
tool_binmoded.obj: tool_binmode.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamed.obj: tool_bname.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgd.obj: tool_cb_dbg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrd.obj: tool_cb_hdr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgd.obj: tool_cb_prg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_read.obj: tool_cb_rea.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seed.obj: tool_cb_see.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtd.obj: tool_cb_wrt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabled.obj: tool_cfgable.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertd.obj: tool_convert.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhied.obj: tool_dirhie.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswind.obj: tool_doswin.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcd.obj: tool_easysrc.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparsed.obj: tool_formparse.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamd.obj: tool_getparam.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassd.obj: tool_getpass.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpd.obj: tool_help.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersd.obj: tool_helpers.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedird.obj: tool_homedir.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpd.obj: tool_hugehelp.c
|
||||
$(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfod.obj: tool_libinfo.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_maind.obj: tool_main.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkd.obj: tool_metalink.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesd.obj: tool_mfiles.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsd.obj: tool_msgs.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operated.obj: tool_operate.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpd.obj: tool_operhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyd.obj: tool_panykey.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpd.obj: tool_paramhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgd.obj: tool_parsecfg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptd.obj: tool_setopt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepd.obj: tool_sleep.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobd.obj: tool_urlglob.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utild.obj: tool_util.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsd.obj: tool_vms.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvd.obj: tool_writeenv.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutd.obj: tool_writeout.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrd.obj: tool_xattr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curld.res : curl.rc
|
||||
$(RCD) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
|
||||
@@ -0,0 +1,522 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1999 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
#***************************************************************************
|
||||
|
||||
# All files in the Makefile.vc* series are generated automatically from the
|
||||
# one made for MSVC version 6. Alas, if you want to do changes to any of the
|
||||
# files and send back to the project, edit the version six, make your diff and
|
||||
# mail curl-users.
|
||||
|
||||
#############################################################
|
||||
#
|
||||
## Makefile for building curl.exe with MSVC9
|
||||
## Use: nmake -f makefile.vc9 [release | debug] [CFG=release-ssl]
|
||||
## (default is release)
|
||||
## "nmake -f makefile.vc9 CFG=release-ssl" statically links OpenSSL
|
||||
## into curl.exe producing a standalone SSL-enabled executable.
|
||||
##
|
||||
#
|
||||
#############################################################
|
||||
|
||||
PROGRAM_NAME = curl.exe
|
||||
|
||||
# -------------------------------------------
|
||||
# Verify that current subdir is curl's 'src'
|
||||
# -------------------------------------------
|
||||
|
||||
!IF ! EXIST(.\tool_main.c)
|
||||
! MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.
|
||||
! MESSAGE Change to curl's 'src' subdirectory, and try again.
|
||||
! ERROR See previous message.
|
||||
!ENDIF
|
||||
|
||||
# ------------------------------------------------
|
||||
# Makefile.msvc.names provides libcurl file names
|
||||
# ------------------------------------------------
|
||||
|
||||
!INCLUDE ..\Makefile.msvc.names
|
||||
|
||||
|
||||
|
||||
!IFNDEF OPENSSL_PATH
|
||||
OPENSSL_PATH = ../../openssl-0.9.8x
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.7
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF MACHINE
|
||||
MACHINE = X86
|
||||
!ENDIF
|
||||
|
||||
# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication
|
||||
# without an openssl installation and offers the ability to authenticate
|
||||
# using the "current logged in user". Since at least with MSVC9 the sspi.h
|
||||
# header is broken it is either required to install the Windows SDK,
|
||||
# or to fix sspi.h with adding this define at the beginning of sspi.h:
|
||||
# #define FreeCredentialHandle FreeCredentialsHandle
|
||||
#
|
||||
# If, for some reason the Windows SDK is installed but not installed
|
||||
# in the default location, you can specify WINDOWS_SDK_PATH.
|
||||
# It can be downloaded from:
|
||||
# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
|
||||
|
||||
# WINDOWS_SSPI = 1
|
||||
|
||||
!IFDEF WINDOWS_SSPI
|
||||
!IFNDEF WINDOWS_SDK_PATH
|
||||
WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
########################################################
|
||||
## Nothing more to do below this line!
|
||||
|
||||
ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"
|
||||
ZLIB_LFLAGS = "/LIBPATH:$(ZLIB_PATH)"
|
||||
ZLIB_LIBS = zlib.lib
|
||||
ZLIB_IMP_LIBS = zdll.lib
|
||||
|
||||
SSL_CFLAGS = /DUSE_SSLEAY
|
||||
SSL_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32"
|
||||
SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"
|
||||
SSL_LIBS = libeay32.lib ssleay32.lib gdi32.lib user32.lib
|
||||
|
||||
# Runtime library configuration
|
||||
RTLIB = /MD
|
||||
RTLIBD = /MDd
|
||||
|
||||
!IF "$(RTLIBCFG)" == "static"
|
||||
RTLIB = /MT
|
||||
RTLIBD = /MTd
|
||||
!ENDIF
|
||||
|
||||
## Release
|
||||
CCR = cl.exe $(RTLIB) /O2 /DNDEBUG
|
||||
LINKR = link.exe /incremental:no /libpath:"../lib"
|
||||
RCR = rc.exe /dDEBUGBUILD=0
|
||||
|
||||
## Debug
|
||||
CCD = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1
|
||||
LINKD = link.exe /incremental:yes /debug /libpath:"../lib"
|
||||
RCD = rc.exe /dDEBUGBUILD=1
|
||||
|
||||
CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1
|
||||
LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
|
||||
RESFLAGS = /i../include
|
||||
|
||||
# This manifest thing is for VC8, enabled by the maketgz script that
|
||||
# builds the VC8 version of this makefile. Left commented out in the VC9
|
||||
# version!
|
||||
#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1
|
||||
|
||||
!IFDEF WINDOWS_SSPI
|
||||
CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include
|
||||
!ENDIF
|
||||
|
||||
RELEASE_OBJS= \
|
||||
nonblockr.obj \
|
||||
rawstrr.obj \
|
||||
strtoofftr.obj \
|
||||
tool_binmoder.obj \
|
||||
tool_bnamer.obj \
|
||||
tool_cb_dbgr.obj \
|
||||
tool_cb_hdrr.obj \
|
||||
tool_cb_prgr.obj \
|
||||
tool_cb_rear.obj \
|
||||
tool_cb_seer.obj \
|
||||
tool_cb_wrtr.obj \
|
||||
tool_cfgabler.obj \
|
||||
tool_convertr.obj \
|
||||
tool_dirhier.obj \
|
||||
tool_doswinr.obj \
|
||||
tool_easysrcr.obj \
|
||||
tool_formparser.obj \
|
||||
tool_getparamr.obj \
|
||||
tool_getpassr.obj \
|
||||
tool_helpr.obj \
|
||||
tool_helpersr.obj \
|
||||
tool_homedirr.obj \
|
||||
tool_hugehelpr.obj \
|
||||
tool_libinfor.obj \
|
||||
tool_mainr.obj \
|
||||
tool_metalinkr.obj \
|
||||
tool_mfilesr.obj \
|
||||
tool_msgsr.obj \
|
||||
tool_operater.obj \
|
||||
tool_operhlpr.obj \
|
||||
tool_panykeyr.obj \
|
||||
tool_paramhlpr.obj \
|
||||
tool_parsecfgr.obj \
|
||||
tool_setoptr.obj \
|
||||
tool_sleepr.obj \
|
||||
tool_urlglobr.obj \
|
||||
tool_utilr.obj \
|
||||
tool_vmsr.obj \
|
||||
tool_writeenvr.obj \
|
||||
tool_writeoutr.obj \
|
||||
tool_xattrr.obj \
|
||||
curlr.res
|
||||
|
||||
DEBUG_OBJS= \
|
||||
nonblockd.obj \
|
||||
rawstrd.obj \
|
||||
strtoofftd.obj \
|
||||
tool_binmoded.obj \
|
||||
tool_bnamed.obj \
|
||||
tool_cb_dbgd.obj \
|
||||
tool_cb_hdrd.obj \
|
||||
tool_cb_prgd.obj \
|
||||
tool_cb_read.obj \
|
||||
tool_cb_seed.obj \
|
||||
tool_cb_wrtd.obj \
|
||||
tool_cfgabled.obj \
|
||||
tool_convertd.obj \
|
||||
tool_dirhied.obj \
|
||||
tool_doswind.obj \
|
||||
tool_easysrcd.obj \
|
||||
tool_formparsed.obj \
|
||||
tool_getparamd.obj \
|
||||
tool_getpassd.obj \
|
||||
tool_helpd.obj \
|
||||
tool_helpersd.obj \
|
||||
tool_homedird.obj \
|
||||
tool_hugehelpd.obj \
|
||||
tool_libinfod.obj \
|
||||
tool_maind.obj \
|
||||
tool_metalinkd.obj \
|
||||
tool_mfilesd.obj \
|
||||
tool_msgsd.obj \
|
||||
tool_operated.obj \
|
||||
tool_operhlpd.obj \
|
||||
tool_panykeyd.obj \
|
||||
tool_paramhlpd.obj \
|
||||
tool_parsecfgd.obj \
|
||||
tool_setoptd.obj \
|
||||
tool_sleepd.obj \
|
||||
tool_urlglobd.obj \
|
||||
tool_utild.obj \
|
||||
tool_vmsd.obj \
|
||||
tool_writeenvd.obj \
|
||||
tool_writeoutd.obj \
|
||||
tool_xattrd.obj \
|
||||
curld.res
|
||||
|
||||
#################################################
|
||||
# If CFG not specified, use static libs
|
||||
|
||||
CFLAGS = $(CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)
|
||||
|
||||
#################################################
|
||||
# release dynamic library
|
||||
|
||||
!IF "$(CFG)" == "release-dll"
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with zlib
|
||||
|
||||
!IF "$(CFG)" == "release-zlib"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with ssl
|
||||
|
||||
!IF "$(CFG)" == "release-ssl"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release dynamic library with dynamic ssl
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with ssl and zlib
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-zlib"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with dynamic ssl
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release dynamic library with dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release static library with dynamic ssl and dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB
|
||||
LINKLIBS = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
#################################################
|
||||
# release dynamic library with dynamic ssl and dynamic zlib
|
||||
|
||||
!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)
|
||||
LINKLIBS = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)
|
||||
!ENDIF
|
||||
|
||||
|
||||
LINKLIBS = $(LINKLIBS) ws2_32.lib wldap32.lib advapi32.lib
|
||||
LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) ws2_32.lib wldap32.lib advapi32.lib
|
||||
|
||||
all : release
|
||||
|
||||
release: $(RELEASE_OBJS)
|
||||
$(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)
|
||||
$(MANIFESTTOOL)
|
||||
|
||||
debug: $(DEBUG_OBJS)
|
||||
$(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)
|
||||
$(MANIFESTTOOL)
|
||||
|
||||
## Release
|
||||
nonblockr.obj: ../lib/nonblock.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrr.obj: ../lib/rawstr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftr.obj: ../lib/strtoofft.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
tool_binmoder.obj: tool_binmode.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamer.obj: tool_bname.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgr.obj: tool_cb_dbg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrr.obj: tool_cb_hdr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgr.obj: tool_cb_prg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_rear.obj: tool_cb_rea.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seer.obj: tool_cb_see.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtr.obj: tool_cb_wrt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabler.obj: tool_cfgable.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertr.obj: tool_convert.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhier.obj: tool_dirhie.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswinr.obj: tool_doswin.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcr.obj: tool_easysrc.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparser.obj: tool_formparse.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamr.obj: tool_getparam.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassr.obj: tool_getpass.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpr.obj: tool_help.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersr.obj: tool_helpers.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedirr.obj: tool_homedir.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpr.obj: tool_hugehelp.c
|
||||
$(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfor.obj: tool_libinfo.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_mainr.obj: tool_main.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkr.obj: tool_metalink.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesr.obj: tool_mfiles.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsr.obj: tool_msgs.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operater.obj: tool_operate.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpr.obj: tool_operhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyr.obj: tool_panykey.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpr.obj: tool_paramhlp.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgr.obj: tool_parsecfg.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptr.obj: tool_setopt.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepr.obj: tool_sleep.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobr.obj: tool_urlglob.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utilr.obj: tool_util.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsr.obj: tool_vms.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvr.obj: tool_writeenv.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutr.obj: tool_writeout.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrr.obj: tool_xattr.c
|
||||
$(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curlr.res : curl.rc
|
||||
$(RCR) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
## Debug
|
||||
nonblockd.obj: ../lib/nonblock.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
rawstrd.obj: ../lib/rawstr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c
|
||||
strtoofftd.obj: ../lib/strtoofft.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
tool_binmoded.obj: tool_binmode.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c
|
||||
tool_bnamed.obj: tool_bname.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_bname.c
|
||||
tool_cb_dbgd.obj: tool_cb_dbg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c
|
||||
tool_cb_hdrd.obj: tool_cb_hdr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c
|
||||
tool_cb_prgd.obj: tool_cb_prg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c
|
||||
tool_cb_read.obj: tool_cb_rea.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c
|
||||
tool_cb_seed.obj: tool_cb_see.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c
|
||||
tool_cb_wrtd.obj: tool_cb_wrt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c
|
||||
tool_cfgabled.obj: tool_cfgable.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c
|
||||
tool_convertd.obj: tool_convert.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_convert.c
|
||||
tool_dirhied.obj: tool_dirhie.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c
|
||||
tool_doswind.obj: tool_doswin.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c
|
||||
tool_easysrcd.obj: tool_easysrc.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c
|
||||
tool_formparsed.obj: tool_formparse.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c
|
||||
tool_getparamd.obj: tool_getparam.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c
|
||||
tool_getpassd.obj: tool_getpass.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c
|
||||
tool_helpd.obj: tool_help.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_help.c
|
||||
tool_helpersd.obj: tool_helpers.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c
|
||||
tool_homedird.obj: tool_homedir.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c
|
||||
tool_hugehelpd.obj: tool_hugehelp.c
|
||||
$(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c
|
||||
tool_libinfod.obj: tool_libinfo.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c
|
||||
tool_maind.obj: tool_main.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_main.c
|
||||
tool_metalinkd.obj: tool_metalink.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c
|
||||
tool_mfilesd.obj: tool_mfiles.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c
|
||||
tool_msgsd.obj: tool_msgs.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c
|
||||
tool_operated.obj: tool_operate.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operate.c
|
||||
tool_operhlpd.obj: tool_operhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c
|
||||
tool_panykeyd.obj: tool_panykey.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c
|
||||
tool_paramhlpd.obj: tool_paramhlp.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c
|
||||
tool_parsecfgd.obj: tool_parsecfg.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c
|
||||
tool_setoptd.obj: tool_setopt.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c
|
||||
tool_sleepd.obj: tool_sleep.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c
|
||||
tool_urlglobd.obj: tool_urlglob.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c
|
||||
tool_utild.obj: tool_util.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_util.c
|
||||
tool_vmsd.obj: tool_vms.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_vms.c
|
||||
tool_writeenvd.obj: tool_writeenv.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c
|
||||
tool_writeoutd.obj: tool_writeout.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c
|
||||
tool_xattrd.obj: tool_xattr.c
|
||||
$(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c
|
||||
curld.res : curl.rc
|
||||
$(RCD) $(RESFLAGS) /Fo"$@" curl.rc
|
||||
|
||||
clean:
|
||||
@-erase $(PROGRAM_NAME) 2> NUL
|
||||
@-erase $(RELEASE_OBJS) 2> NUL
|
||||
@-erase $(DEBUG_OBJS) 2> NUL
|
||||
@-erase *.idb 2> NUL
|
||||
@-erase *.pdb 2> NUL
|
||||
@-erase *.pch 2> NUL
|
||||
@-erase *.ilk 2> NUL
|
||||
@@ -1,66 +0,0 @@
|
||||
#ifndef CURL_CONFIG_AMIGAOS_H
|
||||
#define CURL_CONFIG_AMIGAOS_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2007, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: config-amigaos.h,v 1.8 2007-02-28 14:45:49 yangtse Exp $
|
||||
***************************************************************************/
|
||||
|
||||
#ifdef __AMIGA__ /* Any AmigaOS flavour */
|
||||
|
||||
/* Define to 1 if you want the built-in manual */
|
||||
#define USE_MANUAL 1
|
||||
|
||||
#define OS "AmigaOS"
|
||||
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_STRDUP 1
|
||||
#define HAVE_UTIME 1
|
||||
#define HAVE_UTIME_H 1
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
#define HAVE_SYS_SOCKET_H 1
|
||||
#define HAVE_WRITABLE_ARGV 1
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
#define HAVE_TIME_H 1
|
||||
#define TIME_WITH_SYS_TIME 1
|
||||
#define HAVE_STRUCT_TIMEVAL 1
|
||||
|
||||
#if 0
|
||||
# define HAVE_TERMIOS_H 1
|
||||
# define HAVE_FTRUNCATE 1
|
||||
#endif
|
||||
|
||||
#define HAVE_PWD_H 1
|
||||
|
||||
#ifndef F_OK
|
||||
# define F_OK 0
|
||||
#endif
|
||||
#ifndef O_RDONLY
|
||||
# define O_RDONLY 0x0000 /* open for reading only */
|
||||
#endif
|
||||
#ifndef LONG_MAX
|
||||
# define LONG_MAX 0x7fffffffL /* max value for a long */
|
||||
#endif
|
||||
#ifndef LONG_MIN
|
||||
# define LONG_MIN (-0x7fffffffL-1) /* min value for a long */
|
||||
#endif
|
||||
|
||||
#endif /* __AMIGA__ */
|
||||
#endif /* CURL_CONFIG_AMIGAOS_H */
|
||||
@@ -1,32 +0,0 @@
|
||||
#ifndef __SRC_CONFIG_MAC_H
|
||||
#define __SRC_CONFIG_MAC_H
|
||||
|
||||
/* ================================================================ */
|
||||
/* src/config-mac.h - Hand crafted config file for Mac OS 9 */
|
||||
/* ================================================================ */
|
||||
/* On Mac OS X you must run configure to generate config.h file */
|
||||
/* ================================================================ */
|
||||
|
||||
/* Define to 1 if you want the built-in manual */
|
||||
#define USE_MANUAL 1
|
||||
|
||||
#define HAVE_UNISTD_H 1
|
||||
#define HAVE_FCNTL_H 1
|
||||
#define HAVE_UTIME_H 1
|
||||
#define HAVE_SYS_UTIME_H 1
|
||||
|
||||
#define HAVE_SETVBUF 1
|
||||
#define HAVE_UTIME 1
|
||||
#define HAVE_FTRUNCATE 1
|
||||
|
||||
#define HAVE_TIME_H 1
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
#define TIME_WITH_SYS_TIME 1
|
||||
#define HAVE_STRUCT_TIMEVAL 1
|
||||
|
||||
#define main(x,y) curl_main(x,y)
|
||||
|
||||
/* we provide our own strdup prototype */
|
||||
char *strdup(char *s1);
|
||||
|
||||
#endif /* __SRC_CONFIG_MAC_H */
|
||||
@@ -1,378 +0,0 @@
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
/* Name of this package! */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Version number of this archive. */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if you have the getpass function. */
|
||||
#undef HAVE_GETPASS
|
||||
|
||||
/* Define cpu-machine-OS */
|
||||
#define OS "ARM-RISC OS"
|
||||
|
||||
/* Define to 1 if you want the built-in manual */
|
||||
#define USE_MANUAL 1
|
||||
|
||||
/* Define if you have the gethostbyaddr_r() function with 5 arguments */
|
||||
#undef HAVE_GETHOSTBYADDR_R_5
|
||||
|
||||
/* Define if you have the gethostbyaddr_r() function with 7 arguments */
|
||||
#undef HAVE_GETHOSTBYADDR_R_7
|
||||
|
||||
/* Define if you have the gethostbyaddr_r() function with 8 arguments */
|
||||
#undef HAVE_GETHOSTBYADDR_R_8
|
||||
|
||||
/* Define if you have the gethostbyname_r() function with 3 arguments */
|
||||
#undef HAVE_GETHOSTBYNAME_R_3
|
||||
|
||||
/* Define if you have the gethostbyname_r() function with 5 arguments */
|
||||
#undef HAVE_GETHOSTBYNAME_R_5
|
||||
|
||||
/* Define if you have the gethostbyname_r() function with 6 arguments */
|
||||
#undef HAVE_GETHOSTBYNAME_R_6
|
||||
|
||||
/* Define if you need the _REENTRANT define for some functions */
|
||||
#undef NEED_REENTRANT
|
||||
|
||||
/* Define if you have the Kerberos4 libraries (including -ldes) */
|
||||
#undef HAVE_KRB4
|
||||
|
||||
/* Define if you want to enable IPv6 support */
|
||||
#undef ENABLE_IPV6
|
||||
|
||||
/* Define this to 'int' if ssize_t is not an available typedefed type */
|
||||
#undef ssize_t
|
||||
|
||||
/* Type to use in place of socklen_t when system does not provide it. */
|
||||
#undef socklen_t
|
||||
|
||||
/* Define this as a suitable file to read random data from */
|
||||
#undef RANDOM_FILE
|
||||
|
||||
/* Define this to your Entropy Gathering Daemon socket pathname */
|
||||
#undef EGD_SOCKET
|
||||
|
||||
/* Set to explicitly specify we don't want to use thread-safe functions */
|
||||
#define DISABLED_THREADSAFE
|
||||
|
||||
/* Define if you want to enable IPv6 support */
|
||||
#undef ENABLE_IPV6
|
||||
|
||||
/* Define if you have the <alloca.h> header file. */
|
||||
#define HAVE_ALLOCA_H
|
||||
|
||||
/* Define if you have the <arpa/inet.h> header file. */
|
||||
#define HAVE_ARPA_INET_H
|
||||
|
||||
/* Define if you have the `closesocket' function. */
|
||||
#undef HAVE_CLOSESOCKET
|
||||
|
||||
/* Define if you have the <crypto.h> header file. */
|
||||
#undef HAVE_CRYPTO_H
|
||||
|
||||
/* Define if you have the <des.h> header file. */
|
||||
#undef HAVE_DES_H
|
||||
|
||||
/* Define if you have the <err.h> header file. */
|
||||
#undef HAVE_ERR_H
|
||||
|
||||
/* Define if you have the <fcntl.h> header file. */
|
||||
#define HAVE_FCNTL_H
|
||||
|
||||
/* Define if you have the `ftruncate' function. */
|
||||
#define HAVE_FTRUNCATE
|
||||
|
||||
/* Define if getaddrinfo exists and works */
|
||||
#define HAVE_GETADDRINFO
|
||||
|
||||
/* Define if you have the `geteuid' function. */
|
||||
#undef HAVE_GETEUID
|
||||
|
||||
/* Define if you have the `gethostbyaddr' function. */
|
||||
#define HAVE_GETHOSTBYADDR
|
||||
|
||||
/* Define if you have the `gethostbyaddr_r' function. */
|
||||
#undef HAVE_GETHOSTBYADDR_R
|
||||
|
||||
/* Define if you have the `gethostbyname_r' function. */
|
||||
#undef HAVE_GETHOSTBYNAME_R
|
||||
|
||||
/* Define if you have the `gethostname' function. */
|
||||
#define HAVE_GETHOSTNAME
|
||||
|
||||
/* Define if you have the <getopt.h> header file. */
|
||||
#define HAVE_GETOPT_H
|
||||
|
||||
/* Define if you have the `getpass_r' function. */
|
||||
#undef HAVE_GETPASS_R
|
||||
|
||||
/* Define if you have the `getpwuid' function. */
|
||||
#undef HAVE_GETPWUID
|
||||
|
||||
/* Define if you have the `getservbyname' function. */
|
||||
#undef HAVE_GETSERVBYNAME
|
||||
|
||||
/* Define if you have the `gettimeofday' function. */
|
||||
#define HAVE_GETTIMEOFDAY
|
||||
|
||||
/* Define if you have the `timeval' struct. */
|
||||
#define HAVE_STRUCT_TIMEVAL
|
||||
|
||||
/* Define if you have the `inet_addr' function. */
|
||||
#undef HAVE_INET_ADDR
|
||||
|
||||
/* Define if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have the <io.h> header file. */
|
||||
#undef HAVE_IO_H
|
||||
|
||||
/* Define if you have the `krb_get_our_ip_for_realm' function. */
|
||||
#undef HAVE_KRB_GET_OUR_IP_FOR_REALM
|
||||
|
||||
/* Define if you have the <krb.h> header file. */
|
||||
#undef HAVE_KRB_H
|
||||
|
||||
/* Define if you have the `crypto' library (-lcrypto). */
|
||||
#undef HAVE_LIBCRYPTO
|
||||
|
||||
/* Define if you have the `nsl' library (-lnsl). */
|
||||
#undef HAVE_LIBNSL
|
||||
|
||||
/* Define if you have the `resolv' library (-lresolv). */
|
||||
#undef HAVE_LIBRESOLV
|
||||
|
||||
/* Define if you have the `resolve' library (-lresolve). */
|
||||
#undef HAVE_LIBRESOLVE
|
||||
|
||||
/* Define if you have the `socket' library (-lsocket). */
|
||||
#undef HAVE_LIBSOCKET
|
||||
|
||||
/* Define if you have the `ssl' library (-lssl). */
|
||||
#undef HAVE_LIBSSL
|
||||
|
||||
/* Define if you have the `ucb' library (-lucb). */
|
||||
#undef HAVE_LIBUCB
|
||||
|
||||
/* Define if you have the `localtime_r' function. */
|
||||
#undef HAVE_LOCALTIME_R
|
||||
|
||||
/* Define if you have the <malloc.h> header file. */
|
||||
#define HAVE_MALLOC_H
|
||||
|
||||
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
|
||||
/* #define NEED_MALLOC_H 1 */
|
||||
|
||||
/* Define if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define if you have the <netdb.h> header file. */
|
||||
#define HAVE_NETDB_H
|
||||
|
||||
/* Define if you have the <netinet/if_ether.h> header file. */
|
||||
#undef HAVE_NETINET_IF_ETHER_H
|
||||
|
||||
/* Define if you have the <netinet/in.h> header file. */
|
||||
#define HAVE_NETINET_IN_H
|
||||
|
||||
/* Define if you have the <net/if.h> header file. */
|
||||
#define HAVE_NET_IF_H
|
||||
|
||||
/* Define if you have the <openssl/crypto.h> header file. */
|
||||
#undef HAVE_OPENSSL_CRYPTO_H
|
||||
|
||||
/* Define if you have the <openssl/err.h> header file. */
|
||||
#undef HAVE_OPENSSL_ERR_H
|
||||
|
||||
/* Define if you have the <openssl/pem.h> header file. */
|
||||
#undef HAVE_OPENSSL_PEM_H
|
||||
|
||||
/* Define if you have the <openssl/rsa.h> header file. */
|
||||
#undef HAVE_OPENSSL_RSA_H
|
||||
|
||||
/* Define if you have the <openssl/ssl.h> header file. */
|
||||
#undef HAVE_OPENSSL_SSL_H
|
||||
|
||||
/* Define if you have the <openssl/x509.h> header file. */
|
||||
#undef HAVE_OPENSSL_X509_H
|
||||
|
||||
/* Define if you have the <pem.h> header file. */
|
||||
#undef HAVE_PEM_H
|
||||
|
||||
/* Define if you have the `perror' function. */
|
||||
#undef HAVE_PERROR
|
||||
|
||||
/* Define if you have the <pwd.h> header file. */
|
||||
#undef HAVE_PWD_H
|
||||
|
||||
/* Define if you have the `RAND_egd' function. */
|
||||
#undef HAVE_RAND_EGD
|
||||
|
||||
/* Define if you have the `RAND_screen' function. */
|
||||
#undef HAVE_RAND_SCREEN
|
||||
|
||||
/* Define if you have the `RAND_status' function. */
|
||||
#undef HAVE_RAND_STATUS
|
||||
|
||||
/* Define if you have the <rsa.h> header file. */
|
||||
#undef HAVE_RSA_H
|
||||
|
||||
/* Define if you have the `select' function. */
|
||||
#define HAVE_SELECT
|
||||
|
||||
/* Define if you have the `setvbuf' function. */
|
||||
#undef HAVE_SETVBUF
|
||||
|
||||
/* Define if you have the <sgtty.h> header file. */
|
||||
#define HAVE_SGTTY_H
|
||||
|
||||
/* Define if you have the `sigaction' function. */
|
||||
#undef HAVE_SIGACTION
|
||||
|
||||
/* Define if you have the `signal' function. */
|
||||
#define HAVE_SIGNAL
|
||||
|
||||
/* Define if you have the `socket' function. */
|
||||
#define HAVE_SOCKET
|
||||
|
||||
/* Define if you have the <ssl.h> header file. */
|
||||
#undef HAVE_SSL_H
|
||||
|
||||
/* Define if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H
|
||||
|
||||
/* Define if you have the `strcasecmp' function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define if you have the `strcmpi' function. */
|
||||
#undef HAVE_STRCMPI
|
||||
|
||||
/* Define if you have the `strdup' function. */
|
||||
#define HAVE_STRDUP
|
||||
|
||||
/* Define if you have the `strftime' function. */
|
||||
#define HAVE_STRFTIME
|
||||
|
||||
/* Define if you have the `stricmp' function. */
|
||||
#define HAVE_STRICMP
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H
|
||||
|
||||
/* Define if you have the `strlcat' function. */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define if you have the `strstr' function. */
|
||||
#define HAVE_STRSTR
|
||||
|
||||
/* Define if you have the `strtok_r' function. */
|
||||
#undef HAVE_STRTOK_R
|
||||
|
||||
/* Define if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define if you have the <sys/select.h> header file. */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
/* Define if you have the <sys/socket.h> header file. */
|
||||
#define HAVE_SYS_SOCKET_H
|
||||
|
||||
/* Define if you have the <sys/sockio.h> header file. */
|
||||
#undef HAVE_SYS_SOCKIO_H
|
||||
|
||||
/* Define if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define if you have the <sys/time.h> header file. */
|
||||
#define HAVE_SYS_TIME_H
|
||||
|
||||
/* Define if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define if you have the `tcgetattr' function. */
|
||||
#define HAVE_TCGETATTR
|
||||
|
||||
/* Define if you have the `tcsetattr' function. */
|
||||
#define HAVE_TCSETATTR
|
||||
|
||||
/* Define if you have the <termios.h> header file. */
|
||||
#define HAVE_TERMIOS_H
|
||||
|
||||
/* Define if you have the <termio.h> header file. */
|
||||
#undef HAVE_TERMIO_H
|
||||
|
||||
/* Define if you have the <time.h> header file. */
|
||||
#undef HAVE_TIME_H
|
||||
|
||||
/* Define if you have the `uname' function. */
|
||||
#define HAVE_UNAME
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H
|
||||
|
||||
/* Define if you have the <winsock.h> header file. */
|
||||
#undef HAVE_WINSOCK_H
|
||||
|
||||
/* Define if you have the <x509.h> header file. */
|
||||
#undef HAVE_X509_H
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||
#define RETSIGTYPE void
|
||||
|
||||
/* The size of a `long double', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG_DOUBLE
|
||||
|
||||
/* The size of a `long long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG_LONG
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if on AIX 3.
|
||||
System headers sometimes define this.
|
||||
We just want to avoid a redefinition error message. */
|
||||
#ifndef _ALL_SOURCE
|
||||
# undef _ALL_SOURCE
|
||||
#endif
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
#undef _FILE_OFFSET_BITS
|
||||
|
||||
/* Define for large files, on AIX-style hosts. */
|
||||
#undef _LARGE_FILES
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef ssize_t
|
||||
|
||||
/* this is a quick hack. I hope it's correct. */
|
||||
#define ifr_dstaddr ifr_addr
|
||||
|
||||
#define IOCTL_3_ARGS
|
||||
|
||||
#define HAVE_FIONBIO
|
||||
|
||||
@@ -1,294 +0,0 @@
|
||||
#ifndef __SRC_CONFIG_WIN32_H
|
||||
#define __SRC_CONFIG_WIN32_H
|
||||
|
||||
/* ================================================================ */
|
||||
/* src/config-win32.h - Hand crafted config file for windows */
|
||||
/* ================================================================ */
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* HEADER FILES */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* Define if you have the <fcntl.h> header file. */
|
||||
#define HAVE_FCNTL_H 1
|
||||
|
||||
/* Define if you have the <io.h> header file. */
|
||||
#define HAVE_IO_H 1
|
||||
|
||||
/* Define if you have the <limits.h> header file. */
|
||||
#define HAVE_LIMITS_H 1
|
||||
|
||||
/* Define if you have the <locale.h> header file. */
|
||||
#define HAVE_LOCALE_H 1
|
||||
|
||||
/* Define if you have the <signal.h> header file. */
|
||||
#define HAVE_SIGNAL_H 1
|
||||
|
||||
/* Define if you have the <sys/time.h> header file */
|
||||
/* #define HAVE_SYS_TIME_H 1 */
|
||||
|
||||
/* Define if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define if you have the <time.h> header file. */
|
||||
#define HAVE_TIME_H 1
|
||||
|
||||
/* Define if you have the <sys/utime.h> header file. */
|
||||
#ifndef __BORLANDC__
|
||||
#define HAVE_SYS_UTIME_H 1
|
||||
#endif
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__)
|
||||
#define HAVE_UNISTD_H 1
|
||||
#endif
|
||||
|
||||
/* Define if you have the <windows.h> header file. */
|
||||
#define HAVE_WINDOWS_H 1
|
||||
|
||||
/* Define if you have the <winsock.h> header file. */
|
||||
#define HAVE_WINSOCK_H 1
|
||||
|
||||
/* Define if you have the <winsock2.h> header file. */
|
||||
#define HAVE_WINSOCK2_H 1
|
||||
|
||||
/* Define if you have the <ws2tcpip.h> header file. */
|
||||
#define HAVE_WS2TCPIP_H 1
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* OTHER HEADER INFO */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* Define if sig_atomic_t is an available typedef. */
|
||||
#define HAVE_SIG_ATOMIC_T 1
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||
/* #define TIME_WITH_SYS_TIME 1 */
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* FUNCTIONS */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* Define if you have the setmode function. */
|
||||
#define HAVE_SETMODE 1
|
||||
|
||||
/* Define if you have the ftruncate function. */
|
||||
#define HAVE_FTRUNCATE 1
|
||||
|
||||
/* Define if you have the setlocale function. */
|
||||
#define HAVE_SETLOCALE 1
|
||||
|
||||
/* Define if you have the strcasecmp function. */
|
||||
/* #define HAVE_STRCASECMP 1 */
|
||||
|
||||
/* Define if you have the strdup function. */
|
||||
#define HAVE_STRDUP 1
|
||||
|
||||
/* Define if you have the stricmp function. */
|
||||
#define HAVE_STRICMP 1
|
||||
|
||||
/* Define if you have the strncasecmp function. */
|
||||
/* #define HAVE_STRNCASECMP 1 */
|
||||
|
||||
/* Define if you have the strnicmp function. */
|
||||
#define HAVE_STRNICMP 1
|
||||
|
||||
/* Define if you have the utime function */
|
||||
#ifndef __BORLANDC__
|
||||
#define HAVE_UTIME 1
|
||||
#endif
|
||||
|
||||
/* Define if you have the recv function. */
|
||||
#define HAVE_RECV 1
|
||||
|
||||
/* Define to the type of arg 1 for recv. */
|
||||
#define RECV_TYPE_ARG1 SOCKET
|
||||
|
||||
/* Define to the type of arg 2 for recv. */
|
||||
#define RECV_TYPE_ARG2 char *
|
||||
|
||||
/* Define to the type of arg 3 for recv. */
|
||||
#define RECV_TYPE_ARG3 int
|
||||
|
||||
/* Define to the type of arg 4 for recv. */
|
||||
#define RECV_TYPE_ARG4 int
|
||||
|
||||
/* Define to the function return type for recv. */
|
||||
#define RECV_TYPE_RETV int
|
||||
|
||||
/* Define if you have the recvfrom function. */
|
||||
#define HAVE_RECVFROM 1
|
||||
|
||||
/* Define to the type of arg 1 for recvfrom. */
|
||||
#define RECVFROM_TYPE_ARG1 SOCKET
|
||||
|
||||
/* Define to the type pointed by arg 2 for recvfrom. */
|
||||
#define RECVFROM_TYPE_ARG2 char
|
||||
|
||||
/* Define to the type of arg 3 for recvfrom. */
|
||||
#define RECVFROM_TYPE_ARG3 int
|
||||
|
||||
/* Define to the type of arg 4 for recvfrom. */
|
||||
#define RECVFROM_TYPE_ARG4 int
|
||||
|
||||
/* Define to the type pointed by arg 5 for recvfrom. */
|
||||
#define RECVFROM_TYPE_ARG5 struct sockaddr
|
||||
|
||||
/* Define to the type pointed by arg 6 for recvfrom. */
|
||||
#define RECVFROM_TYPE_ARG6 int
|
||||
|
||||
/* Define to the function return type for recvfrom. */
|
||||
#define RECVFROM_TYPE_RETV int
|
||||
|
||||
/* Define if you have the send function. */
|
||||
#define HAVE_SEND 1
|
||||
|
||||
/* Define to the type of arg 1 for send. */
|
||||
#define SEND_TYPE_ARG1 SOCKET
|
||||
|
||||
/* Define to the type qualifier of arg 2 for send. */
|
||||
#define SEND_QUAL_ARG2 const
|
||||
|
||||
/* Define to the type of arg 2 for send. */
|
||||
#define SEND_TYPE_ARG2 char *
|
||||
|
||||
/* Define to the type of arg 3 for send. */
|
||||
#define SEND_TYPE_ARG3 int
|
||||
|
||||
/* Define to the type of arg 4 for send. */
|
||||
#define SEND_TYPE_ARG4 int
|
||||
|
||||
/* Define to the function return type for send. */
|
||||
#define SEND_TYPE_RETV int
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* TYPEDEF REPLACEMENTS */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* Define this if in_addr_t is not an available 'typedefed' type */
|
||||
#define in_addr_t unsigned long
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#define RETSIGTYPE void
|
||||
|
||||
#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || defined(__POCC__) || \
|
||||
defined(__MINGW32__)
|
||||
#elif defined(_WIN64)
|
||||
#define ssize_t __int64
|
||||
#else
|
||||
#define ssize_t int
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* STRUCT RELATED */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* Define this if you have struct sockaddr_storage */
|
||||
#ifndef __SALFORDC__
|
||||
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
|
||||
#endif
|
||||
|
||||
/* Define this if you have struct timeval */
|
||||
#define HAVE_STRUCT_TIMEVAL 1
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* COMPILER SPECIFIC */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* Undef keyword 'const' if it does not work. */
|
||||
/* #undef const */
|
||||
|
||||
/* Windows should not have HAVE_GMTIME_R defined */
|
||||
/* #undef HAVE_GMTIME_R */
|
||||
|
||||
/* Define if the compiler supports C99 variadic macro style. */
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#define HAVE_VARIADIC_MACROS_C99 1
|
||||
#endif
|
||||
|
||||
/* Define if the compiler supports the 'long long' data type. */
|
||||
#if defined(__MINGW32__) || defined(__WATCOMC__)
|
||||
#define HAVE_LONGLONG 1
|
||||
#endif
|
||||
|
||||
/* Define to avoid VS2005 complaining about portable C functions */
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
#define _CRT_NONSTDC_NO_DEPRECATE 1
|
||||
#endif
|
||||
|
||||
/* VS2005 and later dafault size for time_t is 64-bit, unless */
|
||||
/* _USE_32BIT_TIME_T has been defined to get a 32-bit time_t. */
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
# ifndef _USE_32BIT_TIME_T
|
||||
# define SIZEOF_TIME_T 8
|
||||
# else
|
||||
# define SIZEOF_TIME_T 4
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* VS2008 does not support Windows build targets prior to WinXP, */
|
||||
/* so, if no build target has been defined we will target WinXP. */
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
|
||||
# ifndef _WIN32_WINNT
|
||||
# define _WIN32_WINNT 0x0501
|
||||
# endif
|
||||
# ifndef WINVER
|
||||
# define WINVER 0x0501
|
||||
# endif
|
||||
# if (_WIN32_WINNT < 0x0501) || (WINVER < 0x0501)
|
||||
# error VS2008 does not support Windows build targets prior to WinXP
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is quite */
|
||||
/* convoluted, compiler dependant and in some cases even build target dependat. */
|
||||
#if defined(HAVE_WS2TCPIP_H)
|
||||
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
|
||||
# define HAVE_FREEADDRINFO 1
|
||||
# define HAVE_GETADDRINFO 1
|
||||
# define HAVE_GETNAMEINFO 1
|
||||
# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
|
||||
# define HAVE_FREEADDRINFO 1
|
||||
# define HAVE_GETADDRINFO 1
|
||||
# define HAVE_GETNAMEINFO 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* LARGE FILE SUPPORT */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
#if defined(_MSC_VER) && !defined(_WIN32_WCE)
|
||||
# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
|
||||
# define USE_WIN32_LARGE_FILES
|
||||
# else
|
||||
# define USE_WIN32_SMALL_FILES
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(__MINGW32__) && !defined(USE_WIN32_LARGE_FILES)
|
||||
# define USE_WIN32_LARGE_FILES
|
||||
#endif
|
||||
|
||||
#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES)
|
||||
# define USE_WIN32_SMALL_FILES
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/* ADDITIONAL DEFINITIONS */
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* Define cpu-machine-OS */
|
||||
#ifndef OS
|
||||
#define OS "i386-pc-win32"
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you want the built-in manual */
|
||||
#define USE_MANUAL 1
|
||||
|
||||
|
||||
#endif /* __SRC_CONFIG_WIN32_H */
|
||||
@@ -1,917 +0,0 @@
|
||||
/* lib/config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the $func function. */
|
||||
#undef AS_TR_CPP
|
||||
|
||||
/* when building libcurl itself */
|
||||
#undef BUILDING_LIBCURL
|
||||
|
||||
/* Location of default ca bundle */
|
||||
#undef CURL_CA_BUNDLE
|
||||
|
||||
/* Location of default ca path */
|
||||
#undef CURL_CA_PATH
|
||||
|
||||
/* to disable cookies support */
|
||||
#undef CURL_DISABLE_COOKIES
|
||||
|
||||
/* to disable cryptographic authentication */
|
||||
#undef CURL_DISABLE_CRYPTO_AUTH
|
||||
|
||||
/* to disable DICT */
|
||||
#undef CURL_DISABLE_DICT
|
||||
|
||||
/* to disable FILE */
|
||||
#undef CURL_DISABLE_FILE
|
||||
|
||||
/* to disable FTP */
|
||||
#undef CURL_DISABLE_FTP
|
||||
|
||||
/* to disable HTTP */
|
||||
#undef CURL_DISABLE_HTTP
|
||||
|
||||
/* to disable LDAP */
|
||||
#undef CURL_DISABLE_LDAP
|
||||
|
||||
/* to disable LDAPS */
|
||||
#undef CURL_DISABLE_LDAPS
|
||||
|
||||
/* to disable proxies */
|
||||
#undef CURL_DISABLE_PROXY
|
||||
|
||||
/* to disable TELNET */
|
||||
#undef CURL_DISABLE_TELNET
|
||||
|
||||
/* to disable TFTP */
|
||||
#undef CURL_DISABLE_TFTP
|
||||
|
||||
/* to disable verbose strings */
|
||||
#undef CURL_DISABLE_VERBOSE_STRINGS
|
||||
|
||||
/* to make a symbol visible */
|
||||
#undef CURL_EXTERN_SYMBOL
|
||||
|
||||
/* to enable hidden symbols */
|
||||
#undef CURL_HIDDEN_SYMBOLS
|
||||
|
||||
/* W$ LDAP with non-W$ compiler */
|
||||
#undef CURL_LDAP_HYBRID
|
||||
|
||||
/* Use W$ LDAP implementation */
|
||||
#undef CURL_LDAP_WIN
|
||||
|
||||
/* when not building a shared library */
|
||||
#undef CURL_STATICLIB
|
||||
|
||||
/* Set to explicitly specify we don't want to use thread-safe functions */
|
||||
#undef DISABLED_THREADSAFE
|
||||
|
||||
/* your Entropy Gathering Daemon socket pathname */
|
||||
#undef EGD_SOCKET
|
||||
|
||||
/* Define if you want to enable IPv6 support */
|
||||
#undef ENABLE_IPV6
|
||||
|
||||
/* Define to the type qualifier of arg 1 for getnameinfo. */
|
||||
#undef GETNAMEINFO_QUAL_ARG1
|
||||
|
||||
/* Define to the type of arg 1 for getnameinfo. */
|
||||
#undef GETNAMEINFO_TYPE_ARG1
|
||||
|
||||
/* Define to the type of arg 2 for getnameinfo. */
|
||||
#undef GETNAMEINFO_TYPE_ARG2
|
||||
|
||||
/* Define to the type of args 4 and 6 for getnameinfo. */
|
||||
#undef GETNAMEINFO_TYPE_ARG46
|
||||
|
||||
/* Define to the type of arg 7 for getnameinfo. */
|
||||
#undef GETNAMEINFO_TYPE_ARG7
|
||||
|
||||
/* Specifies the number of arguments to getservbyport_r */
|
||||
#undef GETSERVBYPORT_R_ARGS
|
||||
|
||||
/* Specifies the size of the buffer to pass to getservbyport_r */
|
||||
#undef GETSERVBYPORT_R_BUFSIZE
|
||||
|
||||
/* Define to 1 if you have the alarm function. */
|
||||
#undef HAVE_ALARM
|
||||
|
||||
/* Define to 1 if you have the <alloca.h> header file. */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define to 1 if you have the <arpa/inet.h> header file. */
|
||||
#undef HAVE_ARPA_INET_H
|
||||
|
||||
/* Define to 1 if you have the <arpa/tftp.h> header file. */
|
||||
#undef HAVE_ARPA_TFTP_H
|
||||
|
||||
/* Define to 1 if you have the <assert.h> header file. */
|
||||
#undef HAVE_ASSERT_H
|
||||
|
||||
/* Define to 1 if you have the `basename' function. */
|
||||
#undef HAVE_BASENAME
|
||||
|
||||
/* Define to 1 if bool is an available type. */
|
||||
#undef HAVE_BOOL_T
|
||||
|
||||
/* Define to 1 if you have the clock_gettime function and monotonic timer. */
|
||||
#undef HAVE_CLOCK_GETTIME_MONOTONIC
|
||||
|
||||
/* Define to 1 if you have the `closesocket' function. */
|
||||
#undef HAVE_CLOSESOCKET
|
||||
|
||||
/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
|
||||
#undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
|
||||
|
||||
/* Define to 1 if you have the <crypto.h> header file. */
|
||||
#undef HAVE_CRYPTO_H
|
||||
|
||||
/* Define to 1 if you have the <des.h> header file. */
|
||||
#undef HAVE_DES_H
|
||||
|
||||
/* disabled non-blocking sockets */
|
||||
#undef HAVE_DISABLED_NONBLOCKING
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
|
||||
#undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES
|
||||
|
||||
/* Define to 1 if you have the <errno.h> header file. */
|
||||
#undef HAVE_ERRNO_H
|
||||
|
||||
/* Define to 1 if you have the <err.h> header file. */
|
||||
#undef HAVE_ERR_H
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define to 1 if you have the fdopen function. */
|
||||
#undef HAVE_FDOPEN
|
||||
|
||||
/* use FIONBIO for non-blocking sockets */
|
||||
#undef HAVE_FIONBIO
|
||||
|
||||
/* Define to 1 if you have the `fork' function. */
|
||||
#undef HAVE_FORK
|
||||
|
||||
/* Define to 1 if you have the freeaddrinfo function. */
|
||||
#undef HAVE_FREEADDRINFO
|
||||
|
||||
/* Define to 1 if you have the freeifaddrs function. */
|
||||
#undef HAVE_FREEIFADDRS
|
||||
|
||||
/* Define to 1 if you have the ftruncate function. */
|
||||
#undef HAVE_FTRUNCATE
|
||||
|
||||
/* Define to 1 if you have a working getaddrinfo function. */
|
||||
#undef HAVE_GETADDRINFO
|
||||
|
||||
/* Define to 1 if you have the `geteuid' function. */
|
||||
#undef HAVE_GETEUID
|
||||
|
||||
/* Define to 1 if you have the `gethostbyaddr' function. */
|
||||
#undef HAVE_GETHOSTBYADDR
|
||||
|
||||
/* Define to 1 if you have the gethostbyaddr_r function. */
|
||||
#undef HAVE_GETHOSTBYADDR_R
|
||||
|
||||
/* gethostbyaddr_r() takes 5 args */
|
||||
#undef HAVE_GETHOSTBYADDR_R_5
|
||||
|
||||
/* gethostbyaddr_r() takes 7 args */
|
||||
#undef HAVE_GETHOSTBYADDR_R_7
|
||||
|
||||
/* gethostbyaddr_r() takes 8 args */
|
||||
#undef HAVE_GETHOSTBYADDR_R_8
|
||||
|
||||
/* If you have gethostbyname */
|
||||
#undef HAVE_GETHOSTBYNAME
|
||||
|
||||
/* Define to 1 if you have the gethostbyname_r function. */
|
||||
#undef HAVE_GETHOSTBYNAME_R
|
||||
|
||||
/* gethostbyname_r() takes 3 args */
|
||||
#undef HAVE_GETHOSTBYNAME_R_3
|
||||
|
||||
/* gethostbyname_r() takes 5 args */
|
||||
#undef HAVE_GETHOSTBYNAME_R_5
|
||||
|
||||
/* gethostbyname_r() takes 6 args */
|
||||
#undef HAVE_GETHOSTBYNAME_R_6
|
||||
|
||||
/* Define to 1 if you have the gethostname function. */
|
||||
#undef HAVE_GETHOSTNAME
|
||||
|
||||
/* Define to 1 if you have a working getifaddrs function. */
|
||||
#undef HAVE_GETIFADDRS
|
||||
|
||||
/* Define to 1 if you have the getnameinfo function. */
|
||||
#undef HAVE_GETNAMEINFO
|
||||
|
||||
/* Define to 1 if you have the `getpass_r' function. */
|
||||
#undef HAVE_GETPASS_R
|
||||
|
||||
/* Define to 1 if you have the `getppid' function. */
|
||||
#undef HAVE_GETPPID
|
||||
|
||||
/* Define to 1 if you have the `getprotobyname' function. */
|
||||
#undef HAVE_GETPROTOBYNAME
|
||||
|
||||
/* Define to 1 if you have the `getpwuid' function. */
|
||||
#undef HAVE_GETPWUID
|
||||
|
||||
/* Define to 1 if you have the `getrlimit' function. */
|
||||
#undef HAVE_GETRLIMIT
|
||||
|
||||
/* Define to 1 if you have the getservbyport_r function. */
|
||||
#undef HAVE_GETSERVBYPORT_R
|
||||
|
||||
/* Define to 1 if you have the `gettimeofday' function. */
|
||||
#undef HAVE_GETTIMEOFDAY
|
||||
|
||||
/* Define to 1 if you have a working glibc-style strerror_r function. */
|
||||
#undef HAVE_GLIBC_STRERROR_R
|
||||
|
||||
/* Define to 1 if you have a working gmtime_r function. */
|
||||
#undef HAVE_GMTIME_R
|
||||
|
||||
/* if you have the gssapi libraries */
|
||||
#undef HAVE_GSSAPI
|
||||
|
||||
/* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */
|
||||
#undef HAVE_GSSAPI_GSSAPI_GENERIC_H
|
||||
|
||||
/* Define to 1 if you have the <gssapi/gssapi.h> header file. */
|
||||
#undef HAVE_GSSAPI_GSSAPI_H
|
||||
|
||||
/* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */
|
||||
#undef HAVE_GSSAPI_GSSAPI_KRB5_H
|
||||
|
||||
/* if you have the GNU gssapi libraries */
|
||||
#undef HAVE_GSSGNU
|
||||
|
||||
/* if you have the Heimdal gssapi libraries */
|
||||
#undef HAVE_GSSHEIMDAL
|
||||
|
||||
/* if you have the MIT gssapi libraries */
|
||||
#undef HAVE_GSSMIT
|
||||
|
||||
/* Define to 1 if you have the `idna_strerror' function. */
|
||||
#undef HAVE_IDNA_STRERROR
|
||||
|
||||
/* Define to 1 if you have the `idn_free' function. */
|
||||
#undef HAVE_IDN_FREE
|
||||
|
||||
/* Define to 1 if you have the <idn-free.h> header file. */
|
||||
#undef HAVE_IDN_FREE_H
|
||||
|
||||
/* Define to 1 if you have the <ifaddrs.h> header file. */
|
||||
#undef HAVE_IFADDRS_H
|
||||
|
||||
/* Define to 1 if you have the `inet_addr' function. */
|
||||
#undef HAVE_INET_ADDR
|
||||
|
||||
/* Define to 1 if you have the inet_ntoa_r function. */
|
||||
#undef HAVE_INET_NTOA_R
|
||||
|
||||
/* inet_ntoa_r() takes 2 args */
|
||||
#undef HAVE_INET_NTOA_R_2
|
||||
|
||||
/* inet_ntoa_r() takes 3 args */
|
||||
#undef HAVE_INET_NTOA_R_3
|
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
|
||||
#undef HAVE_INET_NTOP
|
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_pton function. */
|
||||
#undef HAVE_INET_PTON
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* use ioctlsocket() for non-blocking sockets */
|
||||
#undef HAVE_IOCTLSOCKET
|
||||
|
||||
/* use Ioctlsocket() for non-blocking sockets */
|
||||
#undef HAVE_IOCTLSOCKET_CASE
|
||||
|
||||
/* Define to 1 if you have the <io.h> header file. */
|
||||
#undef HAVE_IO_H
|
||||
|
||||
/* if you have the Kerberos4 libraries (including -ldes) */
|
||||
#undef HAVE_KRB4
|
||||
|
||||
/* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */
|
||||
#undef HAVE_KRB_GET_OUR_IP_FOR_REALM
|
||||
|
||||
/* Define to 1 if you have the <krb.h> header file. */
|
||||
#undef HAVE_KRB_H
|
||||
|
||||
/* Define to 1 if you have the lber.h header file. */
|
||||
#undef HAVE_LBER_H
|
||||
|
||||
/* Define to 1 if you have the ldapssl.h header file. */
|
||||
#undef HAVE_LDAPSSL_H
|
||||
|
||||
/* Define to 1 if you have the ldap.h header file. */
|
||||
#undef HAVE_LDAP_H
|
||||
|
||||
/* Use LDAPS implementation */
|
||||
#undef HAVE_LDAP_SSL
|
||||
|
||||
/* Define to 1 if you have the ldap_ssl.h header file. */
|
||||
#undef HAVE_LDAP_SSL_H
|
||||
|
||||
/* Define to 1 if you have the `ldap_url_parse' function. */
|
||||
#undef HAVE_LDAP_URL_PARSE
|
||||
|
||||
/* Define to 1 if you have the <libgen.h> header file. */
|
||||
#undef HAVE_LIBGEN_H
|
||||
|
||||
/* Define to 1 if you have the `idn' library (-lidn). */
|
||||
#undef HAVE_LIBIDN
|
||||
|
||||
/* Define to 1 if you have the `resolv' library (-lresolv). */
|
||||
#undef HAVE_LIBRESOLV
|
||||
|
||||
/* Define to 1 if you have the `resolve' library (-lresolve). */
|
||||
#undef HAVE_LIBRESOLVE
|
||||
|
||||
/* Define to 1 if you have the `socket' library (-lsocket). */
|
||||
#undef HAVE_LIBSOCKET
|
||||
|
||||
/* Define to 1 if you have the `ssh2' library (-lssh2). */
|
||||
#undef HAVE_LIBSSH2
|
||||
|
||||
/* Define to 1 if you have the <libssh2.h> header file. */
|
||||
#undef HAVE_LIBSSH2_H
|
||||
|
||||
/* Define to 1 if you have the `ssl' library (-lssl). */
|
||||
#undef HAVE_LIBSSL
|
||||
|
||||
/* if zlib is available */
|
||||
#undef HAVE_LIBZ
|
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* if your compiler supports LL */
|
||||
#undef HAVE_LL
|
||||
|
||||
/* Define to 1 if you have the <locale.h> header file. */
|
||||
#undef HAVE_LOCALE_H
|
||||
|
||||
/* Define to 1 if you have a working localtime_r function. */
|
||||
#undef HAVE_LOCALTIME_R
|
||||
|
||||
/* Define to 1 if the compiler supports the 'long long' data type. */
|
||||
#undef HAVE_LONGLONG
|
||||
|
||||
/* Define to 1 if you have the malloc.h header file. */
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the MSG_NOSIGNAL flag. */
|
||||
#undef HAVE_MSG_NOSIGNAL
|
||||
|
||||
/* Define to 1 if you have the <netdb.h> header file. */
|
||||
#undef HAVE_NETDB_H
|
||||
|
||||
/* Define to 1 if you have the <netinet/in.h> header file. */
|
||||
#undef HAVE_NETINET_IN_H
|
||||
|
||||
/* Define to 1 if you have the <netinet/tcp.h> header file. */
|
||||
#undef HAVE_NETINET_TCP_H
|
||||
|
||||
/* Define to 1 if you have the <net/if.h> header file. */
|
||||
#undef HAVE_NET_IF_H
|
||||
|
||||
/* Define to 1 if NI_WITHSCOPEID exists and works. */
|
||||
#undef HAVE_NI_WITHSCOPEID
|
||||
|
||||
/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
|
||||
*/
|
||||
#undef HAVE_OLD_GSSMIT
|
||||
|
||||
/* Define to 1 if you have the <openssl/crypto.h> header file. */
|
||||
#undef HAVE_OPENSSL_CRYPTO_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/engine.h> header file. */
|
||||
#undef HAVE_OPENSSL_ENGINE_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/err.h> header file. */
|
||||
#undef HAVE_OPENSSL_ERR_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/pem.h> header file. */
|
||||
#undef HAVE_OPENSSL_PEM_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
|
||||
#undef HAVE_OPENSSL_PKCS12_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/rsa.h> header file. */
|
||||
#undef HAVE_OPENSSL_RSA_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/ssl.h> header file. */
|
||||
#undef HAVE_OPENSSL_SSL_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/x509.h> header file. */
|
||||
#undef HAVE_OPENSSL_X509_H
|
||||
|
||||
/* use O_NONBLOCK for non-blocking sockets */
|
||||
#undef HAVE_O_NONBLOCK
|
||||
|
||||
/* Define to 1 if you have the <pem.h> header file. */
|
||||
#undef HAVE_PEM_H
|
||||
|
||||
/* Define to 1 if you have the `perror' function. */
|
||||
#undef HAVE_PERROR
|
||||
|
||||
/* Define to 1 if you have the `pipe' function. */
|
||||
#undef HAVE_PIPE
|
||||
|
||||
/* if you have the function PK11_CreateGenericObject */
|
||||
#undef HAVE_PK11_CREATEGENERICOBJECT
|
||||
|
||||
/* Define to 1 if you have the `poll' function. */
|
||||
#undef HAVE_POLL
|
||||
|
||||
/* If you have a fine poll */
|
||||
#undef HAVE_POLL_FINE
|
||||
|
||||
/* Define to 1 if you have the <poll.h> header file. */
|
||||
#undef HAVE_POLL_H
|
||||
|
||||
/* Define to 1 if you have a working POSIX-style strerror_r function. */
|
||||
#undef HAVE_POSIX_STRERROR_R
|
||||
|
||||
/* Define to 1 if you have the <pwd.h> header file. */
|
||||
#undef HAVE_PWD_H
|
||||
|
||||
/* Define to 1 if you have the `RAND_egd' function. */
|
||||
#undef HAVE_RAND_EGD
|
||||
|
||||
/* Define to 1 if you have the `RAND_screen' function. */
|
||||
#undef HAVE_RAND_SCREEN
|
||||
|
||||
/* Define to 1 if you have the `RAND_status' function. */
|
||||
#undef HAVE_RAND_STATUS
|
||||
|
||||
/* Define to 1 if you have the recv function. */
|
||||
#undef HAVE_RECV
|
||||
|
||||
/* Define to 1 if you have the recvfrom function. */
|
||||
#undef HAVE_RECVFROM
|
||||
|
||||
/* Define to 1 if you have the <rsa.h> header file. */
|
||||
#undef HAVE_RSA_H
|
||||
|
||||
/* Define to 1 if you have the select function. */
|
||||
#undef HAVE_SELECT
|
||||
|
||||
/* Define to 1 if you have the send function. */
|
||||
#undef HAVE_SEND
|
||||
|
||||
/* Define to 1 if you have the <setjmp.h> header file. */
|
||||
#undef HAVE_SETJMP_H
|
||||
|
||||
/* Define to 1 if you have the `setlocale' function. */
|
||||
#undef HAVE_SETLOCALE
|
||||
|
||||
/* Define to 1 if you have the `setmode' function. */
|
||||
#undef HAVE_SETMODE
|
||||
|
||||
/* Define to 1 if you have the `setrlimit' function. */
|
||||
#undef HAVE_SETRLIMIT
|
||||
|
||||
/* Define to 1 if you have the <sgtty.h> header file. */
|
||||
#undef HAVE_SGTTY_H
|
||||
|
||||
/* Define to 1 if you have the sigaction function. */
|
||||
#undef HAVE_SIGACTION
|
||||
|
||||
/* Define to 1 if you have the siginterrupt function. */
|
||||
#undef HAVE_SIGINTERRUPT
|
||||
|
||||
/* Define to 1 if you have the signal function. */
|
||||
#undef HAVE_SIGNAL
|
||||
|
||||
/* Define to 1 if you have the <signal.h> header file. */
|
||||
#undef HAVE_SIGNAL_H
|
||||
|
||||
/* Define to 1 if you have the sigsetjmp function or macro. */
|
||||
#undef HAVE_SIGSETJMP
|
||||
|
||||
/* Define to 1 if sig_atomic_t is an available typedef. */
|
||||
#undef HAVE_SIG_ATOMIC_T
|
||||
|
||||
/* Define to 1 if sig_atomic_t is already defined as volatile. */
|
||||
#undef HAVE_SIG_ATOMIC_T_VOLATILE
|
||||
|
||||
/* Define to 1 if you have the `socket' function. */
|
||||
#undef HAVE_SOCKET
|
||||
|
||||
/* use SO_NONBLOCK for non-blocking sockets */
|
||||
#undef HAVE_SO_NONBLOCK
|
||||
|
||||
/* Define this if you have the SPNEGO library fbopenssl */
|
||||
#undef HAVE_SPNEGO
|
||||
|
||||
/* Define to 1 if you have the `SSL_get_shutdown' function. */
|
||||
#undef HAVE_SSL_GET_SHUTDOWN
|
||||
|
||||
/* Define to 1 if you have the <ssl.h> header file. */
|
||||
#undef HAVE_SSL_H
|
||||
|
||||
/* Define to 1 if you have the <stdbool.h> header file. */
|
||||
#undef HAVE_STDBOOL_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdio.h> header file. */
|
||||
#undef HAVE_STDIO_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the strcasecmp function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define to 1 if you have the strcasestr function. */
|
||||
#undef HAVE_STRCASESTR
|
||||
|
||||
/* Define to 1 if you have the strcmpi function. */
|
||||
#undef HAVE_STRCMPI
|
||||
|
||||
/* Define to 1 if you have the strdup function. */
|
||||
#undef HAVE_STRDUP
|
||||
|
||||
/* Define to 1 if you have the strerror_r function. */
|
||||
#undef HAVE_STRERROR_R
|
||||
|
||||
/* Define to 1 if you have the stricmp function. */
|
||||
#undef HAVE_STRICMP
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the strlcat function. */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define to 1 if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define to 1 if you have the strncasecmp function. */
|
||||
#undef HAVE_STRNCASECMP
|
||||
|
||||
/* Define to 1 if you have the strncmpi function. */
|
||||
#undef HAVE_STRNCMPI
|
||||
|
||||
/* Define to 1 if you have the strnicmp function. */
|
||||
#undef HAVE_STRNICMP
|
||||
|
||||
/* Define to 1 if you have the strstr function. */
|
||||
#undef HAVE_STRSTR
|
||||
|
||||
/* Define to 1 if you have the strtok_r function. */
|
||||
#undef HAVE_STRTOK_R
|
||||
|
||||
/* Define to 1 if you have the strtoll function. */
|
||||
#undef HAVE_STRTOLL
|
||||
|
||||
/* if struct sockaddr_storage is defined */
|
||||
#undef HAVE_STRUCT_SOCKADDR_STORAGE
|
||||
|
||||
/* Define to 1 if you have the timeval struct. */
|
||||
#undef HAVE_STRUCT_TIMEVAL
|
||||
|
||||
/* Define to 1 if you have the <sys/filio.h> header file. */
|
||||
#undef HAVE_SYS_FILIO_H
|
||||
|
||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */
|
||||
#undef HAVE_SYS_IOCTL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||
#undef HAVE_SYS_POLL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/resource.h> header file. */
|
||||
#undef HAVE_SYS_RESOURCE_H
|
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||
#undef HAVE_SYS_SOCKET_H
|
||||
|
||||
/* Define to 1 if you have the <sys/sockio.h> header file. */
|
||||
#undef HAVE_SYS_SOCKIO_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#undef HAVE_SYS_TIME_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <sys/uio.h> header file. */
|
||||
#undef HAVE_SYS_UIO_H
|
||||
|
||||
/* Define to 1 if you have the <sys/un.h> header file. */
|
||||
#undef HAVE_SYS_UN_H
|
||||
|
||||
/* Define to 1 if you have the <sys/utime.h> header file. */
|
||||
#undef HAVE_SYS_UTIME_H
|
||||
|
||||
/* Define to 1 if you have the <termios.h> header file. */
|
||||
#undef HAVE_TERMIOS_H
|
||||
|
||||
/* Define to 1 if you have the <termio.h> header file. */
|
||||
#undef HAVE_TERMIO_H
|
||||
|
||||
/* Define to 1 if you have the <time.h> header file. */
|
||||
#undef HAVE_TIME_H
|
||||
|
||||
/* Define to 1 if you have the <tld.h> header file. */
|
||||
#undef HAVE_TLD_H
|
||||
|
||||
/* Define to 1 if you have the `tld_strerror' function. */
|
||||
#undef HAVE_TLD_STRERROR
|
||||
|
||||
/* Define to 1 if you have the `uname' function. */
|
||||
#undef HAVE_UNAME
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the `utime' function. */
|
||||
#undef HAVE_UTIME
|
||||
|
||||
/* Define to 1 if you have the <utime.h> header file. */
|
||||
#undef HAVE_UTIME_H
|
||||
|
||||
/* Define to 1 if compiler supports C99 variadic macro style. */
|
||||
#undef HAVE_VARIADIC_MACROS_C99
|
||||
|
||||
/* Define to 1 if compiler supports old gcc variadic macro style. */
|
||||
#undef HAVE_VARIADIC_MACROS_GCC
|
||||
|
||||
/* Define to 1 if you have the winber.h header file. */
|
||||
#undef HAVE_WINBER_H
|
||||
|
||||
/* Define to 1 if you have the windows.h header file. */
|
||||
#undef HAVE_WINDOWS_H
|
||||
|
||||
/* Define to 1 if you have the winldap.h header file. */
|
||||
#undef HAVE_WINLDAP_H
|
||||
|
||||
/* Define to 1 if you have the winsock2.h header file. */
|
||||
#undef HAVE_WINSOCK2_H
|
||||
|
||||
/* Define to 1 if you have the winsock.h header file. */
|
||||
#undef HAVE_WINSOCK_H
|
||||
|
||||
/* Define this symbol if your OS supports changing the contents of argv */
|
||||
#undef HAVE_WRITABLE_ARGV
|
||||
|
||||
/* Define to 1 if you have the writev function. */
|
||||
#undef HAVE_WRITEV
|
||||
|
||||
/* Define to 1 if you have the ws2tcpip.h header file. */
|
||||
#undef HAVE_WS2TCPIP_H
|
||||
|
||||
/* Define to 1 if you have the <x509.h> header file. */
|
||||
#undef HAVE_X509_H
|
||||
|
||||
/* if you have the zlib.h header file */
|
||||
#undef HAVE_ZLIB_H
|
||||
|
||||
/* Define to 1 if you are building a native Windows target. */
|
||||
#undef NATIVE_WINDOWS
|
||||
|
||||
/* If you lack a fine basename() prototype */
|
||||
#undef NEED_BASENAME_PROTO
|
||||
|
||||
/* Define to 1 if you need the lber.h header file even with ldap.h */
|
||||
#undef NEED_LBER_H
|
||||
|
||||
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
|
||||
#undef NEED_MALLOC_H
|
||||
|
||||
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
|
||||
#undef NEED_REENTRANT
|
||||
|
||||
/* cpu-machine-OS */
|
||||
#undef OS
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* a suitable file to read random data from */
|
||||
#undef RANDOM_FILE
|
||||
|
||||
/* Define to the type of arg 1 for recvfrom. */
|
||||
#undef RECVFROM_TYPE_ARG1
|
||||
|
||||
/* Define to the type pointed by arg 2 for recvfrom. */
|
||||
#undef RECVFROM_TYPE_ARG2
|
||||
|
||||
/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */
|
||||
#undef RECVFROM_TYPE_ARG2_IS_VOID
|
||||
|
||||
/* Define to the type of arg 3 for recvfrom. */
|
||||
#undef RECVFROM_TYPE_ARG3
|
||||
|
||||
/* Define to the type of arg 4 for recvfrom. */
|
||||
#undef RECVFROM_TYPE_ARG4
|
||||
|
||||
/* Define to the type pointed by arg 5 for recvfrom. */
|
||||
#undef RECVFROM_TYPE_ARG5
|
||||
|
||||
/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */
|
||||
#undef RECVFROM_TYPE_ARG5_IS_VOID
|
||||
|
||||
/* Define to the type pointed by arg 6 for recvfrom. */
|
||||
#undef RECVFROM_TYPE_ARG6
|
||||
|
||||
/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */
|
||||
#undef RECVFROM_TYPE_ARG6_IS_VOID
|
||||
|
||||
/* Define to the function return type for recvfrom. */
|
||||
#undef RECVFROM_TYPE_RETV
|
||||
|
||||
/* Define to the type of arg 1 for recv. */
|
||||
#undef RECV_TYPE_ARG1
|
||||
|
||||
/* Define to the type of arg 2 for recv. */
|
||||
#undef RECV_TYPE_ARG2
|
||||
|
||||
/* Define to the type of arg 3 for recv. */
|
||||
#undef RECV_TYPE_ARG3
|
||||
|
||||
/* Define to the type of arg 4 for recv. */
|
||||
#undef RECV_TYPE_ARG4
|
||||
|
||||
/* Define to the function return type for recv. */
|
||||
#undef RECV_TYPE_RETV
|
||||
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define to the type qualifier of arg 5 for select. */
|
||||
#undef SELECT_QUAL_ARG5
|
||||
|
||||
/* Define to the type of arg 1 for select. */
|
||||
#undef SELECT_TYPE_ARG1
|
||||
|
||||
/* Define to the type of args 2, 3 and 4 for select. */
|
||||
#undef SELECT_TYPE_ARG234
|
||||
|
||||
/* Define to the type of arg 5 for select. */
|
||||
#undef SELECT_TYPE_ARG5
|
||||
|
||||
/* Define to the function return type for select. */
|
||||
#undef SELECT_TYPE_RETV
|
||||
|
||||
/* Define to the type qualifier of arg 2 for send. */
|
||||
#undef SEND_QUAL_ARG2
|
||||
|
||||
/* Define to the type of arg 1 for send. */
|
||||
#undef SEND_TYPE_ARG1
|
||||
|
||||
/* Define to the type of arg 2 for send. */
|
||||
#undef SEND_TYPE_ARG2
|
||||
|
||||
/* Define to the type of arg 3 for send. */
|
||||
#undef SEND_TYPE_ARG3
|
||||
|
||||
/* Define to the type of arg 4 for send. */
|
||||
#undef SEND_TYPE_ARG4
|
||||
|
||||
/* Define to the function return type for send. */
|
||||
#undef SEND_TYPE_RETV
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* The size of `off_t', as computed by sizeof. */
|
||||
#undef SIZEOF_OFF_T
|
||||
|
||||
/* The size of `size_t', as computed by sizeof. */
|
||||
#undef SIZEOF_SIZE_T
|
||||
|
||||
/* The size of `time_t', as computed by sizeof. */
|
||||
#undef SIZEOF_TIME_T
|
||||
|
||||
/* The size of `void*', as computed by sizeof. */
|
||||
#undef SIZEOF_VOIDP
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define to the type of arg 3 for strerror_r. */
|
||||
#undef STRERROR_R_TYPE_ARG3
|
||||
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* Define if you want to enable c-ares support */
|
||||
#undef USE_ARES
|
||||
|
||||
/* if GnuTLS is enabled */
|
||||
#undef USE_GNUTLS
|
||||
|
||||
/* if libSSH2 is in use */
|
||||
#undef USE_LIBSSH2
|
||||
|
||||
/* If you want to build curl with the built-in manual */
|
||||
#undef USE_MANUAL
|
||||
|
||||
/* if NSS is enabled */
|
||||
#undef USE_NSS
|
||||
|
||||
/* if OpenSSL is in use */
|
||||
#undef USE_OPENSSL
|
||||
|
||||
/* if SSL is enabled */
|
||||
#undef USE_SSLEAY
|
||||
|
||||
/* Define to 1 if you are building a Windows target without large file
|
||||
support. */
|
||||
#undef USE_WIN32_LARGE_FILES
|
||||
|
||||
/* to enable SSPI support */
|
||||
#undef USE_WINDOWS_SSPI
|
||||
|
||||
/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
|
||||
#undef USE_YASSLEMUL
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define to avoid automatic inclusion of winsock.h */
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
|
||||
/* Define to 1 if OS is AIX. */
|
||||
#ifndef _ALL_SOURCE
|
||||
# undef _ALL_SOURCE
|
||||
#endif
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
#undef _FILE_OFFSET_BITS
|
||||
|
||||
/* Define for large files, on AIX-style hosts. */
|
||||
#undef _LARGE_FILES
|
||||
|
||||
/* define this if you need it to compile thread-safe code */
|
||||
#undef _THREAD_SAFE
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
/* Type to use in place of in_addr_t when system does not provide it. */
|
||||
#undef in_addr_t
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
/* Type to use in place of socklen_t when system does not provide it. */
|
||||
#undef socklen_t
|
||||
|
||||
/* the signed version of size_t */
|
||||
#undef ssize_t
|
||||
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <[email protected]>, et al.
|
||||
* Copyright (C) 1998 - 2009, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -18,10 +18,9 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: curl.rc,v 1.11 2008-01-24 14:14:34 gknauf Exp $
|
||||
***************************************************************************/
|
||||
#include <winver.h>
|
||||
#include "version.h"
|
||||
#include "tool_version.h"
|
||||
|
||||
LANGUAGE 0x09,0x01
|
||||
|
||||
@@ -31,7 +30,7 @@ VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION RC_VERSION
|
||||
PRODUCTVERSION RC_VERSION
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#if defined(CURLDEBUG) || defined(_DEBUG)
|
||||
#if defined(DEBUGBUILD) || defined(_DEBUG)
|
||||
FILEFLAGS 1
|
||||
#else
|
||||
FILEFLAGS 0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -14,15 +14,16 @@ MANPAGE = ../docs/curl.1
|
||||
README = ../docs/MANUAL
|
||||
MKHELP = ../src/mkhelp.pl
|
||||
|
||||
OBJS = getpass.c hugehelp.c main.c urlglob.c writeenv.c writeout.c curlutil.c ../lib/rawstr.c
|
||||
include Makefile.inc
|
||||
|
||||
OBJS = $(CURL_CFILES:.c=.o) $(CURLX_ONES:.c=.o)
|
||||
|
||||
all: hugehelp.c $(OBJS:.c=.o)
|
||||
$(CC) $(CFLAGS) -o cURL $(OBJS:.c=.o) $(LIBS) -Wl,-Map,cURL.map,--cref
|
||||
all: tool_hugehelp.c $(OBJS)
|
||||
$(CC) $(CFLAGS) -o cURL $(OBJS) $(LIBS) -Wl,-Map,cURL.map,--cref
|
||||
|
||||
hugehelp.c: $(README) $(MANPAGE) mkhelp.pl
|
||||
rm -f hugehelp.c
|
||||
/bin/nroff -man $(MANPAGE) | /bin/perl $(MKHELP) -c $(README) > hugehelp.c
|
||||
tool_hugehelp.c: $(README) $(MANPAGE) mkhelp.pl
|
||||
rm -f tool_hugehelp.c
|
||||
/bin/nroff -man $(MANPAGE) | /bin/perl $(MKHELP) -c $(README) > tool_hugehelp.c
|
||||
|
||||
install:
|
||||
$(INSTALL) -c cURL /c/cURL
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
#
|
||||
# $Id: makefile.dj,v 1.11 2007-02-27 15:44:25 giva Exp $
|
||||
#
|
||||
# Adapted for djgpp2 / Watt-32 / DOS by
|
||||
# Gisle Vanem <giva@bgnett.no>
|
||||
# Gisle Vanem <gvanem@broadpark.no>
|
||||
#
|
||||
|
||||
DEPEND_PREREQ = config.h hugehelp.c
|
||||
DEPEND_PREREQ = # tool_hugehelp.c
|
||||
|
||||
top_srcdir = ..
|
||||
TOPDIR = ..
|
||||
|
||||
include ../packages/DOS/common.dj
|
||||
include Makefile.inc
|
||||
|
||||
CSOURCES = $(CURL_SOURCES)
|
||||
CSOURCES = $(CURL_CFILES)
|
||||
|
||||
ifeq ($(USE_SSL),1)
|
||||
EX_LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
|
||||
@@ -39,27 +36,39 @@ CFLAGS += -DUSE_ENVIRONMENT
|
||||
PROGRAM = curl.exe
|
||||
OBJECTS += $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
|
||||
|
||||
all: $(OBJ_DIR) config.h $(PROGRAM)
|
||||
all: $(OBJ_DIR) $(PROGRAM)
|
||||
@echo Welcome to cURL
|
||||
|
||||
$(PROGRAM): $(OBJECTS) ../lib/libcurl.a
|
||||
$(CC) -o $@ $^ $(LDFLAGS) $(EX_LIBS)
|
||||
|
||||
config.h:
|
||||
@echo '#include "../lib/config.dos"' > $@
|
||||
|
||||
#
|
||||
# groff 1.18+ requires "-P -c"
|
||||
#
|
||||
hugehelp.c: ../docs/MANUAL ../docs/curl.1 mkhelp.pl
|
||||
tool_hugehelp.c: ../docs/MANUAL ../docs/curl.1 mkhelp.pl
|
||||
groff -Tascii -man ../docs/curl.1 | \
|
||||
perl -w mkhelp.pl ../docs/MANUAL > $@
|
||||
|
||||
clean:
|
||||
- rm -f $(OBJECTS) config.h
|
||||
# clean generated files
|
||||
#
|
||||
genclean:
|
||||
- $(DELETE) tool_hugehelp.c
|
||||
|
||||
# clean object files and subdir
|
||||
#
|
||||
objclean: genclean
|
||||
- $(DELETE) $(OBJ_DIR)$(DS)*.o
|
||||
- $(RMDIR) $(OBJ_DIR)
|
||||
|
||||
# clean without removing built program
|
||||
#
|
||||
clean: objclean
|
||||
- $(DELETE) depend.dj
|
||||
|
||||
# clean everything
|
||||
#
|
||||
realclean vclean: clean
|
||||
- rm -f $(PROGRAM) hugehelp.c depend.dj
|
||||
- $(DELETE) $(PROGRAM)
|
||||
|
||||
-include depend.dj
|
||||
|
||||
|
||||
@@ -1,4 +1,25 @@
|
||||
#!/usr/local/bin/perl
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1998 - 2011, Daniel Stenberg, <[email protected]>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
# Yeah, I know, probably 1000 other persons already wrote a script like
|
||||
# this, but I'll tell ya:
|
||||
@@ -20,10 +41,10 @@ if($README eq "") {
|
||||
}
|
||||
|
||||
|
||||
push @out, " _ _ ____ _ \n";
|
||||
push @out, " Project ___| | | | _ \\| | \n";
|
||||
push @out, " / __| | | | |_) | | \n";
|
||||
push @out, " | (__| |_| | _ <| |___ \n";
|
||||
push @out, " _ _ ____ _\n";
|
||||
push @out, " Project ___| | | | _ \\| |\n";
|
||||
push @out, " / __| | | | |_) | |\n";
|
||||
push @out, " | (__| |_| | _ <| |___\n";
|
||||
push @out, " \\___|\\___/|_| \\_\\_____|\n";
|
||||
|
||||
my $olen=0;
|
||||
@@ -35,12 +56,12 @@ while (<STDIN>) {
|
||||
|
||||
if($line =~ /^([ \t]*\n|curl)/i) {
|
||||
# cut off headers and empty lines
|
||||
$wline++; # count number of cut off lines
|
||||
next;
|
||||
$wline++; # count number of cut off lines
|
||||
next;
|
||||
}
|
||||
|
||||
my $text = $line;
|
||||
$text =~ s/^\s+//g; # cut off preceeding...
|
||||
$text =~ s/^\s+//g; # cut off preceding...
|
||||
$text =~ s/\s+$//g; # and trailing whitespaces
|
||||
|
||||
$tlen = length($text);
|
||||
@@ -57,8 +78,8 @@ while (<STDIN>) {
|
||||
$olen = $tlen;
|
||||
|
||||
if($wline) {
|
||||
# we only make one empty line max
|
||||
$wline = 0;
|
||||
# we only make one empty line max
|
||||
$wline = 0;
|
||||
push @out, "\n";
|
||||
}
|
||||
push @out, $line;
|
||||
@@ -87,7 +108,7 @@ if($c) {
|
||||
close(GZIP);
|
||||
|
||||
system("gzip --best --no-name dumpit");
|
||||
|
||||
|
||||
open(GZIP, "<dumpit.gz") ||
|
||||
die "can't read the dumpit.gz file, try without -c";
|
||||
binmode GZIP;
|
||||
@@ -112,16 +133,14 @@ print <<HEAD
|
||||
* NEVER EVER edit this manually, fix the mkhelp.pl script instead!
|
||||
* Generation time: $now
|
||||
*/
|
||||
#include "setup.h"
|
||||
#ifdef USE_MANUAL
|
||||
#include "hugehelp.h"
|
||||
#include <stdio.h>
|
||||
#include "tool_hugehelp.h"
|
||||
HEAD
|
||||
;
|
||||
if($c) {
|
||||
print <<HEAD
|
||||
#include <stdlib.h>
|
||||
#include <zlib.h>
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
static const unsigned char hugehelpgz[] = {
|
||||
/* This mumbo-jumbo is the huge help text compressed with gzip.
|
||||
Thanks to this operation, the size of this data shrunk from $gzip
|
||||
@@ -146,6 +165,17 @@ HEAD
|
||||
|
||||
print <<EOF
|
||||
#define BUF_SIZE 0x10000
|
||||
static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
|
||||
{
|
||||
(void) opaque;
|
||||
/* not a typo, keep it calloc() */
|
||||
return (voidpf) calloc(items, size);
|
||||
}
|
||||
static void zfree_func(voidpf opaque, voidpf ptr)
|
||||
{
|
||||
(void) opaque;
|
||||
free(ptr);
|
||||
}
|
||||
/* Decompress and send to stdout a gzip-compressed buffer */
|
||||
void hugehelp(void)
|
||||
{
|
||||
@@ -158,11 +188,11 @@ void hugehelp(void)
|
||||
return;
|
||||
|
||||
headerlen = 10;
|
||||
memset(&z, 0, sizeof(z_stream));
|
||||
z.zalloc = (alloc_func)zalloc_func;
|
||||
z.zfree = (free_func)zfree_func;
|
||||
z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
|
||||
z.next_in = (unsigned char *)hugehelpgz + headerlen;
|
||||
z.zalloc = (alloc_func)Z_NULL;
|
||||
z.zfree = (free_func)Z_NULL;
|
||||
z.opaque = 0;
|
||||
|
||||
if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
|
||||
return;
|
||||
@@ -174,12 +204,12 @@ void hugehelp(void)
|
||||
z.next_out = buf;
|
||||
status = inflate(&z, Z_SYNC_FLUSH);
|
||||
if (status == Z_OK || status == Z_STREAM_END) {
|
||||
fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
|
||||
if (status == Z_STREAM_END)
|
||||
break;
|
||||
fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
|
||||
if (status == Z_STREAM_END)
|
||||
break;
|
||||
}
|
||||
else
|
||||
break; /* Error */
|
||||
else
|
||||
break; /* Error */
|
||||
}
|
||||
free(buf);
|
||||
}
|
||||
|
||||
@@ -1,208 +0,0 @@
|
||||
#ifndef __SRC_CURL_SETUP_H
|
||||
#define __SRC_CURL_SETUP_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: setup.h,v 1.58 2008-09-05 01:27:24 yangtse Exp $
|
||||
***************************************************************************/
|
||||
|
||||
#define CURL_NO_OLDIES
|
||||
|
||||
/*
|
||||
* Define WIN32 when build target is Win32 API
|
||||
*/
|
||||
|
||||
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && !defined(__SYMBIAN32__)
|
||||
#define WIN32
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Include configuration script results or hand-crafted
|
||||
* configuration file for platforms which lack config tool.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#else
|
||||
|
||||
#ifdef WIN32
|
||||
#include "config-win32.h"
|
||||
#endif
|
||||
|
||||
#if defined(macintosh) && defined(__MRC__)
|
||||
# include "config-mac.h"
|
||||
#endif
|
||||
|
||||
#ifdef __riscos__
|
||||
#include "config-riscos.h"
|
||||
#endif
|
||||
|
||||
#ifdef __AMIGA__
|
||||
#include "config-amigaos.h"
|
||||
#endif
|
||||
|
||||
#ifdef __SYMBIAN32__
|
||||
#include "config-symbian.h"
|
||||
#endif
|
||||
|
||||
#ifdef TPF
|
||||
#include "config-tpf.h"
|
||||
/* change which select is used for the curl command line tool */
|
||||
#define select(a,b,c,d,e) tpf_select_bsd(a,b,c,d,e)
|
||||
/* and turn off the progress meter */
|
||||
#define CONF_DEFAULT (0|CONF_NOPROGRESS)
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
|
||||
/*
|
||||
* Tru64 needs _REENTRANT set for a few function prototypes and
|
||||
* things to appear in the system header files. Unixware needs it
|
||||
* to build proper reentrant code. Others may also need it.
|
||||
*/
|
||||
|
||||
#ifdef NEED_REENTRANT
|
||||
# ifndef _REENTRANT
|
||||
# define _REENTRANT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Include header files for windows builds before redefining anything.
|
||||
* Use this preproessor block only to include or exclude windows.h,
|
||||
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
|
||||
* to any other further and independant block. Under Cygwin things work
|
||||
* just as under linux (e.g. <sys/socket.h>) and the winsock headers should
|
||||
* never be included when __CYGWIN__ is defined. configure script takes
|
||||
* care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
|
||||
* neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_WINDOWS_H
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# ifdef HAVE_WS2TCPIP_H
|
||||
# include <ws2tcpip.h>
|
||||
# endif
|
||||
# else
|
||||
# ifdef HAVE_WINSOCK_H
|
||||
# include <winsock.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
|
||||
* define USE_WINSOCK to 1 if we have and use WINSOCK API, else
|
||||
* undefine USE_WINSOCK.
|
||||
*/
|
||||
|
||||
#undef USE_WINSOCK
|
||||
|
||||
#ifdef HAVE_WINSOCK2_H
|
||||
# define USE_WINSOCK 2
|
||||
#else
|
||||
# ifdef HAVE_WINSOCK_H
|
||||
# define USE_WINSOCK 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __TANDEM
|
||||
#include <floss.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef OS
|
||||
#define OS "unknown"
|
||||
#endif
|
||||
|
||||
#if !defined(fileno) && !defined(WIN32) /* sunos 4 have this as a macro! */
|
||||
int fileno( FILE *stream);
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#define DIR_CHAR "\\"
|
||||
#define DOT_CHAR "_"
|
||||
#else
|
||||
#ifdef __EMX__
|
||||
/* 20000318 mgs
|
||||
* OS/2 supports leading dots in filenames if the volume is formatted
|
||||
* with JFS or HPFS. */
|
||||
#define DIR_CHAR "\\"
|
||||
#define DOT_CHAR "."
|
||||
#else
|
||||
|
||||
#ifdef DJGPP
|
||||
#include <tcp.h>
|
||||
#ifdef word
|
||||
#undef word
|
||||
#endif
|
||||
#ifndef HAVE_LIMITS_H
|
||||
#define HAVE_LIMITS_H /* we have limits.h */
|
||||
#endif
|
||||
#define DIR_CHAR "/"
|
||||
#define DOT_CHAR "_"
|
||||
#else
|
||||
|
||||
#define DIR_CHAR "/"
|
||||
#define DOT_CHAR "."
|
||||
|
||||
#endif /* !DJGPP */
|
||||
#endif /* !__EMX__ */
|
||||
#endif /* !WIN32 */
|
||||
|
||||
#ifdef __riscos__
|
||||
#define USE_ENVIRONMENT
|
||||
#endif
|
||||
|
||||
#ifdef __BEOS__
|
||||
#define typedef_bool
|
||||
#endif
|
||||
|
||||
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
|
||||
#include <sys/timeval.h>
|
||||
#endif
|
||||
|
||||
#ifndef UNPRINTABLE_CHAR
|
||||
/* define what to use for unprintable characters */
|
||||
#define UNPRINTABLE_CHAR '.'
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRDUP
|
||||
#include "strdup.h"
|
||||
#define strdup(ptr) curlx_strdup(ptr)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Include macros and defines that should only be processed once.
|
||||
*/
|
||||
|
||||
#ifndef __SETUP_ONCE_H
|
||||
#include "setup_once.h"
|
||||
#endif
|
||||
|
||||
#endif /* __SRC_CURL_SETUP_H */
|
||||
@@ -0,0 +1,52 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef HAVE_SETMODE
|
||||
|
||||
#ifdef HAVE_IO_H
|
||||
# include <io.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#include "tool_binmode.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
void set_binmode(FILE *stream)
|
||||
{
|
||||
#ifdef O_BINARY
|
||||
# ifdef __HIGHC__
|
||||
_setmode(stream, O_BINARY);
|
||||
# else
|
||||
setmode(fileno(stream), O_BINARY);
|
||||
# endif
|
||||
#else
|
||||
(void)stream;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* HAVE_SETMODE */
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef HEADER_CURL_TOOL_BINMODE_H
|
||||
#define HEADER_CURL_TOOL_BINMODE_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef HAVE_SETMODE
|
||||
|
||||
void set_binmode(FILE *stream);
|
||||
|
||||
#else
|
||||
|
||||
#define set_binmode(x) Curl_nop_stmt
|
||||
|
||||
#endif /* HAVE_SETMODE */
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_BINMODE_H */
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "tool_bname.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#ifndef HAVE_BASENAME
|
||||
|
||||
char *tool_basename(char *path)
|
||||
{
|
||||
char *s1;
|
||||
char *s2;
|
||||
|
||||
s1 = strrchr(path, '/');
|
||||
s2 = strrchr(path, '\\');
|
||||
|
||||
if(s1 && s2) {
|
||||
path = (s1 > s2) ? s1 + 1 : s2 + 1;
|
||||
}
|
||||
else if(s1)
|
||||
path = s1 + 1;
|
||||
else if(s2)
|
||||
path = s2 + 1;
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
#endif /* HAVE_BASENAME */
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef HEADER_CURL_TOOL_BNAME_H
|
||||
#define HEADER_CURL_TOOL_BNAME_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifndef HAVE_BASENAME
|
||||
|
||||
char *tool_basename(char *path);
|
||||
|
||||
#define basename(x) tool_basename((x))
|
||||
|
||||
#endif /* HAVE_BASENAME */
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_BNAME_H */
|
||||
|
||||
@@ -0,0 +1,275 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_msgs.h"
|
||||
#include "tool_cb_dbg.h"
|
||||
#include "tool_util.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
static void dump(const char *timebuf, const char *text,
|
||||
FILE *stream, const unsigned char *ptr, size_t size,
|
||||
trace tracetype, curl_infotype infotype);
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_DEBUGFUNCTION
|
||||
*/
|
||||
|
||||
int tool_debug_cb(CURL *handle, curl_infotype type,
|
||||
unsigned char *data, size_t size,
|
||||
void *userdata)
|
||||
{
|
||||
struct Configurable *config = userdata;
|
||||
FILE *output = config->errors;
|
||||
const char *text;
|
||||
struct timeval tv;
|
||||
struct tm *now;
|
||||
char timebuf[20];
|
||||
time_t secs;
|
||||
static time_t epoch_offset;
|
||||
static int known_offset;
|
||||
|
||||
(void)handle; /* not used */
|
||||
|
||||
if(config->tracetime) {
|
||||
tv = tvnow();
|
||||
if(!known_offset) {
|
||||
epoch_offset = time(NULL) - tv.tv_sec;
|
||||
known_offset = 1;
|
||||
}
|
||||
secs = epoch_offset + tv.tv_sec;
|
||||
now = localtime(&secs); /* not thread safe but we don't care */
|
||||
snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld ",
|
||||
now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec);
|
||||
}
|
||||
else
|
||||
timebuf[0] = 0;
|
||||
|
||||
if(!config->trace_stream) {
|
||||
/* open for append */
|
||||
if(curlx_strequal("-", config->trace_dump))
|
||||
config->trace_stream = stdout;
|
||||
else if(curlx_strequal("%", config->trace_dump))
|
||||
/* Ok, this is somewhat hackish but we do it undocumented for now */
|
||||
config->trace_stream = config->errors; /* aka stderr */
|
||||
else {
|
||||
config->trace_stream = fopen(config->trace_dump, "w");
|
||||
config->trace_fopened = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if(config->trace_stream)
|
||||
output = config->trace_stream;
|
||||
|
||||
if(!output) {
|
||||
warnf(config, "Failed to create/open output");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(config->tracetype == TRACE_PLAIN) {
|
||||
/*
|
||||
* This is the trace look that is similar to what libcurl makes on its
|
||||
* own.
|
||||
*/
|
||||
static const char * const s_infotype[] = {
|
||||
"*", "<", ">", "{", "}", "{", "}"
|
||||
};
|
||||
size_t i;
|
||||
size_t st = 0;
|
||||
static bool newl = FALSE;
|
||||
static bool traced_data = FALSE;
|
||||
|
||||
switch(type) {
|
||||
case CURLINFO_HEADER_OUT:
|
||||
if(size > 0) {
|
||||
for(i = 0; i < size - 1; i++) {
|
||||
if(data[i] == '\n') { /* LF */
|
||||
if(!newl) {
|
||||
fprintf(output, "%s%s ", timebuf, s_infotype[type]);
|
||||
}
|
||||
(void)fwrite(data + st, i - st + 1, 1, output);
|
||||
st = i + 1;
|
||||
newl = FALSE;
|
||||
}
|
||||
}
|
||||
if(!newl)
|
||||
fprintf(output, "%s%s ", timebuf, s_infotype[type]);
|
||||
(void)fwrite(data + st, i - st + 1, 1, output);
|
||||
}
|
||||
newl = (size && (data[size - 1] != '\n')) ? TRUE : FALSE;
|
||||
traced_data = FALSE;
|
||||
break;
|
||||
case CURLINFO_TEXT:
|
||||
case CURLINFO_HEADER_IN:
|
||||
if(!newl)
|
||||
fprintf(output, "%s%s ", timebuf, s_infotype[type]);
|
||||
(void)fwrite(data, size, 1, output);
|
||||
newl = (size && (data[size - 1] != '\n')) ? TRUE : FALSE;
|
||||
traced_data = FALSE;
|
||||
break;
|
||||
case CURLINFO_DATA_OUT:
|
||||
case CURLINFO_DATA_IN:
|
||||
case CURLINFO_SSL_DATA_IN:
|
||||
case CURLINFO_SSL_DATA_OUT:
|
||||
if(!traced_data) {
|
||||
/* if the data is output to a tty and we're sending this debug trace
|
||||
to stderr or stdout, we don't display the alert about the data not
|
||||
being shown as the data _is_ shown then just not via this
|
||||
function */
|
||||
if(!config->isatty ||
|
||||
((output != stderr) && (output != stdout))) {
|
||||
if(!newl)
|
||||
fprintf(output, "%s%s ", timebuf, s_infotype[type]);
|
||||
fprintf(output, "[data not shown]\n");
|
||||
newl = FALSE;
|
||||
traced_data = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: /* nada */
|
||||
newl = FALSE;
|
||||
traced_data = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CURL_DOES_CONVERSIONS
|
||||
/* Special processing is needed for CURLINFO_HEADER_OUT blocks
|
||||
* if they contain both headers and data (separated by CRLFCRLF).
|
||||
* We dump the header text and then switch type to CURLINFO_DATA_OUT.
|
||||
*/
|
||||
if((type == CURLINFO_HEADER_OUT) && (size > 4)) {
|
||||
size_t i;
|
||||
for(i = 0; i < size - 4; i++) {
|
||||
if(memcmp(&data[i], "\r\n\r\n", 4) == 0) {
|
||||
/* dump everything through the CRLFCRLF as a sent header */
|
||||
text = "=> Send header";
|
||||
dump(timebuf, text, output, data, i + 4, config->tracetype, type);
|
||||
data += i + 3;
|
||||
size -= i + 4;
|
||||
type = CURLINFO_DATA_OUT;
|
||||
data += 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* CURL_DOES_CONVERSIONS */
|
||||
|
||||
switch (type) {
|
||||
case CURLINFO_TEXT:
|
||||
fprintf(output, "%s== Info: %s", timebuf, data);
|
||||
default: /* in case a new one is introduced to shock us */
|
||||
return 0;
|
||||
|
||||
case CURLINFO_HEADER_OUT:
|
||||
text = "=> Send header";
|
||||
break;
|
||||
case CURLINFO_DATA_OUT:
|
||||
text = "=> Send data";
|
||||
break;
|
||||
case CURLINFO_HEADER_IN:
|
||||
text = "<= Recv header";
|
||||
break;
|
||||
case CURLINFO_DATA_IN:
|
||||
text = "<= Recv data";
|
||||
break;
|
||||
case CURLINFO_SSL_DATA_IN:
|
||||
text = "<= Recv SSL data";
|
||||
break;
|
||||
case CURLINFO_SSL_DATA_OUT:
|
||||
text = "=> Send SSL data";
|
||||
break;
|
||||
}
|
||||
|
||||
dump(timebuf, text, output, data, size, config->tracetype, type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dump(const char *timebuf, const char *text,
|
||||
FILE *stream, const unsigned char *ptr, size_t size,
|
||||
trace tracetype, curl_infotype infotype)
|
||||
{
|
||||
size_t i;
|
||||
size_t c;
|
||||
|
||||
unsigned int width = 0x10;
|
||||
|
||||
if(tracetype == TRACE_ASCII)
|
||||
/* without the hex output, we can fit more on screen */
|
||||
width = 0x40;
|
||||
|
||||
fprintf(stream, "%s%s, %zd bytes (0x%zx)\n", timebuf, text, size, size);
|
||||
|
||||
for(i = 0; i < size; i += width) {
|
||||
|
||||
fprintf(stream, "%04zx: ", i);
|
||||
|
||||
if(tracetype == TRACE_BIN) {
|
||||
/* hex not disabled, show it */
|
||||
for(c = 0; c < width; c++)
|
||||
if(i+c < size)
|
||||
fprintf(stream, "%02x ", ptr[i+c]);
|
||||
else
|
||||
fputs(" ", stream);
|
||||
}
|
||||
|
||||
for(c = 0; (c < width) && (i+c < size); c++) {
|
||||
/* check for 0D0A; if found, skip past and start a new line of output */
|
||||
if((tracetype == TRACE_ASCII) &&
|
||||
(i+c+1 < size) && (ptr[i+c] == 0x0D) && (ptr[i+c+1] == 0x0A)) {
|
||||
i += (c+2-width);
|
||||
break;
|
||||
}
|
||||
#ifdef CURL_DOES_CONVERSIONS
|
||||
/* repeat the 0D0A check above but use the host encoding for CRLF */
|
||||
if((tracetype == TRACE_ASCII) &&
|
||||
(i+c+1 < size) && (ptr[i+c] == '\r') && (ptr[i+c+1] == '\n')) {
|
||||
i += (c+2-width);
|
||||
break;
|
||||
}
|
||||
/* convert to host encoding and print this character */
|
||||
fprintf(stream, "%c", convert_char(infotype, ptr[i+c]));
|
||||
#else
|
||||
(void)infotype;
|
||||
fprintf(stream, "%c", ((ptr[i+c] >= 0x20) && (ptr[i+c] < 0x80)) ?
|
||||
ptr[i+c] : UNPRINTABLE_CHAR);
|
||||
#endif /* CURL_DOES_CONVERSIONS */
|
||||
/* check again for 0D0A, to avoid an extra \n if it's at width */
|
||||
if((tracetype == TRACE_ASCII) &&
|
||||
(i+c+2 < size) && (ptr[i+c+1] == 0x0D) && (ptr[i+c+2] == 0x0A)) {
|
||||
i += (c+3-width);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fputc('\n', stream); /* newline */
|
||||
}
|
||||
fflush(stream);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef HEADER_CURL_TOOL_CB_DBG_H
|
||||
#define HEADER_CURL_TOOL_CB_DBG_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_DEBUGFUNCTION
|
||||
*/
|
||||
|
||||
int tool_debug_cb(CURL *handle, curl_infotype type,
|
||||
unsigned char *data, size_t size,
|
||||
void *userdata);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CB_DBG_H */
|
||||
|
||||
@@ -0,0 +1,225 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <[email protected]>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "rawstr.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_msgs.h"
|
||||
#include "tool_cb_hdr.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
static char *parse_filename(const char *ptr, size_t len);
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_HEADERFUNCTION
|
||||
*/
|
||||
|
||||
size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
|
||||
{
|
||||
struct HdrCbData *hdrcbdata = userdata;
|
||||
struct OutStruct *outs = hdrcbdata->outs;
|
||||
struct OutStruct *heads = hdrcbdata->heads;
|
||||
const char *str = ptr;
|
||||
const size_t cb = size * nmemb;
|
||||
const char *end = (char*)ptr + cb;
|
||||
|
||||
/*
|
||||
* Once that libcurl has called back tool_header_cb() the returned value
|
||||
* is checked against the amount that was intended to be written, if
|
||||
* it does not match then it fails with CURLE_WRITE_ERROR. So at this
|
||||
* point returning a value different from sz*nmemb indicates failure.
|
||||
*/
|
||||
size_t failure = (size * nmemb) ? 0 : 1;
|
||||
|
||||
if(!heads->config)
|
||||
return failure;
|
||||
|
||||
#ifdef DEBUGBUILD
|
||||
if(size * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
|
||||
warnf(heads->config, "Header data exceeds single call write limit!\n");
|
||||
return failure;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Write header data when curl option --dump-header (-D) is given.
|
||||
*/
|
||||
|
||||
if(heads->config->headerfile && heads->stream) {
|
||||
size_t rc = fwrite(ptr, size, nmemb, heads->stream);
|
||||
if(rc != cb)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* This callback sets the filename where output shall be written when
|
||||
* curl options --remote-name (-O) and --remote-header-name (-J) have
|
||||
* been simultaneously given and additionally server returns an HTTP
|
||||
* Content-Disposition header specifying a filename property.
|
||||
*/
|
||||
|
||||
if(hdrcbdata->honor_cd_filename &&
|
||||
(cb > 20) && checkprefix("Content-disposition:", str)) {
|
||||
const char *p = str + 20;
|
||||
|
||||
/* look for the 'filename=' parameter
|
||||
(encoded filenames (*=) are not supported) */
|
||||
for(;;) {
|
||||
char *filename;
|
||||
size_t len;
|
||||
|
||||
while(*p && (p < end) && !ISALPHA(*p))
|
||||
p++;
|
||||
if(p > end - 9)
|
||||
break;
|
||||
|
||||
if(memcmp(p, "filename=", 9)) {
|
||||
/* no match, find next parameter */
|
||||
while((p < end) && (*p != ';'))
|
||||
p++;
|
||||
continue;
|
||||
}
|
||||
p += 9;
|
||||
|
||||
/* this expression below typecasts 'cb' only to avoid
|
||||
warning: signed and unsigned type in conditional expression
|
||||
*/
|
||||
len = (ssize_t)cb - (p - str);
|
||||
filename = parse_filename(p, len);
|
||||
if(filename) {
|
||||
outs->filename = filename;
|
||||
outs->alloc_filename = TRUE;
|
||||
outs->is_cd_filename = TRUE;
|
||||
outs->s_isreg = TRUE;
|
||||
outs->fopened = FALSE;
|
||||
outs->stream = NULL;
|
||||
hdrcbdata->honor_cd_filename = FALSE;
|
||||
break;
|
||||
}
|
||||
else
|
||||
return failure;
|
||||
}
|
||||
}
|
||||
|
||||
return cb;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copies a file name part and returns an ALLOCATED data buffer.
|
||||
*/
|
||||
static char *parse_filename(const char *ptr, size_t len)
|
||||
{
|
||||
char *copy;
|
||||
char *p;
|
||||
char *q;
|
||||
char stop = '\0';
|
||||
|
||||
/* simple implementation of strndup() */
|
||||
copy = malloc(len+1);
|
||||
if(!copy)
|
||||
return NULL;
|
||||
memcpy(copy, ptr, len);
|
||||
copy[len] = '\0';
|
||||
|
||||
p = copy;
|
||||
if(*p == '\'' || *p == '"') {
|
||||
/* store the starting quote */
|
||||
stop = *p;
|
||||
p++;
|
||||
}
|
||||
else
|
||||
stop = ';';
|
||||
|
||||
/* if the filename contains a path, only use filename portion */
|
||||
q = strrchr(copy, '/');
|
||||
if(q) {
|
||||
p = q + 1;
|
||||
if(!*p) {
|
||||
Curl_safefree(copy);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* If the filename contains a backslash, only use filename portion. The idea
|
||||
is that even systems that don't handle backslashes as path separators
|
||||
probably want the path removed for convenience. */
|
||||
q = strrchr(p, '\\');
|
||||
if(q) {
|
||||
p = q + 1;
|
||||
if(!*p) {
|
||||
Curl_safefree(copy);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* scan for the end letter and stop there */
|
||||
q = p;
|
||||
while(*q) {
|
||||
if(q[1] && (q[0] == '\\'))
|
||||
q++;
|
||||
else if(q[0] == stop)
|
||||
break;
|
||||
q++;
|
||||
}
|
||||
*q = '\0';
|
||||
|
||||
/* make sure the file name doesn't end in \r or \n */
|
||||
q = strchr(p, '\r');
|
||||
if(q)
|
||||
*q = '\0';
|
||||
|
||||
q = strchr(p, '\n');
|
||||
if(q)
|
||||
*q = '\0';
|
||||
|
||||
if(copy != p)
|
||||
memmove(copy, p, strlen(p) + 1);
|
||||
|
||||
/* in case we built debug enabled, we allow an evironment variable
|
||||
* named CURL_TESTDIR to prefix the given file name to put it into a
|
||||
* specific directory
|
||||
*/
|
||||
#ifdef DEBUGBUILD
|
||||
{
|
||||
char *tdir = curlx_getenv("CURL_TESTDIR");
|
||||
if(tdir) {
|
||||
char buffer[512]; /* suitably large */
|
||||
snprintf(buffer, sizeof(buffer), "%s/%s", tdir, copy);
|
||||
Curl_safefree(copy);
|
||||
copy = strdup(buffer); /* clone the buffer, we don't use the libcurl
|
||||
aprintf() or similar since we want to use the
|
||||
same memory code as the "real" parse_filename
|
||||
function */
|
||||
curl_free(tdir);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
#ifndef HEADER_CURL_TOOL_CB_HDR_H
|
||||
#define HEADER_CURL_TOOL_CB_HDR_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/*
|
||||
* curl operates using a single HdrCbData struct variable, a
|
||||
* pointer to this is passed as userdata pointer to tool_header_cb.
|
||||
*
|
||||
* 'outs' member is a pointer to the OutStruct variable used to keep
|
||||
* track of information relative to curl's output writing.
|
||||
*
|
||||
* 'heads' member is a pointer to the OutStruct variable used to keep
|
||||
* track of information relative to header response writing.
|
||||
*
|
||||
* 'honor_cd_filename' member is TRUE when tool_header_cb is allowed
|
||||
* to honor Content-Disposition filename property and accordingly
|
||||
* set 'outs' filename, otherwise FALSE;
|
||||
*/
|
||||
|
||||
struct HdrCbData {
|
||||
struct OutStruct *outs;
|
||||
struct OutStruct *heads;
|
||||
bool honor_cd_filename;
|
||||
};
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_HEADERFUNCTION
|
||||
*/
|
||||
|
||||
size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CB_HDR_H */
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_cb_prg.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_PROGRESSFUNCTION
|
||||
*/
|
||||
|
||||
#define MAX_BARLENGTH 256
|
||||
|
||||
int tool_progress_cb(void *clientp,
|
||||
double dltotal, double dlnow,
|
||||
double ultotal, double ulnow)
|
||||
{
|
||||
/* The original progress-bar source code was written for curl by Lars Aas,
|
||||
and this new edition inherits some of his concepts. */
|
||||
|
||||
char line[MAX_BARLENGTH+1];
|
||||
char format[40];
|
||||
double frac;
|
||||
double percent;
|
||||
int barwidth;
|
||||
int num;
|
||||
int i;
|
||||
|
||||
struct ProgressData *bar = (struct ProgressData *)clientp;
|
||||
|
||||
/* expected transfer size */
|
||||
curl_off_t total = (curl_off_t)dltotal + (curl_off_t)ultotal +
|
||||
bar->initial_size;
|
||||
|
||||
/* we've come this far */
|
||||
curl_off_t point = (curl_off_t)dlnow + (curl_off_t)ulnow +
|
||||
bar->initial_size;
|
||||
|
||||
if(point > total)
|
||||
/* we have got more than the expected total! */
|
||||
total = point;
|
||||
|
||||
/* simply count invokes */
|
||||
bar->calls++;
|
||||
|
||||
if(total < 1) {
|
||||
curl_off_t prevblock = bar->prev / 1024;
|
||||
curl_off_t thisblock = point / 1024;
|
||||
while(thisblock > prevblock) {
|
||||
fprintf(bar->out, "#");
|
||||
prevblock++;
|
||||
}
|
||||
}
|
||||
else if(point != bar->prev) {
|
||||
frac = (double)point / (double)total;
|
||||
percent = frac * 100.0f;
|
||||
barwidth = bar->width - 7;
|
||||
num = (int) (((double)barwidth) * frac);
|
||||
if(num > MAX_BARLENGTH)
|
||||
num = MAX_BARLENGTH;
|
||||
for(i = 0; i < num; i++)
|
||||
line[i] = '#';
|
||||
line[i] = '\0';
|
||||
snprintf(format, sizeof(format), "\r%%-%ds %%5.1f%%%%", barwidth);
|
||||
fprintf(bar->out, format, line, percent);
|
||||
}
|
||||
fflush(bar->out);
|
||||
bar->prev = point;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void progressbarinit(struct ProgressData *bar,
|
||||
struct Configurable *config)
|
||||
{
|
||||
#ifdef __EMX__
|
||||
/* 20000318 mgs */
|
||||
int scr_size[2];
|
||||
#endif
|
||||
char *colp;
|
||||
|
||||
memset(bar, 0, sizeof(struct ProgressData));
|
||||
|
||||
/* pass this through to progress function so
|
||||
* it can display progress towards total file
|
||||
* not just the part that's left. (21-may-03, dbyron) */
|
||||
if(config->use_resume)
|
||||
bar->initial_size = config->resume_from;
|
||||
|
||||
/* TODO: get terminal width through ansi escapes or something similar.
|
||||
try to update width when xterm is resized... - 19990617 larsa */
|
||||
#ifndef __EMX__
|
||||
/* 20000318 mgs
|
||||
* OS/2 users most likely won't have this env var set, and besides that
|
||||
* we're using our own way to determine screen width */
|
||||
colp = curlx_getenv("COLUMNS");
|
||||
if(colp) {
|
||||
char *endptr;
|
||||
long num = strtol(colp, &endptr, 10);
|
||||
if((endptr != colp) && (endptr == colp + strlen(colp)) && (num > 0))
|
||||
bar->width = (int)num;
|
||||
else
|
||||
bar->width = 79;
|
||||
curl_free(colp);
|
||||
}
|
||||
else
|
||||
bar->width = 79;
|
||||
#else
|
||||
/* 20000318 mgs
|
||||
* We use this emx library call to get the screen width, and subtract
|
||||
* one from what we got in order to avoid a problem with the cursor
|
||||
* advancing to the next line if we print a string that is as long as
|
||||
* the screen is wide. */
|
||||
|
||||
_scrsize(scr_size);
|
||||
bar->width = scr_size[0] - 1;
|
||||
#endif
|
||||
|
||||
bar->out = config->errors;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#ifndef HEADER_CURL_TOOL_CB_PRG_H
|
||||
#define HEADER_CURL_TOOL_CB_PRG_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define CURL_PROGRESS_STATS 0 /* default progress display */
|
||||
#define CURL_PROGRESS_BAR 1
|
||||
|
||||
struct ProgressData {
|
||||
int calls;
|
||||
curl_off_t prev;
|
||||
int width;
|
||||
FILE *out; /* where to write everything to */
|
||||
curl_off_t initial_size;
|
||||
};
|
||||
|
||||
void progressbarinit(struct ProgressData *bar,
|
||||
struct Configurable *config);
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_PROGRESSFUNCTION
|
||||
*/
|
||||
|
||||
int tool_progress_cb(void *clientp,
|
||||
double dltotal, double dlnow,
|
||||
double ultotal, double ulnow);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CB_PRG_H */
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_cb_rea.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_READFUNCTION
|
||||
*/
|
||||
|
||||
size_t tool_read_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
|
||||
{
|
||||
ssize_t rc;
|
||||
struct InStruct *in = userdata;
|
||||
|
||||
rc = read(in->fd, buffer, sz*nmemb);
|
||||
if(rc < 0) {
|
||||
if(errno == EAGAIN) {
|
||||
errno = 0;
|
||||
in->config->readbusy = TRUE;
|
||||
return CURL_READFUNC_PAUSE;
|
||||
}
|
||||
/* since size_t is unsigned we can't return negative values fine */
|
||||
rc = 0;
|
||||
}
|
||||
in->config->readbusy = FALSE;
|
||||
return (size_t)rc;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#ifndef HEADER_CURL_TOOL_CB_REA_H
|
||||
#define HEADER_CURL_TOOL_CB_REA_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_READFUNCTION
|
||||
*/
|
||||
|
||||
size_t tool_read_cb(void *buffer, size_t sz, size_t nmemb, void *userdata);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CB_REA_H */
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_cb_see.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/* OUR_MAX_SEEK_L has 'long' data type, OUR_MAX_SEEK_O has 'curl_off_t,
|
||||
both represent the same value. Maximum offset used here when we lseek
|
||||
using a 'long' data type offset */
|
||||
|
||||
#define OUR_MAX_SEEK_L 2147483647L - 1L
|
||||
#define OUR_MAX_SEEK_O CURL_OFF_T_C(0x7FFFFFFF) - CURL_OFF_T_C(0x1)
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_SEEKFUNCTION
|
||||
**
|
||||
** Notice that this is not supposed to return the resulting offset. This
|
||||
** shall only return CURL_SEEKFUNC_* return codes.
|
||||
*/
|
||||
|
||||
int tool_seek_cb(void *userdata, curl_off_t offset, int whence)
|
||||
{
|
||||
struct InStruct *in = userdata;
|
||||
|
||||
#if(CURL_SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(USE_WIN32_LARGE_FILES)
|
||||
|
||||
/* The offset check following here is only interesting if curl_off_t is
|
||||
larger than off_t and we are not using the WIN32 large file support
|
||||
macros that provide the support to do 64bit seeks correctly */
|
||||
|
||||
if(offset > OUR_MAX_SEEK_O) {
|
||||
/* Some precaution code to work around problems with different data sizes
|
||||
to allow seeking >32bit even if off_t is 32bit. Should be very rare and
|
||||
is really valid on weirdo-systems. */
|
||||
curl_off_t left = offset;
|
||||
|
||||
if(whence != SEEK_SET)
|
||||
/* this code path doesn't support other types */
|
||||
return CURL_SEEKFUNC_FAIL;
|
||||
|
||||
if(LSEEK_ERROR == lseek(in->fd, 0, SEEK_SET))
|
||||
/* couldn't rewind to beginning */
|
||||
return CURL_SEEKFUNC_FAIL;
|
||||
|
||||
while(left) {
|
||||
long step = (left > OUR_MAX_SEEK_O) ? OUR_MAX_SEEK_L : (long)left;
|
||||
if(LSEEK_ERROR == lseek(in->fd, step, SEEK_CUR))
|
||||
/* couldn't seek forwards the desired amount */
|
||||
return CURL_SEEKFUNC_FAIL;
|
||||
left -= step;
|
||||
}
|
||||
return CURL_SEEKFUNC_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
if(LSEEK_ERROR == lseek(in->fd, offset, whence))
|
||||
/* couldn't rewind, the reason is in errno but errno is just not portable
|
||||
enough and we don't actually care that much why we failed. We'll let
|
||||
libcurl know that it may try other means if it wants to. */
|
||||
return CURL_SEEKFUNC_CANTSEEK;
|
||||
|
||||
return CURL_SEEKFUNC_OK;
|
||||
}
|
||||
|
||||
#if defined(WIN32) && !defined(__MINGW64__)
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
/* 64-bit lseek-like function unavailable */
|
||||
# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence)
|
||||
#endif
|
||||
|
||||
#ifdef __POCC__
|
||||
# if(__POCC__ < 450)
|
||||
/* 64-bit lseek-like function unavailable */
|
||||
# define _lseeki64(hnd,ofs,whence) _lseek(hnd,ofs,whence)
|
||||
# else
|
||||
# define _lseeki64(hnd,ofs,whence) _lseek64(hnd,ofs,whence)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
/* 64-bit lseek-like function unavailable */
|
||||
# undef _lseeki64
|
||||
# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence)
|
||||
# undef _get_osfhandle
|
||||
# define _get_osfhandle(fd) (fd)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Truncate a file handle at a 64-bit position 'where'.
|
||||
*/
|
||||
|
||||
int tool_ftruncate64(int fd, curl_off_t where)
|
||||
{
|
||||
if(_lseeki64(fd, where, SEEK_SET) < 0)
|
||||
return -1;
|
||||
|
||||
if(!SetEndOfFile((HANDLE)_get_osfhandle(fd)))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* WIN32 && ! __MINGW64__ */
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
#ifndef HEADER_CURL_TOOL_CB_SEE_H
|
||||
#define HEADER_CURL_TOOL_CB_SEE_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#if defined(WIN32) && !defined(__MINGW64__)
|
||||
|
||||
int tool_ftruncate64(int fd, curl_off_t where);
|
||||
|
||||
#undef ftruncate
|
||||
#define ftruncate(fd,where) tool_ftruncate64(fd,where)
|
||||
|
||||
#ifndef HAVE_FTRUNCATE
|
||||
# define HAVE_FTRUNCATE 1
|
||||
#endif
|
||||
|
||||
#endif /* WIN32 && ! __MINGW64__ */
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_SEEKFUNCTION
|
||||
*/
|
||||
|
||||
int tool_seek_cb(void *userdata, curl_off_t offset, int whence);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CB_SEE_H */
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_msgs.h"
|
||||
#include "tool_cb_wrt.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_WRITEFUNCTION
|
||||
*/
|
||||
|
||||
size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
|
||||
{
|
||||
size_t rc;
|
||||
struct OutStruct *outs = userdata;
|
||||
struct Configurable *config = outs->config;
|
||||
|
||||
/*
|
||||
* Once that libcurl has called back tool_write_cb() the returned value
|
||||
* is checked against the amount that was intended to be written, if
|
||||
* it does not match then it fails with CURLE_WRITE_ERROR. So at this
|
||||
* point returning a value different from sz*nmemb indicates failure.
|
||||
*/
|
||||
const size_t failure = (sz * nmemb) ? 0 : 1;
|
||||
|
||||
if(!config)
|
||||
return failure;
|
||||
|
||||
#ifdef DEBUGBUILD
|
||||
if(config->include_headers) {
|
||||
if(sz * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
|
||||
warnf(config, "Header data size exceeds single call write limit!\n");
|
||||
return failure;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(sz * nmemb > (size_t)CURL_MAX_WRITE_SIZE) {
|
||||
warnf(config, "Data size exceeds single call write limit!\n");
|
||||
return failure;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
/* Some internal congruency checks on received OutStruct */
|
||||
bool check_fails = FALSE;
|
||||
if(outs->filename) {
|
||||
/* regular file */
|
||||
if(!*outs->filename)
|
||||
check_fails = TRUE;
|
||||
if(!outs->s_isreg)
|
||||
check_fails = TRUE;
|
||||
if(outs->fopened && !outs->stream)
|
||||
check_fails = TRUE;
|
||||
if(!outs->fopened && outs->stream)
|
||||
check_fails = TRUE;
|
||||
if(!outs->fopened && outs->bytes)
|
||||
check_fails = TRUE;
|
||||
}
|
||||
else {
|
||||
/* standard stream */
|
||||
if(!outs->stream || outs->s_isreg || outs->fopened)
|
||||
check_fails = TRUE;
|
||||
if(outs->alloc_filename || outs->is_cd_filename || outs->init)
|
||||
check_fails = TRUE;
|
||||
}
|
||||
if(check_fails) {
|
||||
warnf(config, "Invalid output struct data for write callback\n");
|
||||
return failure;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if(!outs->stream) {
|
||||
FILE *file;
|
||||
|
||||
if(!outs->filename || !*outs->filename) {
|
||||
warnf(config, "Remote filename has no length!\n");
|
||||
return failure;
|
||||
}
|
||||
|
||||
if(outs->is_cd_filename) {
|
||||
/* don't overwrite existing files */
|
||||
file = fopen(outs->filename, "rb");
|
||||
if(file) {
|
||||
fclose(file);
|
||||
warnf(config, "Refusing to overwrite %s: %s\n", outs->filename,
|
||||
strerror(EEXIST));
|
||||
return failure;
|
||||
}
|
||||
}
|
||||
|
||||
/* open file for writing */
|
||||
file = fopen(outs->filename, "wb");
|
||||
if(!file) {
|
||||
warnf(config, "Failed to create the file %s: %s\n", outs->filename,
|
||||
strerror(errno));
|
||||
return failure;
|
||||
}
|
||||
outs->s_isreg = TRUE;
|
||||
outs->fopened = TRUE;
|
||||
outs->stream = file;
|
||||
outs->bytes = 0;
|
||||
outs->init = 0;
|
||||
}
|
||||
|
||||
rc = fwrite(buffer, sz, nmemb, outs->stream);
|
||||
|
||||
if((sz * nmemb) == rc)
|
||||
/* we added this amount of data to the output */
|
||||
outs->bytes += (sz * nmemb);
|
||||
|
||||
if(config->readbusy) {
|
||||
config->readbusy = FALSE;
|
||||
curl_easy_pause(config->easy, CURLPAUSE_CONT);
|
||||
}
|
||||
|
||||
if(config->nobuffer) {
|
||||
/* output buffering disabled */
|
||||
int res = fflush(outs->stream);
|
||||
if(res)
|
||||
return failure;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#ifndef HEADER_CURL_TOOL_CB_WRT_H
|
||||
#define HEADER_CURL_TOOL_CB_WRT_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/*
|
||||
** callback for CURLOPT_WRITEFUNCTION
|
||||
*/
|
||||
|
||||
size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CB_WRT_H */
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
void free_config_fields(struct Configurable *config)
|
||||
{
|
||||
struct getout *urlnode;
|
||||
|
||||
if(config->easy) {
|
||||
curl_easy_cleanup(config->easy);
|
||||
config->easy = NULL;
|
||||
}
|
||||
|
||||
Curl_safefree(config->random_file);
|
||||
Curl_safefree(config->egd_file);
|
||||
Curl_safefree(config->useragent);
|
||||
Curl_safefree(config->cookie);
|
||||
Curl_safefree(config->cookiejar);
|
||||
Curl_safefree(config->cookiefile);
|
||||
|
||||
Curl_safefree(config->postfields);
|
||||
Curl_safefree(config->referer);
|
||||
|
||||
Curl_safefree(config->headerfile);
|
||||
Curl_safefree(config->ftpport);
|
||||
Curl_safefree(config->iface);
|
||||
|
||||
Curl_safefree(config->range);
|
||||
|
||||
Curl_safefree(config->userpwd);
|
||||
Curl_safefree(config->tls_username);
|
||||
Curl_safefree(config->tls_password);
|
||||
Curl_safefree(config->tls_authtype);
|
||||
Curl_safefree(config->proxyuserpwd);
|
||||
Curl_safefree(config->proxy);
|
||||
|
||||
Curl_safefree(config->noproxy);
|
||||
|
||||
Curl_safefree(config->mail_from);
|
||||
curl_slist_free_all(config->mail_rcpt);
|
||||
Curl_safefree(config->mail_auth);
|
||||
|
||||
Curl_safefree(config->netrc_file);
|
||||
|
||||
urlnode = config->url_list;
|
||||
while(urlnode) {
|
||||
struct getout *next = urlnode->next;
|
||||
Curl_safefree(urlnode->url);
|
||||
Curl_safefree(urlnode->outfile);
|
||||
Curl_safefree(urlnode->infile);
|
||||
Curl_safefree(urlnode);
|
||||
urlnode = next;
|
||||
}
|
||||
config->url_list = NULL;
|
||||
config->url_last = NULL;
|
||||
config->url_get = NULL;
|
||||
config->url_out = NULL;
|
||||
|
||||
Curl_safefree(config->cipher_list);
|
||||
Curl_safefree(config->cert);
|
||||
Curl_safefree(config->cert_type);
|
||||
Curl_safefree(config->cacert);
|
||||
Curl_safefree(config->capath);
|
||||
Curl_safefree(config->crlfile);
|
||||
Curl_safefree(config->key);
|
||||
Curl_safefree(config->key_type);
|
||||
Curl_safefree(config->key_passwd);
|
||||
Curl_safefree(config->pubkey);
|
||||
Curl_safefree(config->hostpubmd5);
|
||||
Curl_safefree(config->engine);
|
||||
|
||||
Curl_safefree(config->customrequest);
|
||||
Curl_safefree(config->krblevel);
|
||||
Curl_safefree(config->trace_dump);
|
||||
|
||||
config->trace_stream = NULL; /* closed elsewhere when appropriate */
|
||||
|
||||
Curl_safefree(config->writeout);
|
||||
|
||||
config->errors = NULL; /* closed elsewhere when appropriate */
|
||||
|
||||
curl_slist_free_all(config->quote);
|
||||
curl_slist_free_all(config->postquote);
|
||||
curl_slist_free_all(config->prequote);
|
||||
|
||||
curl_slist_free_all(config->headers);
|
||||
|
||||
if(config->httppost) {
|
||||
curl_formfree(config->httppost);
|
||||
config->httppost = NULL;
|
||||
}
|
||||
config->last_post = NULL;
|
||||
|
||||
curl_slist_free_all(config->telnet_options);
|
||||
curl_slist_free_all(config->resolve);
|
||||
|
||||
Curl_safefree(config->socksproxy);
|
||||
Curl_safefree(config->socks5_gssapi_service);
|
||||
|
||||
Curl_safefree(config->ftp_account);
|
||||
Curl_safefree(config->ftp_alternative_to_user);
|
||||
|
||||
Curl_safefree(config->libcurl);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,212 @@
|
||||
#ifndef HEADER_CURL_TOOL_CFGABLE_H
|
||||
#define HEADER_CURL_TOOL_CFGABLE_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "tool_sdecls.h"
|
||||
|
||||
#include "tool_metalink.h"
|
||||
|
||||
struct Configurable {
|
||||
CURL *easy; /* once we have one, we keep it here */
|
||||
bool remote_time;
|
||||
char *random_file;
|
||||
char *egd_file;
|
||||
char *useragent;
|
||||
char *cookie; /* single line with specified cookies */
|
||||
char *cookiejar; /* write to this file */
|
||||
char *cookiefile; /* read from this file */
|
||||
bool cookiesession; /* new session? */
|
||||
bool encoding; /* Accept-Encoding please */
|
||||
bool tr_encoding; /* Transfer-Encoding please */
|
||||
unsigned long authtype; /* auth bitmask */
|
||||
bool use_resume;
|
||||
bool resume_from_current;
|
||||
bool disable_epsv;
|
||||
bool disable_eprt;
|
||||
bool ftp_pret;
|
||||
long proto;
|
||||
bool proto_present;
|
||||
long proto_redir;
|
||||
bool proto_redir_present;
|
||||
curl_off_t resume_from;
|
||||
char *postfields;
|
||||
curl_off_t postfieldsize;
|
||||
char *referer;
|
||||
long timeout;
|
||||
long connecttimeout;
|
||||
long maxredirs;
|
||||
curl_off_t max_filesize;
|
||||
char *headerfile;
|
||||
char *ftpport;
|
||||
char *iface;
|
||||
int localport;
|
||||
int localportrange;
|
||||
unsigned short porttouse;
|
||||
char *range;
|
||||
long low_speed_limit;
|
||||
long low_speed_time;
|
||||
int showerror; /* -1 == unset, default => show errors
|
||||
0 => -s is used to NOT show errors
|
||||
1 => -S has been used to show errors */
|
||||
char *userpwd;
|
||||
char *tls_username;
|
||||
char *tls_password;
|
||||
char *tls_authtype;
|
||||
char *proxyuserpwd;
|
||||
char *proxy;
|
||||
int proxyver; /* set to CURLPROXY_HTTP* define */
|
||||
char *noproxy;
|
||||
char *mail_from;
|
||||
struct curl_slist *mail_rcpt;
|
||||
char *mail_auth;
|
||||
bool proxytunnel;
|
||||
bool ftp_append; /* APPE on ftp */
|
||||
bool mute; /* don't show messages, --silent given */
|
||||
bool use_ascii; /* select ascii or text transfer */
|
||||
bool autoreferer; /* automatically set referer */
|
||||
bool failonerror; /* fail on (HTTP) errors */
|
||||
bool include_headers; /* send headers to data output */
|
||||
bool no_body; /* don't get the body */
|
||||
bool dirlistonly; /* only get the FTP dir list */
|
||||
bool followlocation; /* follow http redirects */
|
||||
bool unrestricted_auth; /* Continue to send authentication (user+password)
|
||||
when following ocations, even when hostname
|
||||
changed */
|
||||
bool netrc_opt;
|
||||
bool netrc;
|
||||
char *netrc_file;
|
||||
bool noprogress; /* don't show progress meter, --silent given */
|
||||
bool isatty; /* updated internally only if output is a tty */
|
||||
struct getout *url_list; /* point to the first node */
|
||||
struct getout *url_last; /* point to the last/current node */
|
||||
struct getout *url_get; /* point to the node to fill in URL */
|
||||
struct getout *url_out; /* point to the node to fill in outfile */
|
||||
char *cipher_list;
|
||||
char *cert;
|
||||
char *cert_type;
|
||||
char *cacert;
|
||||
char *capath;
|
||||
char *crlfile;
|
||||
char *key;
|
||||
char *key_type;
|
||||
char *key_passwd;
|
||||
char *pubkey;
|
||||
char *hostpubmd5;
|
||||
char *engine;
|
||||
bool list_engines;
|
||||
bool crlf;
|
||||
char *customrequest;
|
||||
char *krblevel;
|
||||
char *trace_dump; /* file to dump the network trace to, or NULL */
|
||||
FILE *trace_stream;
|
||||
bool trace_fopened;
|
||||
trace tracetype;
|
||||
bool tracetime; /* include timestamp? */
|
||||
long httpversion;
|
||||
int progressmode; /* CURL_PROGRESS_BAR or CURL_PROGRESS_STATS */
|
||||
bool nobuffer;
|
||||
bool readbusy; /* set when reading input returns EAGAIN */
|
||||
bool globoff;
|
||||
bool use_httpget;
|
||||
bool insecure_ok; /* set TRUE to allow insecure SSL connects */
|
||||
bool create_dirs;
|
||||
bool ftp_create_dirs;
|
||||
bool ftp_skip_ip;
|
||||
bool proxynegotiate;
|
||||
bool proxyntlm;
|
||||
bool proxydigest;
|
||||
bool proxybasic;
|
||||
bool proxyanyauth;
|
||||
char *writeout; /* %-styled format string to output */
|
||||
bool writeenv; /* write results to environment, if available */
|
||||
FILE *errors; /* errors stream, defaults to stderr */
|
||||
bool errors_fopened; /* whether errors stream isn't stderr */
|
||||
struct curl_slist *quote;
|
||||
struct curl_slist *postquote;
|
||||
struct curl_slist *prequote;
|
||||
long ssl_version;
|
||||
long ip_version;
|
||||
curl_TimeCond timecond;
|
||||
time_t condtime;
|
||||
struct curl_slist *headers;
|
||||
struct curl_httppost *httppost;
|
||||
struct curl_httppost *last_post;
|
||||
struct curl_slist *telnet_options;
|
||||
struct curl_slist *resolve;
|
||||
HttpReq httpreq;
|
||||
|
||||
/* for bandwidth limiting features: */
|
||||
curl_off_t sendpersecond; /* send to peer */
|
||||
curl_off_t recvpersecond; /* receive from peer */
|
||||
|
||||
bool ftp_ssl;
|
||||
bool ftp_ssl_reqd;
|
||||
bool ftp_ssl_control;
|
||||
bool ftp_ssl_ccc;
|
||||
int ftp_ssl_ccc_mode;
|
||||
|
||||
char *socksproxy; /* set to server string */
|
||||
int socksver; /* set to CURLPROXY_SOCKS* define */
|
||||
char *socks5_gssapi_service; /* set service name for gssapi principal
|
||||
* default rcmd */
|
||||
int socks5_gssapi_nec ; /* The NEC reference server does not protect
|
||||
* the encryption type exchange */
|
||||
|
||||
bool tcp_nodelay;
|
||||
long req_retry; /* number of retries */
|
||||
long retry_delay; /* delay between retries (in seconds) */
|
||||
long retry_maxtime; /* maximum time to keep retrying */
|
||||
|
||||
char *ftp_account; /* for ACCT */
|
||||
char *ftp_alternative_to_user; /* send command if USER/PASS fails */
|
||||
int ftp_filemethod;
|
||||
long tftp_blksize; /* TFTP BLKSIZE option */
|
||||
bool ignorecl; /* --ignore-content-length */
|
||||
bool disable_sessionid;
|
||||
|
||||
char *libcurl; /* output libcurl code to this file name */
|
||||
bool raw;
|
||||
bool post301;
|
||||
bool post302;
|
||||
bool post303;
|
||||
bool nokeepalive; /* for keepalive needs */
|
||||
long alivetime;
|
||||
bool content_disposition; /* use Content-disposition filename */
|
||||
|
||||
int default_node_flags; /* default flags to search for each 'node', which
|
||||
is basically each given URL to transfer */
|
||||
|
||||
bool xattr; /* store metadata in extended attributes */
|
||||
long gssapi_delegation;
|
||||
bool ssl_allow_beast; /* allow this SSL vulnerability */
|
||||
|
||||
bool use_metalink; /* process given URLs as metalink XML file */
|
||||
metalinkfile *metalinkfile_list; /* point to the first node */
|
||||
metalinkfile *metalinkfile_last; /* point to the last/current node */
|
||||
}; /* struct Configurable */
|
||||
|
||||
void free_config_fields(struct Configurable *config);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CFGABLE_H */
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef CURL_DOES_CONVERSIONS
|
||||
|
||||
#ifdef HAVE_ICONV
|
||||
# include <iconv.h>
|
||||
#endif
|
||||
|
||||
#include "tool_convert.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#ifdef HAVE_ICONV
|
||||
|
||||
/* curl tool iconv conversion descriptors */
|
||||
static iconv_t inbound_cd = (iconv_t)-1;
|
||||
static iconv_t outbound_cd = (iconv_t)-1;
|
||||
|
||||
/* set default codesets for iconv */
|
||||
#ifndef CURL_ICONV_CODESET_OF_NETWORK
|
||||
# define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* convert_to_network() is a curl tool function to convert
|
||||
* from the host encoding to ASCII on non-ASCII platforms.
|
||||
*/
|
||||
CURLcode convert_to_network(char *buffer, size_t length)
|
||||
{
|
||||
/* translate from the host encoding to the network encoding */
|
||||
char *input_ptr, *output_ptr;
|
||||
size_t res, in_bytes, out_bytes;
|
||||
|
||||
/* open an iconv conversion descriptor if necessary */
|
||||
if(outbound_cd == (iconv_t)-1) {
|
||||
outbound_cd = iconv_open(CURL_ICONV_CODESET_OF_NETWORK,
|
||||
CURL_ICONV_CODESET_OF_HOST);
|
||||
if(outbound_cd == (iconv_t)-1) {
|
||||
return CURLE_CONV_FAILED;
|
||||
}
|
||||
}
|
||||
/* call iconv */
|
||||
input_ptr = output_ptr = buffer;
|
||||
in_bytes = out_bytes = length;
|
||||
res = iconv(outbound_cd, &input_ptr, &in_bytes,
|
||||
&output_ptr, &out_bytes);
|
||||
if((res == (size_t)-1) || (in_bytes != 0)) {
|
||||
return CURLE_CONV_FAILED;
|
||||
}
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* convert_from_network() is a curl tool function
|
||||
* for performing ASCII conversions on non-ASCII platforms.
|
||||
*/
|
||||
CURLcode convert_from_network(char *buffer, size_t length)
|
||||
{
|
||||
/* translate from the network encoding to the host encoding */
|
||||
char *input_ptr, *output_ptr;
|
||||
size_t res, in_bytes, out_bytes;
|
||||
|
||||
/* open an iconv conversion descriptor if necessary */
|
||||
if(inbound_cd == (iconv_t)-1) {
|
||||
inbound_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
|
||||
CURL_ICONV_CODESET_OF_NETWORK);
|
||||
if(inbound_cd == (iconv_t)-1) {
|
||||
return CURLE_CONV_FAILED;
|
||||
}
|
||||
}
|
||||
/* call iconv */
|
||||
input_ptr = output_ptr = buffer;
|
||||
in_bytes = out_bytes = length;
|
||||
res = iconv(inbound_cd, &input_ptr, &in_bytes,
|
||||
&output_ptr, &out_bytes);
|
||||
if((res == (size_t)-1) || (in_bytes != 0)) {
|
||||
return CURLE_CONV_FAILED;
|
||||
}
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
void convert_cleanup(void)
|
||||
{
|
||||
/* close iconv conversion descriptors */
|
||||
if(inbound_cd != (iconv_t)-1)
|
||||
(void)iconv_close(inbound_cd);
|
||||
if(outbound_cd != (iconv_t)-1)
|
||||
(void)iconv_close(outbound_cd);
|
||||
}
|
||||
|
||||
#endif /* HAVE_ICONV */
|
||||
|
||||
char convert_char(curl_infotype infotype, char this_char)
|
||||
{
|
||||
/* determine how this specific character should be displayed */
|
||||
switch(infotype) {
|
||||
case CURLINFO_DATA_IN:
|
||||
case CURLINFO_DATA_OUT:
|
||||
case CURLINFO_SSL_DATA_IN:
|
||||
case CURLINFO_SSL_DATA_OUT:
|
||||
/* data, treat as ASCII */
|
||||
if((this_char >= 0x20) && (this_char < 0x7f)) {
|
||||
/* printable ASCII hex value: convert to host encoding */
|
||||
(void)convert_from_network(&this_char, 1);
|
||||
}
|
||||
else {
|
||||
/* non-printable ASCII, use a replacement character */
|
||||
return UNPRINTABLE_CHAR;
|
||||
}
|
||||
/* fall through to default */
|
||||
default:
|
||||
/* treat as host encoding */
|
||||
if(ISPRINT(this_char)
|
||||
&& (this_char != '\t')
|
||||
&& (this_char != '\r')
|
||||
&& (this_char != '\n')) {
|
||||
/* printable characters excluding tabs and line end characters */
|
||||
return this_char;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* non-printable, use a replacement character */
|
||||
return UNPRINTABLE_CHAR;
|
||||
}
|
||||
|
||||
#endif /* CURL_DOES_CONVERSIONS */
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#ifndef HEADER_CURL_TOOL_CONVERT_H
|
||||
#define HEADER_CURL_TOOL_CONVERT_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef CURL_DOES_CONVERSIONS
|
||||
|
||||
#ifdef HAVE_ICONV
|
||||
|
||||
CURLcode convert_to_network(char *buffer, size_t length);
|
||||
CURLcode convert_from_network(char *buffer, size_t length);
|
||||
void convert_cleanup(void);
|
||||
|
||||
#endif /* HAVE_ICONV */
|
||||
|
||||
char convert_char(curl_infotype infotype, char this_char);
|
||||
|
||||
#endif /* CURL_DOES_CONVERSIONS */
|
||||
|
||||
#if !defined(CURL_DOES_CONVERSIONS) || !defined(HAVE_ICONV)
|
||||
#define convert_cleanup() Curl_nop_stmt
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_CONVERT_H */
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef WIN32
|
||||
# include <direct.h>
|
||||
#endif
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_dirhie.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#ifdef NETWARE
|
||||
# ifndef __NOVELL_LIBC__
|
||||
# define mkdir mkdir_510
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
# define mkdir(x,y) (mkdir)((x))
|
||||
# ifndef __POCC__
|
||||
# define F_OK 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
static void show_dir_errno(FILE *errors, const char *name)
|
||||
{
|
||||
switch(ERRNO) {
|
||||
#ifdef EACCES
|
||||
case EACCES:
|
||||
fprintf(errors, "You don't have permission to create %s.\n", name);
|
||||
break;
|
||||
#endif
|
||||
#ifdef ENAMETOOLONG
|
||||
case ENAMETOOLONG:
|
||||
fprintf(errors, "The directory name %s is too long.\n", name);
|
||||
break;
|
||||
#endif
|
||||
#ifdef EROFS
|
||||
case EROFS:
|
||||
fprintf(errors, "%s resides on a read-only file system.\n", name);
|
||||
break;
|
||||
#endif
|
||||
#ifdef ENOSPC
|
||||
case ENOSPC:
|
||||
fprintf(errors, "No space left on the file system that will "
|
||||
"contain the directory %s.\n", name);
|
||||
break;
|
||||
#endif
|
||||
#ifdef EDQUOT
|
||||
case EDQUOT:
|
||||
fprintf(errors, "Cannot create directory %s because you "
|
||||
"exceeded your quota.\n", name);
|
||||
break;
|
||||
#endif
|
||||
default :
|
||||
fprintf(errors, "Error creating directory %s.\n", name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the needed directory hierarchy recursively in order to save
|
||||
* multi-GETs in file output, ie:
|
||||
* curl "http://my.site/dir[1-5]/file[1-5].txt" -o "dir#1/file#2.txt"
|
||||
* should create all the dir* automagically
|
||||
*/
|
||||
|
||||
CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
|
||||
{
|
||||
char *tempdir;
|
||||
char *tempdir2;
|
||||
char *outdup;
|
||||
char *dirbuildup;
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
outdup = strdup(outfile);
|
||||
if(!outdup)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
dirbuildup = malloc(strlen(outfile) + 1);
|
||||
if(!dirbuildup) {
|
||||
Curl_safefree(outdup);
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
dirbuildup[0] = '\0';
|
||||
|
||||
tempdir = strtok(outdup, DIR_CHAR);
|
||||
|
||||
while(tempdir != NULL) {
|
||||
tempdir2 = strtok(NULL, DIR_CHAR);
|
||||
/* since strtok returns a token for the last word even
|
||||
if not ending with DIR_CHAR, we need to prune it */
|
||||
if(tempdir2 != NULL) {
|
||||
size_t dlen = strlen(dirbuildup);
|
||||
if(dlen)
|
||||
sprintf(&dirbuildup[dlen], "%s%s", DIR_CHAR, tempdir);
|
||||
else {
|
||||
if(0 != strncmp(outdup, DIR_CHAR, 1))
|
||||
strcpy(dirbuildup, tempdir);
|
||||
else
|
||||
sprintf(dirbuildup, "%s%s", DIR_CHAR, tempdir);
|
||||
}
|
||||
if(access(dirbuildup, F_OK) == -1) {
|
||||
if(-1 == mkdir(dirbuildup,(mode_t)0000750)) {
|
||||
show_dir_errno(errors, dirbuildup);
|
||||
result = CURLE_WRITE_ERROR;
|
||||
break; /* get out of loop */
|
||||
}
|
||||
}
|
||||
}
|
||||
tempdir = tempdir2;
|
||||
}
|
||||
|
||||
Curl_safefree(dirbuildup);
|
||||
Curl_safefree(outdup);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef HEADER_CURL_TOOL_DIRHIE_H
|
||||
#define HEADER_CURL_TOOL_DIRHIE_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
CURLcode create_dir_hierarchy(const char *outfile, FILE *errors);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_DIRHIE_H */
|
||||
|
||||
@@ -0,0 +1,299 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#if defined(MSDOS) || defined(WIN32)
|
||||
|
||||
#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
|
||||
# include <libgen.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
# include "tool_cfgable.h"
|
||||
# include "tool_libinfo.h"
|
||||
#endif
|
||||
|
||||
#include "tool_bname.h"
|
||||
#include "tool_doswin.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/*
|
||||
* Macros ALWAYS_TRUE and ALWAYS_FALSE are used to avoid compiler warnings.
|
||||
*/
|
||||
|
||||
#define ALWAYS_TRUE (1)
|
||||
#define ALWAYS_FALSE (0)
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__POCC__)
|
||||
# undef ALWAYS_TRUE
|
||||
# undef ALWAYS_FALSE
|
||||
# if (_MSC_VER < 1500)
|
||||
# define ALWAYS_TRUE (0, 1)
|
||||
# define ALWAYS_FALSE (1, 0)
|
||||
# else
|
||||
# define ALWAYS_TRUE \
|
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable:4127)) \
|
||||
(1) \
|
||||
__pragma(warning(pop))
|
||||
# define ALWAYS_FALSE \
|
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable:4127)) \
|
||||
(0) \
|
||||
__pragma(warning(pop))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
# undef PATH_MAX
|
||||
# define PATH_MAX MAX_PATH
|
||||
#endif
|
||||
|
||||
#ifndef S_ISCHR
|
||||
# ifdef S_IFCHR
|
||||
# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
||||
# else
|
||||
# define S_ISCHR(m) (0) /* cannot tell if file is a device */
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
# define _use_lfn(f) ALWAYS_TRUE /* long file names always available */
|
||||
#elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */
|
||||
# define _use_lfn(f) ALWAYS_FALSE /* long file names never available */
|
||||
#elif defined(__DJGPP__)
|
||||
# include <fcntl.h> /* _use_lfn(f) prototype */
|
||||
#endif
|
||||
|
||||
static const char *msdosify (const char *file_name);
|
||||
static char *rename_if_dos_device_name (char *file_name);
|
||||
|
||||
/*
|
||||
* sanitize_dos_name: returns a newly allocated string holding a
|
||||
* valid file name which will be a transformation of given argument
|
||||
* in case this wasn't already a valid file name.
|
||||
*
|
||||
* This function takes ownership of given argument, free'ing it before
|
||||
* returning. Caller is responsible of free'ing returned string. Upon
|
||||
* out of memory condition function returns NULL.
|
||||
*/
|
||||
|
||||
char *sanitize_dos_name(char *file_name)
|
||||
{
|
||||
char new_name[PATH_MAX];
|
||||
|
||||
if(!file_name)
|
||||
return NULL;
|
||||
|
||||
if(strlen(file_name) >= PATH_MAX)
|
||||
file_name[PATH_MAX-1] = '\0'; /* truncate it */
|
||||
|
||||
strcpy(new_name, msdosify(file_name));
|
||||
|
||||
Curl_safefree(file_name);
|
||||
|
||||
return strdup(rename_if_dos_device_name(new_name));
|
||||
}
|
||||
|
||||
/* The following functions are taken with modification from the DJGPP
|
||||
* port of tar 1.12. They use algorithms originally from DJTAR. */
|
||||
|
||||
static const char *msdosify (const char *file_name)
|
||||
{
|
||||
static char dos_name[PATH_MAX];
|
||||
static const char illegal_chars_dos[] = ".+, ;=[]" /* illegal in DOS */
|
||||
"|<>\\\":?*"; /* illegal in DOS & W95 */
|
||||
static const char *illegal_chars_w95 = &illegal_chars_dos[8];
|
||||
int idx, dot_idx;
|
||||
const char *s = file_name;
|
||||
char *d = dos_name;
|
||||
const char *const dlimit = dos_name + sizeof(dos_name) - 1;
|
||||
const char *illegal_aliens = illegal_chars_dos;
|
||||
size_t len = sizeof(illegal_chars_dos) - 1;
|
||||
|
||||
/* Support for Windows 9X VFAT systems, when available. */
|
||||
if(_use_lfn(file_name)) {
|
||||
illegal_aliens = illegal_chars_w95;
|
||||
len -= (illegal_chars_w95 - illegal_chars_dos);
|
||||
}
|
||||
|
||||
/* Get past the drive letter, if any. */
|
||||
if(s[0] >= 'A' && s[0] <= 'z' && s[1] == ':') {
|
||||
*d++ = *s++;
|
||||
*d++ = *s++;
|
||||
}
|
||||
|
||||
for(idx = 0, dot_idx = -1; *s && d < dlimit; s++, d++) {
|
||||
if(memchr(illegal_aliens, *s, len)) {
|
||||
/* Dots are special: DOS doesn't allow them as the leading character,
|
||||
and a file name cannot have more than a single dot. We leave the
|
||||
first non-leading dot alone, unless it comes too close to the
|
||||
beginning of the name: we want sh.lex.c to become sh_lex.c, not
|
||||
sh.lex-c. */
|
||||
if(*s == '.') {
|
||||
if(idx == 0 && (s[1] == '/' || (s[1] == '.' && s[2] == '/'))) {
|
||||
/* Copy "./" and "../" verbatim. */
|
||||
*d++ = *s++;
|
||||
if(*s == '.')
|
||||
*d++ = *s++;
|
||||
*d = *s;
|
||||
}
|
||||
else if(idx == 0)
|
||||
*d = '_';
|
||||
else if(dot_idx >= 0) {
|
||||
if(dot_idx < 5) { /* 5 is a heuristic ad-hoc'ery */
|
||||
d[dot_idx - idx] = '_'; /* replace previous dot */
|
||||
*d = '.';
|
||||
}
|
||||
else
|
||||
*d = '-';
|
||||
}
|
||||
else
|
||||
*d = '.';
|
||||
|
||||
if(*s == '.')
|
||||
dot_idx = idx;
|
||||
}
|
||||
else if(*s == '+' && s[1] == '+') {
|
||||
if(idx - 2 == dot_idx) { /* .c++, .h++ etc. */
|
||||
*d++ = 'x';
|
||||
*d = 'x';
|
||||
}
|
||||
else {
|
||||
/* libg++ etc. */
|
||||
memcpy (d, "plus", 4);
|
||||
d += 3;
|
||||
}
|
||||
s++;
|
||||
idx++;
|
||||
}
|
||||
else
|
||||
*d = '_';
|
||||
}
|
||||
else
|
||||
*d = *s;
|
||||
if(*s == '/') {
|
||||
idx = 0;
|
||||
dot_idx = -1;
|
||||
}
|
||||
else
|
||||
idx++;
|
||||
}
|
||||
|
||||
*d = '\0';
|
||||
return dos_name;
|
||||
}
|
||||
|
||||
static char *rename_if_dos_device_name (char *file_name)
|
||||
{
|
||||
/* We could have a file whose name is a device on MS-DOS. Trying to
|
||||
* retrieve such a file would fail at best and wedge us at worst. We need
|
||||
* to rename such files. */
|
||||
char *base;
|
||||
struct_stat st_buf;
|
||||
char fname[PATH_MAX];
|
||||
|
||||
strncpy(fname, file_name, PATH_MAX-1);
|
||||
fname[PATH_MAX-1] = '\0';
|
||||
base = basename(fname);
|
||||
if(((stat(base, &st_buf)) == 0) && (S_ISCHR(st_buf.st_mode))) {
|
||||
size_t blen = strlen(base);
|
||||
|
||||
if(strlen(fname) >= PATH_MAX-1) {
|
||||
/* Make room for the '_' */
|
||||
blen--;
|
||||
base[blen] = '\0';
|
||||
}
|
||||
/* Prepend a '_'. */
|
||||
memmove(base + 1, base, blen + 1);
|
||||
base[0] = '_';
|
||||
strcpy(file_name, fname);
|
||||
}
|
||||
return file_name;
|
||||
}
|
||||
|
||||
#if defined(MSDOS) && (defined(__DJGPP__) || defined(__GO32__))
|
||||
|
||||
/*
|
||||
* Disable program default argument globbing. We do it on our own.
|
||||
*/
|
||||
char **__crt0_glob_function(char *arg)
|
||||
{
|
||||
(void)arg;
|
||||
return (char**)0;
|
||||
}
|
||||
|
||||
#endif /* MSDOS && (__DJGPP__ || __GO32__) */
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
/*
|
||||
* Function to find CACert bundle on a Win32 platform using SearchPath.
|
||||
* (SearchPath is already declared via inclusions done in setup header file)
|
||||
* (Use the ASCII version instead of the unicode one!)
|
||||
* The order of the directories it searches is:
|
||||
* 1. application's directory
|
||||
* 2. current working directory
|
||||
* 3. Windows System directory (e.g. C:\windows\system32)
|
||||
* 4. Windows Directory (e.g. C:\windows)
|
||||
* 5. all directories along %PATH%
|
||||
*
|
||||
* For WinXP and later search order actually depends on registry value:
|
||||
* HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SafeProcessSearchMode
|
||||
*/
|
||||
|
||||
CURLcode FindWin32CACert(struct Configurable *config, const char *bundle_file)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
/* search and set cert file only if libcurl supports SSL */
|
||||
if(curlinfo->features & CURL_VERSION_SSL) {
|
||||
|
||||
DWORD res_len;
|
||||
DWORD buf_tchar_size = PATH_MAX + 1;
|
||||
DWORD buf_bytes_size = sizeof(TCHAR) * buf_tchar_size;
|
||||
char *ptr = NULL;
|
||||
|
||||
char *buf = malloc(buf_bytes_size);
|
||||
if(!buf)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
buf[0] = '\0';
|
||||
|
||||
res_len = SearchPathA(NULL, bundle_file, NULL, buf_tchar_size, buf, &ptr);
|
||||
if(res_len > 0) {
|
||||
Curl_safefree(config->cacert);
|
||||
config->cacert = strdup(buf);
|
||||
if(!config->cacert)
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
Curl_safefree(buf);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
#endif /* MSDOS || WIN32 */
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#ifndef HEADER_CURL_TOOL_DOSWIN_H
|
||||
#define HEADER_CURL_TOOL_DOSWIN_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#if defined(MSDOS) || defined(WIN32)
|
||||
|
||||
char *sanitize_dos_name(char *file_name);
|
||||
|
||||
#if defined(MSDOS) && (defined(__DJGPP__) || defined(__GO32__))
|
||||
|
||||
char **__crt0_glob_function(char *arg);
|
||||
|
||||
#endif /* MSDOS && (__DJGPP__ || __GO32__) */
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
CURLcode FindWin32CACert(struct Configurable *config, const char *bundle_file);
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
#endif /* MSDOS || WIN32 */
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_DOSWIN_H */
|
||||
|
||||
@@ -0,0 +1,227 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifndef CURL_DISABLE_LIBCURL_OPTION
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_easysrc.h"
|
||||
#include "tool_msgs.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/* global variable definitions, for easy-interface source code generation */
|
||||
|
||||
struct curl_slist *easysrc_decl = NULL; /* Variable declarations */
|
||||
struct curl_slist *easysrc_data = NULL; /* Build slists, forms etc. */
|
||||
struct curl_slist *easysrc_code = NULL; /* Setopt calls */
|
||||
struct curl_slist *easysrc_toohard = NULL; /* Unconvertible setopt */
|
||||
struct curl_slist *easysrc_clean = NULL; /* Clean up allocated data */
|
||||
int easysrc_form_count = 0;
|
||||
int easysrc_slist_count = 0;
|
||||
|
||||
static const char *const srchead[]={
|
||||
"/********* Sample code generated by the curl command line tool **********",
|
||||
" * All curl_easy_setopt() options are documented at:",
|
||||
" * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html",
|
||||
" ************************************************************************/",
|
||||
"#include <curl/curl.h>",
|
||||
"",
|
||||
"int main(int argc, char *argv[])",
|
||||
"{",
|
||||
" CURLcode ret;",
|
||||
" CURL *hnd;",
|
||||
NULL
|
||||
};
|
||||
/* easysrc_decl declarations come here */
|
||||
/* easysrc_data initialisations come here */
|
||||
/* easysrc_code statements come here */
|
||||
static const char *const srchard[]={
|
||||
"/* Here is a list of options the curl code used that cannot get generated",
|
||||
" as source easily. You may select to either not use them or implement",
|
||||
" them yourself.",
|
||||
"",
|
||||
NULL
|
||||
};
|
||||
static const char *const srcend[]={
|
||||
"",
|
||||
" return (int)ret;",
|
||||
"}",
|
||||
"/**** End of sample code ****/",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* Clean up all source code if we run out of memory */
|
||||
static void easysrc_free(void)
|
||||
{
|
||||
curl_slist_free_all(easysrc_decl);
|
||||
easysrc_decl = NULL;
|
||||
curl_slist_free_all(easysrc_data);
|
||||
easysrc_data = NULL;
|
||||
curl_slist_free_all(easysrc_code);
|
||||
easysrc_code = NULL;
|
||||
curl_slist_free_all(easysrc_toohard);
|
||||
easysrc_toohard = NULL;
|
||||
curl_slist_free_all(easysrc_clean);
|
||||
easysrc_clean = NULL;
|
||||
}
|
||||
|
||||
/* Add a source line to the main code or remarks */
|
||||
CURLcode easysrc_add(struct curl_slist **plist, const char *line)
|
||||
{
|
||||
CURLcode ret = CURLE_OK;
|
||||
struct curl_slist *list =
|
||||
curl_slist_append(*plist, line);
|
||||
if(!list) {
|
||||
easysrc_free();
|
||||
ret = CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
else
|
||||
*plist = list;
|
||||
return ret;
|
||||
}
|
||||
|
||||
CURLcode easysrc_addf(struct curl_slist **plist, const char *fmt, ...)
|
||||
{
|
||||
CURLcode ret;
|
||||
char *bufp;
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
bufp = curlx_mvaprintf(fmt, ap);
|
||||
va_end(ap);
|
||||
if(! bufp) {
|
||||
ret = CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
else {
|
||||
ret = easysrc_add(plist, bufp);
|
||||
curl_free(bufp);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define CHKRET(v) do {CURLcode ret = (v); if(ret) return ret;} WHILE_FALSE
|
||||
|
||||
CURLcode easysrc_init(void)
|
||||
{
|
||||
CHKRET(easysrc_add(&easysrc_code,
|
||||
"hnd = curl_easy_init();"));
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
CURLcode easysrc_perform(void)
|
||||
{
|
||||
/* Note any setopt calls which we could not convert */
|
||||
if(easysrc_toohard) {
|
||||
int i;
|
||||
struct curl_slist *ptr;
|
||||
const char *c;
|
||||
CHKRET(easysrc_add(&easysrc_code, ""));
|
||||
/* Preamble comment */
|
||||
for(i=0; ((c = srchard[i]) != NULL); i++)
|
||||
CHKRET(easysrc_add(&easysrc_code, c));
|
||||
/* Each unconverted option */
|
||||
for(ptr=easysrc_toohard; ptr; ptr = ptr->next)
|
||||
CHKRET(easysrc_add(&easysrc_code, ptr->data));
|
||||
CHKRET(easysrc_add(&easysrc_code, ""));
|
||||
CHKRET(easysrc_add(&easysrc_code, "*/"));
|
||||
|
||||
curl_slist_free_all(easysrc_toohard);
|
||||
easysrc_toohard = NULL;
|
||||
}
|
||||
|
||||
CHKRET(easysrc_add(&easysrc_code, ""));
|
||||
CHKRET(easysrc_add(&easysrc_code, "ret = curl_easy_perform(hnd);"));
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
CURLcode easysrc_cleanup(void)
|
||||
{
|
||||
CHKRET(easysrc_add(&easysrc_code, ""));
|
||||
CHKRET(easysrc_add(&easysrc_code, "curl_easy_cleanup(hnd);"));
|
||||
CHKRET(easysrc_add(&easysrc_code, "hnd = NULL;"));
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
void dumpeasysrc(struct Configurable *config)
|
||||
{
|
||||
struct curl_slist *ptr;
|
||||
char *o = config->libcurl;
|
||||
|
||||
if(o) {
|
||||
FILE *out;
|
||||
bool fopened = FALSE;
|
||||
if(strcmp(o, "-")) {
|
||||
out = fopen(o, "w");
|
||||
fopened = TRUE;
|
||||
}
|
||||
else
|
||||
out = stdout;
|
||||
if(!out)
|
||||
warnf(config, "Failed to open %s to write libcurl code!\n", o);
|
||||
else {
|
||||
int i;
|
||||
const char *c;
|
||||
|
||||
for(i=0; ((c = srchead[i]) != NULL); i++)
|
||||
fprintf(out, "%s\n", c);
|
||||
|
||||
/* Declare variables used for complex setopt values */
|
||||
for(ptr=easysrc_decl; ptr; ptr = ptr->next)
|
||||
fprintf(out, " %s\n", ptr->data);
|
||||
|
||||
/* Set up complex values for setopt calls */
|
||||
if(easysrc_data) {
|
||||
fprintf(out, "\n");
|
||||
|
||||
for(ptr=easysrc_data; ptr; ptr = ptr->next)
|
||||
fprintf(out, " %s\n", ptr->data);
|
||||
}
|
||||
|
||||
fprintf(out, "\n");
|
||||
for(ptr=easysrc_code; ptr; ptr = ptr->next) {
|
||||
if(ptr->data[0]) {
|
||||
fprintf(out, " %s\n", ptr->data);
|
||||
}
|
||||
else {
|
||||
fprintf(out, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
for(ptr=easysrc_clean; ptr; ptr = ptr->next)
|
||||
fprintf(out, " %s\n", ptr->data);
|
||||
|
||||
for(i=0; ((c = srcend[i]) != NULL); i++)
|
||||
fprintf(out, "%s\n", c);
|
||||
|
||||
if(fopened)
|
||||
fclose(out);
|
||||
}
|
||||
}
|
||||
|
||||
easysrc_free();
|
||||
}
|
||||
|
||||
#endif /* CURL_DISABLE_LIBCURL_OPTION */
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef HEADER_CURL_TOOL_EASYSRC_H
|
||||
#define HEADER_CURL_TOOL_EASYSRC_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
#ifndef CURL_DISABLE_LIBCURL_OPTION
|
||||
|
||||
/* global variable declarations, for easy-interface source code generation */
|
||||
|
||||
extern struct curl_slist *easysrc_decl; /* Variable declarations */
|
||||
extern struct curl_slist *easysrc_data; /* Build slists, forms etc. */
|
||||
extern struct curl_slist *easysrc_code; /* Setopt calls etc. */
|
||||
extern struct curl_slist *easysrc_toohard; /* Unconvertible setopt */
|
||||
extern struct curl_slist *easysrc_clean; /* Clean up (reverse order) */
|
||||
|
||||
extern int easysrc_form_count; /* Number of curl_httppost variables */
|
||||
extern int easysrc_slist_count; /* Number of curl_slist variables */
|
||||
|
||||
extern CURLcode easysrc_init(void);
|
||||
extern CURLcode easysrc_add(struct curl_slist **plist, const char *bupf);
|
||||
extern CURLcode easysrc_addf(struct curl_slist **plist, const char *fmt, ...);
|
||||
extern CURLcode easysrc_perform(void);
|
||||
extern CURLcode easysrc_cleanup(void);
|
||||
void dumpeasysrc(struct Configurable *config);
|
||||
|
||||
#endif /* CURL_DISABLE_LIBCURL_OPTION */
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_EASYSRC_H */
|
||||
@@ -0,0 +1,361 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "rawstr.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_mfiles.h"
|
||||
#include "tool_msgs.h"
|
||||
#include "tool_formparse.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
|
||||
/*
|
||||
* helper function to get a word from form param
|
||||
* after call get_parm_word, str either point to string end
|
||||
* or point to any of end chars.
|
||||
*/
|
||||
static char *get_param_word(char **str, char **end_pos)
|
||||
{
|
||||
char *ptr = *str;
|
||||
char *word_begin = NULL;
|
||||
char *ptr2;
|
||||
char *escape = NULL;
|
||||
const char *end_chars = ";,";
|
||||
|
||||
/* the first non-space char is here */
|
||||
word_begin = ptr;
|
||||
if(*ptr == '"') {
|
||||
++ptr;
|
||||
while(*ptr) {
|
||||
if(*ptr == '\\') {
|
||||
if(ptr[1] == '\\' || ptr[1] == '"') {
|
||||
/* remember the first escape position */
|
||||
if(!escape)
|
||||
escape = ptr;
|
||||
/* skip escape of back-slash or double-quote */
|
||||
ptr += 2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(*ptr == '"') {
|
||||
*end_pos = ptr;
|
||||
if(escape) {
|
||||
/* has escape, we restore the unescaped string here */
|
||||
ptr = ptr2 = escape;
|
||||
do {
|
||||
if(*ptr == '\\' && (ptr[1] == '\\' || ptr[1] == '"'))
|
||||
++ptr;
|
||||
*ptr2++ = *ptr++;
|
||||
}
|
||||
while(ptr < *end_pos);
|
||||
*end_pos = ptr2;
|
||||
}
|
||||
while(*ptr && NULL==strchr(end_chars, *ptr))
|
||||
++ptr;
|
||||
*str = ptr;
|
||||
return word_begin+1;
|
||||
}
|
||||
++ptr;
|
||||
}
|
||||
/* end quote is missing, treat it as non-quoted. */
|
||||
ptr = word_begin;
|
||||
}
|
||||
|
||||
while(*ptr && NULL==strchr(end_chars, *ptr))
|
||||
++ptr;
|
||||
*str = *end_pos = ptr;
|
||||
return word_begin;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* formparse()
|
||||
*
|
||||
* Reads a 'name=value' parameter and builds the appropriate linked list.
|
||||
*
|
||||
* Specify files to upload with 'name=@filename', or 'name=@"filename"'
|
||||
* in case the filename contain ',' or ';'. Supports specified
|
||||
* given Content-Type of the files. Such as ';type=<content-type>'.
|
||||
*
|
||||
* If literal_value is set, any initial '@' or '<' in the value string
|
||||
* loses its special meaning, as does any embedded ';type='.
|
||||
*
|
||||
* You may specify more than one file for a single name (field). Specify
|
||||
* multiple files by writing it like:
|
||||
*
|
||||
* 'name=@filename,filename2,filename3'
|
||||
*
|
||||
* or use double-quotes quote the filename:
|
||||
*
|
||||
* 'name=@"filename","filename2","filename3"'
|
||||
*
|
||||
* If you want content-types specified for each too, write them like:
|
||||
*
|
||||
* 'name=@filename;type=image/gif,filename2,filename3'
|
||||
*
|
||||
* If you want custom headers added for a single part, write them in a separate
|
||||
* file and do like this:
|
||||
*
|
||||
* 'name=foo;headers=@headerfile' or why not
|
||||
* 'name=@filemame;headers=@headerfile'
|
||||
*
|
||||
* To upload a file, but to fake the file name that will be included in the
|
||||
* formpost, do like this:
|
||||
*
|
||||
* 'name=@filename;filename=/dev/null' or quote the faked filename like:
|
||||
* 'name=@filename;filename="play, play, and play.txt"'
|
||||
*
|
||||
* If filename/path contains ',' or ';', it must be quoted by double-quotes,
|
||||
* else curl will fail to figure out the correct filename. if the filename
|
||||
* tobe quoted contains '"' or '\', '"' and '\' must be escaped by backslash.
|
||||
*
|
||||
* This function uses curl_formadd to fulfill it's job. Is heavily based on
|
||||
* the old curl_formparse code.
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
int formparse(struct Configurable *config,
|
||||
const char *input,
|
||||
struct curl_httppost **httppost,
|
||||
struct curl_httppost **last_post,
|
||||
bool literal_value)
|
||||
{
|
||||
/* nextarg MUST be a string in the format 'name=contents' and we'll
|
||||
build a linked list with the info */
|
||||
char name[256];
|
||||
char *contents = NULL;
|
||||
char type_major[128];
|
||||
char type_minor[128];
|
||||
char *contp;
|
||||
const char *type = NULL;
|
||||
char *sep;
|
||||
|
||||
if((1 == sscanf(input, "%255[^=]=", name)) &&
|
||||
((contp = strchr(input, '=')) != NULL)) {
|
||||
/* the input was using the correct format */
|
||||
|
||||
/* Allocate the contents */
|
||||
contents = strdup(contp+1);
|
||||
if(!contents) {
|
||||
fprintf(config->errors, "out of memory\n");
|
||||
return 1;
|
||||
}
|
||||
contp = contents;
|
||||
|
||||
if('@' == contp[0] && !literal_value) {
|
||||
|
||||
/* we use the @-letter to indicate file name(s) */
|
||||
|
||||
struct multi_files *multi_start = NULL;
|
||||
struct multi_files *multi_current = NULL;
|
||||
|
||||
char *ptr = contp;
|
||||
char *end = ptr + strlen(ptr);
|
||||
|
||||
do {
|
||||
/* since this was a file, it may have a content-type specifier
|
||||
at the end too, or a filename. Or both. */
|
||||
char *filename = NULL;
|
||||
char *word_end;
|
||||
bool semicolon;
|
||||
|
||||
type = NULL;
|
||||
|
||||
++ptr;
|
||||
contp = get_param_word(&ptr, &word_end);
|
||||
semicolon = (';' == *ptr) ? TRUE : FALSE;
|
||||
*word_end = '\0'; /* terminate the contp */
|
||||
|
||||
/* have other content, continue parse */
|
||||
while(semicolon) {
|
||||
/* have type or filename field */
|
||||
++ptr;
|
||||
while(*ptr && (ISSPACE(*ptr)))
|
||||
++ptr;
|
||||
|
||||
if(checkprefix("type=", ptr)) {
|
||||
/* set type pointer */
|
||||
type = &ptr[5];
|
||||
|
||||
/* verify that this is a fine type specifier */
|
||||
if(2 != sscanf(type, "%127[^/]/%127[^;,\n]",
|
||||
type_major, type_minor)) {
|
||||
warnf(config, "Illegally formatted content-type field!\n");
|
||||
Curl_safefree(contents);
|
||||
FreeMultiInfo(&multi_start, &multi_current);
|
||||
return 2; /* illegal content-type syntax! */
|
||||
}
|
||||
|
||||
/* now point beyond the content-type specifier */
|
||||
sep = (char *)type + strlen(type_major)+strlen(type_minor)+1;
|
||||
|
||||
/* there's a semicolon following - we check if it is a filename
|
||||
specified and if not we simply assume that it is text that
|
||||
the user wants included in the type and include that too up
|
||||
to the next sep. */
|
||||
ptr = sep;
|
||||
if(*sep==';') {
|
||||
if(!checkprefix(";filename=", sep)) {
|
||||
ptr = sep + 1;
|
||||
(void)get_param_word(&ptr, &sep);
|
||||
semicolon = (';' == *ptr) ? TRUE : FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
semicolon = FALSE;
|
||||
|
||||
if(*sep)
|
||||
*sep = '\0'; /* zero terminate type string */
|
||||
}
|
||||
else if(checkprefix("filename=", ptr)) {
|
||||
ptr += 9;
|
||||
filename = get_param_word(&ptr, &word_end);
|
||||
semicolon = (';' == *ptr) ? TRUE : FALSE;
|
||||
*word_end = '\0';
|
||||
}
|
||||
else {
|
||||
/* unknown prefix, skip to next block */
|
||||
char *unknown = NULL;
|
||||
unknown = get_param_word(&ptr, &word_end);
|
||||
semicolon = (';' == *ptr) ? TRUE : FALSE;
|
||||
if(*unknown) {
|
||||
*word_end = '\0';
|
||||
warnf(config, "skip unknown form field: %s\n", unknown);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* now ptr point to comma or string end */
|
||||
|
||||
|
||||
/* if type == NULL curl_formadd takes care of the problem */
|
||||
|
||||
if(*contp && !AddMultiFiles(contp, type, filename, &multi_start,
|
||||
&multi_current)) {
|
||||
warnf(config, "Error building form post!\n");
|
||||
Curl_safefree(contents);
|
||||
FreeMultiInfo(&multi_start, &multi_current);
|
||||
return 3;
|
||||
}
|
||||
|
||||
/* *ptr could be '\0', so we just check with the string end */
|
||||
} while(ptr < end); /* loop if there's another file name */
|
||||
|
||||
/* now we add the multiple files section */
|
||||
if(multi_start) {
|
||||
struct curl_forms *forms = NULL;
|
||||
struct multi_files *start = multi_start;
|
||||
unsigned int i, count = 0;
|
||||
while(start) {
|
||||
start = start->next;
|
||||
++count;
|
||||
}
|
||||
forms = malloc((count+1)*sizeof(struct curl_forms));
|
||||
if(!forms) {
|
||||
fprintf(config->errors, "Error building form post!\n");
|
||||
Curl_safefree(contents);
|
||||
FreeMultiInfo(&multi_start, &multi_current);
|
||||
return 4;
|
||||
}
|
||||
for(i = 0, start = multi_start; i < count; ++i, start = start->next) {
|
||||
forms[i].option = start->form.option;
|
||||
forms[i].value = start->form.value;
|
||||
}
|
||||
forms[count].option = CURLFORM_END;
|
||||
FreeMultiInfo(&multi_start, &multi_current);
|
||||
if(curl_formadd(httppost, last_post,
|
||||
CURLFORM_COPYNAME, name,
|
||||
CURLFORM_ARRAY, forms, CURLFORM_END) != 0) {
|
||||
warnf(config, "curl_formadd failed!\n");
|
||||
Curl_safefree(forms);
|
||||
Curl_safefree(contents);
|
||||
return 5;
|
||||
}
|
||||
Curl_safefree(forms);
|
||||
}
|
||||
}
|
||||
else {
|
||||
struct curl_forms info[4];
|
||||
int i = 0;
|
||||
char *ct = literal_value ? NULL : strstr(contp, ";type=");
|
||||
|
||||
info[i].option = CURLFORM_COPYNAME;
|
||||
info[i].value = name;
|
||||
i++;
|
||||
|
||||
if(ct) {
|
||||
info[i].option = CURLFORM_CONTENTTYPE;
|
||||
info[i].value = &ct[6];
|
||||
i++;
|
||||
ct[0] = '\0'; /* zero terminate here */
|
||||
}
|
||||
|
||||
if(contp[0]=='<' && !literal_value) {
|
||||
info[i].option = CURLFORM_FILECONTENT;
|
||||
info[i].value = contp+1;
|
||||
i++;
|
||||
info[i].option = CURLFORM_END;
|
||||
|
||||
if(curl_formadd(httppost, last_post,
|
||||
CURLFORM_ARRAY, info, CURLFORM_END ) != 0) {
|
||||
warnf(config, "curl_formadd failed, possibly the file %s is bad!\n",
|
||||
contp+1);
|
||||
Curl_safefree(contents);
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
else {
|
||||
#ifdef CURL_DOES_CONVERSIONS
|
||||
if(convert_to_network(contp, strlen(contp))) {
|
||||
warnf(config, "curl_formadd failed!\n");
|
||||
Curl_safefree(contents);
|
||||
return 7;
|
||||
}
|
||||
#endif
|
||||
info[i].option = CURLFORM_COPYCONTENTS;
|
||||
info[i].value = contp;
|
||||
i++;
|
||||
info[i].option = CURLFORM_END;
|
||||
if(curl_formadd(httppost, last_post,
|
||||
CURLFORM_ARRAY, info, CURLFORM_END) != 0) {
|
||||
warnf(config, "curl_formadd failed!\n");
|
||||
Curl_safefree(contents);
|
||||
return 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
warnf(config, "Illegally formatted input field!\n");
|
||||
return 1;
|
||||
}
|
||||
Curl_safefree(contents);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#ifndef HEADER_CURL_TOOL_FORMPARSE_H
|
||||
#define HEADER_CURL_TOOL_FORMPARSE_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
int formparse(struct Configurable *config,
|
||||
const char *input,
|
||||
struct curl_httppost **httppost,
|
||||
struct curl_httppost **last_post,
|
||||
bool literal_value);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_FORMPARSE_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,49 @@
|
||||
#ifndef HEADER_CURL_TOOL_GETPARAM_H
|
||||
#define HEADER_CURL_TOOL_GETPARAM_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
typedef enum {
|
||||
PARAM_OK = 0,
|
||||
PARAM_OPTION_AMBIGUOUS,
|
||||
PARAM_OPTION_UNKNOWN,
|
||||
PARAM_REQUIRES_PARAMETER,
|
||||
PARAM_BAD_USE,
|
||||
PARAM_HELP_REQUESTED,
|
||||
PARAM_GOT_EXTRA_PARAMETER,
|
||||
PARAM_BAD_NUMERIC,
|
||||
PARAM_NEGATIVE_NUMERIC,
|
||||
PARAM_LIBCURL_DOESNT_SUPPORT,
|
||||
PARAM_NO_MEM,
|
||||
PARAM_LAST
|
||||
} ParameterError;
|
||||
|
||||
struct Configurable;
|
||||
|
||||
ParameterError getparameter(char *flag,
|
||||
char *nextarg,
|
||||
bool *usedarg,
|
||||
struct Configurable *config);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_GETPARAM_H */
|
||||
|
||||
+69
-81
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -18,48 +18,49 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: getpass.c,v 1.24 2008-10-24 01:27:00 yangtse Exp $
|
||||
***************************************************************************/
|
||||
|
||||
/* This file is a reimplementation of the previous one, due to license
|
||||
problems. */
|
||||
|
||||
#include "setup.h"
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifndef HAVE_GETPASS_R
|
||||
/* this file is only for systems without getpass_r() */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "getpass.h"
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_TERMIOS_H
|
||||
#include <termios.h>
|
||||
#else
|
||||
#ifdef HAVE_TERMIO_H
|
||||
#include <termio.h>
|
||||
#endif
|
||||
# include <termios.h>
|
||||
#elif defined(HAVE_TERMIO_H)
|
||||
# include <termio.h>
|
||||
#endif
|
||||
|
||||
/* The last #include file should be: */
|
||||
#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG)
|
||||
#include "memdebug.h"
|
||||
#ifdef __VMS
|
||||
# include descrip
|
||||
# include starlet
|
||||
# include iodef
|
||||
#endif
|
||||
|
||||
#ifdef VMS
|
||||
#ifdef WIN32
|
||||
# include <conio.h>
|
||||
#endif
|
||||
|
||||
#ifdef NETWARE
|
||||
# ifdef __NOVELL_LIBC__
|
||||
# include <screen.h>
|
||||
# else
|
||||
# include <nwconio.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define _MPRINTF_REPLACE
|
||||
#include <curl/mprintf.h>
|
||||
|
||||
#include "tool_getpass.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#ifdef __VMS
|
||||
/* VMS implementation */
|
||||
#include descrip
|
||||
#include starlet
|
||||
#include iodef
|
||||
/* #include iosbdef */
|
||||
char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
{
|
||||
long sts;
|
||||
@@ -77,15 +78,15 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
|
||||
$DESCRIPTOR(ttdesc, "TT");
|
||||
|
||||
buffer[0]='\0';
|
||||
sts = sys$assign(&ttdesc, &chan,0,0);
|
||||
if (sts & 1) {
|
||||
buffer[0] = '\0';
|
||||
sts = sys$assign(&ttdesc, &chan, 0, 0);
|
||||
if(sts & 1) {
|
||||
sts = sys$qiow(0, chan,
|
||||
IO$_READPROMPT | IO$M_NOECHO,
|
||||
&iosb, 0, 0, buffer, buflen, 0, 0,
|
||||
prompt, strlen(prompt));
|
||||
|
||||
if((sts & 1) && (iosb.iosb$w_status&1))
|
||||
if((sts & 1) && (iosb.iosb$w_status & 1))
|
||||
buffer[iosb.iosb$w_bcnt] = '\0';
|
||||
|
||||
sts = sys$dassgn(chan);
|
||||
@@ -93,16 +94,10 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
return buffer; /* we always return success */
|
||||
}
|
||||
#define DONE
|
||||
#endif /* VMS */
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
/* Windows implementation */
|
||||
#include <conio.h>
|
||||
#endif
|
||||
#endif /* __VMS */
|
||||
|
||||
#ifdef __SYMBIAN32__
|
||||
#define getch() getchar()
|
||||
# define getch() getchar()
|
||||
#endif
|
||||
|
||||
#if defined(WIN32) || defined(__SYMBIAN32__)
|
||||
@@ -112,25 +107,25 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
size_t i;
|
||||
fputs(prompt, stderr);
|
||||
|
||||
for(i=0; i<buflen; i++) {
|
||||
for(i = 0; i < buflen; i++) {
|
||||
buffer[i] = (char)getch();
|
||||
if ( buffer[i] == '\r' || buffer[i] == '\n' ) {
|
||||
buffer[i] = 0;
|
||||
if(buffer[i] == '\r' || buffer[i] == '\n') {
|
||||
buffer[i] = '\0';
|
||||
break;
|
||||
}
|
||||
else
|
||||
if ( buffer[i] == '\b')
|
||||
if(buffer[i] == '\b')
|
||||
/* remove this letter and if this is not the first key, remove the
|
||||
previous one as well */
|
||||
i = i - (i>=1?2:1);
|
||||
i = i - (i >= 1) ? 2 : 1;
|
||||
}
|
||||
#ifndef __SYMBIAN32__
|
||||
#ifndef __SYMBIAN32__
|
||||
/* since echo is disabled, print a newline */
|
||||
fputs("\n", stderr);
|
||||
#endif
|
||||
/* if user didn't hit ENTER, terminate buffer */
|
||||
if (i==buflen)
|
||||
buffer[buflen-1]=0;
|
||||
if(i == buflen)
|
||||
buffer[buflen-1] = '\0';
|
||||
|
||||
return buffer; /* we always return success */
|
||||
}
|
||||
@@ -140,13 +135,11 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
#ifdef NETWARE
|
||||
/* NetWare implementation */
|
||||
#ifdef __NOVELL_LIBC__
|
||||
#include <screen.h>
|
||||
char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
{
|
||||
return getpassword(prompt, buffer, buflen);
|
||||
}
|
||||
#else
|
||||
#include <nwconio.h>
|
||||
char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
{
|
||||
size_t i = 0;
|
||||
@@ -154,21 +147,23 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
printf("%s", prompt);
|
||||
do {
|
||||
buffer[i++] = getch();
|
||||
if (buffer[i-1] == '\b') {
|
||||
if(buffer[i-1] == '\b') {
|
||||
/* remove this letter and if this is not the first key,
|
||||
remove the previous one as well */
|
||||
if (i > 1) {
|
||||
if(i > 1) {
|
||||
printf("\b \b");
|
||||
i = i - 2;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
RingTheBell();
|
||||
i = i - 1;
|
||||
}
|
||||
} else if (buffer[i-1] != 13) {
|
||||
putchar('*');
|
||||
}
|
||||
} while ((buffer[i-1] != 13) && (i < buflen));
|
||||
buffer[i-1] = 0;
|
||||
else if(buffer[i-1] != 13)
|
||||
putchar('*');
|
||||
|
||||
} while((buffer[i-1] != 13) && (i < buflen));
|
||||
buffer[i-1] = '\0';
|
||||
printf("\r\n");
|
||||
return buffer;
|
||||
}
|
||||
@@ -179,13 +174,11 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
|
||||
#ifndef DONE /* not previously provided */
|
||||
|
||||
#ifdef HAVE_TERMIOS_H
|
||||
#define struct_term struct termios
|
||||
# define struct_term struct termios
|
||||
#elif defined(HAVE_TERMIO_H)
|
||||
# define struct_term struct termio
|
||||
#else
|
||||
#ifdef HAVE_TERMIO_H
|
||||
#define struct_term struct termio
|
||||
#else
|
||||
#undef struct_term
|
||||
#endif
|
||||
# undef struct_term
|
||||
#endif
|
||||
|
||||
static bool ttyecho(bool enable, int fd)
|
||||
@@ -195,24 +188,22 @@ static bool ttyecho(bool enable, int fd)
|
||||
static struct_term noecho;
|
||||
#endif
|
||||
if(!enable) {
|
||||
/* disable echo by extracting the current 'withecho' mode and remove the
|
||||
ECHO bit and set back the struct */
|
||||
/* disable echo by extracting the current 'withecho' mode and remove the
|
||||
ECHO bit and set back the struct */
|
||||
#ifdef HAVE_TERMIOS_H
|
||||
tcgetattr(fd, &withecho);
|
||||
noecho = withecho;
|
||||
noecho.c_lflag &= ~ECHO;
|
||||
tcsetattr(fd, TCSANOW, &noecho);
|
||||
#else /* HAVE_TERMIOS_H */
|
||||
#ifdef HAVE_TERMIO_H
|
||||
#elif defined(HAVE_TERMIO_H)
|
||||
ioctl(fd, TCGETA, &withecho);
|
||||
noecho = withecho;
|
||||
noecho.c_lflag &= ~ECHO;
|
||||
ioctl(fd, TCSETA, &noecho);
|
||||
#else /* HAVE_TERMIO_H */
|
||||
/* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we can't disable echo! */
|
||||
(void)fd; /* prevent compiler warning on unused variable */
|
||||
#else
|
||||
/* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we can't disable echo! */
|
||||
(void)fd;
|
||||
return FALSE; /* not disabled */
|
||||
#endif
|
||||
#endif
|
||||
return TRUE; /* disabled */
|
||||
}
|
||||
@@ -221,13 +212,10 @@ static bool ttyecho(bool enable, int fd)
|
||||
now use to reset the terminal status) */
|
||||
#ifdef HAVE_TERMIOS_H
|
||||
tcsetattr(fd, TCSAFLUSH, &withecho);
|
||||
#else /* HAVE_TERMIOS_H */
|
||||
#ifdef HAVE_TERMIO_H
|
||||
#elif defined(HAVE_TERMIO_H)
|
||||
ioctl(fd, TCSETA, &withecho);
|
||||
#else
|
||||
/* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H */
|
||||
return FALSE; /* not enabled */
|
||||
#endif
|
||||
#endif
|
||||
return TRUE; /* enabled */
|
||||
}
|
||||
@@ -239,18 +227,18 @@ char *getpass_r(const char *prompt, /* prompt to display */
|
||||
{
|
||||
ssize_t nread;
|
||||
bool disabled;
|
||||
int fd=open("/dev/tty", O_RDONLY);
|
||||
int fd = open("/dev/tty", O_RDONLY);
|
||||
if(-1 == fd)
|
||||
fd = 1; /* use stdin if the tty couldn't be used */
|
||||
|
||||
disabled = ttyecho(FALSE, fd); /* disable terminal echo */
|
||||
|
||||
fputs(prompt, stderr);
|
||||
nread=read(fd, password, buflen);
|
||||
nread = read(fd, password, buflen);
|
||||
if(nread > 0)
|
||||
password[--nread]=0; /* zero terminate where enter is stored */
|
||||
password[--nread] = '\0'; /* zero terminate where enter is stored */
|
||||
else
|
||||
password[0]=0; /* got nothing */
|
||||
password[0] = '\0'; /* got nothing */
|
||||
|
||||
if(disabled) {
|
||||
/* if echo actually was disabled, add a newline */
|
||||
+7
-6
@@ -1,5 +1,5 @@
|
||||
#ifndef __GETPASS_H
|
||||
#define __GETPASS_H
|
||||
#ifndef HEADER_CURL_TOOL_GETPASS_H
|
||||
#define HEADER_CURL_TOOL_GETPASS_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
@@ -7,7 +7,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -20,8 +20,9 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: getpass.h,v 1.3 2004/12/25 22:08:03 bagder Exp $
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifndef HAVE_GETPASS_R
|
||||
/* If there's a system-provided function named like this, we trust it is
|
||||
also found in one of the standard headers. */
|
||||
@@ -29,7 +30,7 @@
|
||||
/*
|
||||
* Returning NULL will abort the continued operation!
|
||||
*/
|
||||
char* getpass_r(const char *prompt, char* buffer, size_t buflen );
|
||||
char* getpass_r(const char *prompt, char* buffer, size_t buflen);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /* HEADER_CURL_TOOL_GETPASS_H */
|
||||
@@ -0,0 +1,245 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "tool_panykey.h"
|
||||
#include "tool_help.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#ifdef MSDOS
|
||||
# define USE_WATT32
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A few of these source lines are >80 columns wide, but that's only because
|
||||
* breaking the strings narrower makes this chunk look even worse!
|
||||
*
|
||||
* Starting with 7.18.0, this list of command line options is sorted based
|
||||
* on the long option name. It is not done automatically, although a command
|
||||
* line like the following can help out:
|
||||
*
|
||||
* curl --help | cut -c5- | grep "^-" | sort
|
||||
*/
|
||||
|
||||
static const char *const helptext[] = {
|
||||
"Usage: curl [options...] <url>",
|
||||
"Options: (H) means HTTP/HTTPS only, (F) means FTP only",
|
||||
" --anyauth Pick \"any\" authentication method (H)",
|
||||
" -a, --append Append to target file when uploading (F/SFTP)",
|
||||
" --basic Use HTTP Basic Authentication (H)",
|
||||
" --cacert FILE CA certificate to verify peer against (SSL)",
|
||||
" --capath DIR CA directory to verify peer against (SSL)",
|
||||
" -E, --cert CERT[:PASSWD] Client certificate file and password (SSL)",
|
||||
" --cert-type TYPE Certificate file type (DER/PEM/ENG) (SSL)",
|
||||
" --ciphers LIST SSL ciphers to use (SSL)",
|
||||
" --compressed Request compressed response (using deflate or gzip)",
|
||||
" -K, --config FILE Specify which config file to read",
|
||||
" --connect-timeout SECONDS Maximum time allowed for connection",
|
||||
" -C, --continue-at OFFSET Resumed transfer offset",
|
||||
" -b, --cookie STRING/FILE String or file to read cookies from (H)",
|
||||
" -c, --cookie-jar FILE Write cookies to this file after operation (H)",
|
||||
" --create-dirs Create necessary local directory hierarchy",
|
||||
" --crlf Convert LF to CRLF in upload",
|
||||
" --crlfile FILE Get a CRL list in PEM format from the given file",
|
||||
" -d, --data DATA HTTP POST data (H)",
|
||||
" --data-ascii DATA HTTP POST ASCII data (H)",
|
||||
" --data-binary DATA HTTP POST binary data (H)",
|
||||
" --data-urlencode DATA HTTP POST data url encoded (H)",
|
||||
" --delegation STRING GSS-API delegation permission",
|
||||
" --digest Use HTTP Digest Authentication (H)",
|
||||
" --disable-eprt Inhibit using EPRT or LPRT (F)",
|
||||
" --disable-epsv Inhibit using EPSV (F)",
|
||||
" -D, --dump-header FILE Write the headers to this file",
|
||||
" --egd-file FILE EGD socket path for random data (SSL)",
|
||||
" --engine ENGINGE Crypto engine (SSL). \"--engine list\" for list",
|
||||
#ifdef USE_ENVIRONMENT
|
||||
" --environment Write results to environment variables (RISC OS)",
|
||||
#endif
|
||||
" -f, --fail Fail silently (no output at all) on HTTP errors (H)",
|
||||
" -F, --form CONTENT Specify HTTP multipart POST data (H)",
|
||||
" --form-string STRING Specify HTTP multipart POST data (H)",
|
||||
" --ftp-account DATA Account data string (F)",
|
||||
" --ftp-alternative-to-user COMMAND "
|
||||
"String to replace \"USER [name]\" (F)",
|
||||
" --ftp-create-dirs Create the remote dirs if not present (F)",
|
||||
" --ftp-method [MULTICWD/NOCWD/SINGLECWD] Control CWD usage (F)",
|
||||
" --ftp-pasv Use PASV/EPSV instead of PORT (F)",
|
||||
" -P, --ftp-port ADR Use PORT with given address instead of PASV (F)",
|
||||
" --ftp-skip-pasv-ip Skip the IP address for PASV (F)\n"
|
||||
" --ftp-pret Send PRET before PASV (for drftpd) (F)",
|
||||
" --ftp-ssl-ccc Send CCC after authenticating (F)",
|
||||
" --ftp-ssl-ccc-mode ACTIVE/PASSIVE Set CCC mode (F)",
|
||||
" --ftp-ssl-control Require SSL/TLS for ftp login, "
|
||||
"clear for transfer (F)",
|
||||
" -G, --get Send the -d data with a HTTP GET (H)",
|
||||
" -g, --globoff Disable URL sequences and ranges using {} and []",
|
||||
" -H, --header LINE Custom header to pass to server (H)",
|
||||
" -I, --head Show document info only",
|
||||
" -h, --help This help text",
|
||||
" --hostpubmd5 MD5 "
|
||||
"Hex encoded MD5 string of the host public key. (SSH)",
|
||||
" -0, --http1.0 Use HTTP 1.0 (H)",
|
||||
" --ignore-content-length Ignore the HTTP Content-Length header",
|
||||
" -i, --include Include protocol headers in the output (H/F)",
|
||||
" -k, --insecure Allow connections to SSL sites without certs (H)",
|
||||
" --interface INTERFACE Specify network interface/address to use",
|
||||
" -4, --ipv4 Resolve name to IPv4 address",
|
||||
" -6, --ipv6 Resolve name to IPv6 address",
|
||||
" -j, --junk-session-cookies Ignore session cookies read from file (H)",
|
||||
" --keepalive-time SECONDS Interval between keepalive probes",
|
||||
" --key KEY Private key file name (SSL/SSH)",
|
||||
" --key-type TYPE Private key file type (DER/PEM/ENG) (SSL)",
|
||||
" --krb LEVEL Enable Kerberos with specified security level (F)",
|
||||
#ifndef CURL_DISABLE_LIBCURL_OPTION
|
||||
" --libcurl FILE Dump libcurl equivalent code of this command line",
|
||||
#endif
|
||||
" --limit-rate RATE Limit transfer speed to this rate",
|
||||
" -l, --list-only List only names of an FTP directory (F)",
|
||||
" --local-port RANGE Force use of these local port numbers",
|
||||
" -L, --location Follow redirects (H)",
|
||||
" --location-trusted like --location and send auth to other hosts (H)",
|
||||
" -M, --manual Display the full manual",
|
||||
" --mail-from FROM Mail from this address",
|
||||
" --mail-rcpt TO Mail to this receiver(s)",
|
||||
" --mail-auth AUTH Originator address of the original email",
|
||||
" --max-filesize BYTES Maximum file size to download (H/F)",
|
||||
" --max-redirs NUM Maximum number of redirects allowed (H)",
|
||||
" -m, --max-time SECONDS Maximum time allowed for the transfer",
|
||||
" --metalink Process given URLs as metalink XML file",
|
||||
" --negotiate Use HTTP Negotiate Authentication (H)",
|
||||
" -n, --netrc Must read .netrc for user name and password",
|
||||
" --netrc-optional Use either .netrc or URL; overrides -n",
|
||||
" --netrc-file FILE Set up the netrc filename to use",
|
||||
" -N, --no-buffer Disable buffering of the output stream",
|
||||
" --no-keepalive Disable keepalive use on the connection",
|
||||
" --no-sessionid Disable SSL session-ID reusing (SSL)",
|
||||
" --noproxy List of hosts which do not use proxy",
|
||||
" --ntlm Use HTTP NTLM authentication (H)",
|
||||
" -o, --output FILE Write output to <file> instead of stdout",
|
||||
" --pass PASS Pass phrase for the private key (SSL/SSH)",
|
||||
" --post301 "
|
||||
"Do not switch to GET after following a 301 redirect (H)",
|
||||
" --post302 "
|
||||
"Do not switch to GET after following a 302 redirect (H)",
|
||||
" --post303 "
|
||||
"Do not switch to GET after following a 303 redirect (H)",
|
||||
" -#, --progress-bar Display transfer progress as a progress bar",
|
||||
" --proto PROTOCOLS Enable/disable specified protocols",
|
||||
" --proto-redir PROTOCOLS "
|
||||
"Enable/disable specified protocols on redirect",
|
||||
" -x, --proxy [PROTOCOL://]HOST[:PORT] Use proxy on given port",
|
||||
" --proxy-anyauth Pick \"any\" proxy authentication method (H)",
|
||||
" --proxy-basic Use Basic authentication on the proxy (H)",
|
||||
" --proxy-digest Use Digest authentication on the proxy (H)",
|
||||
" --proxy-negotiate Use Negotiate authentication on the proxy (H)",
|
||||
" --proxy-ntlm Use NTLM authentication on the proxy (H)",
|
||||
" -U, --proxy-user USER[:PASSWORD] Proxy user and password",
|
||||
" --proxy1.0 HOST[:PORT] Use HTTP/1.0 proxy on given port",
|
||||
" -p, --proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)",
|
||||
" --pubkey KEY Public key file name (SSH)",
|
||||
" -Q, --quote CMD Send command(s) to server before transfer (F/SFTP)",
|
||||
" --random-file FILE File for reading random data from (SSL)",
|
||||
" -r, --range RANGE Retrieve only the bytes within a range",
|
||||
" --raw Do HTTP \"raw\", without any transfer decoding (H)",
|
||||
" -e, --referer Referer URL (H)",
|
||||
" -J, --remote-header-name Use the header-provided filename (H)",
|
||||
" -O, --remote-name Write output to a file named as the remote file",
|
||||
" --remote-name-all Use the remote file name for all URLs",
|
||||
" -R, --remote-time Set the remote file's time on the local output",
|
||||
" -X, --request COMMAND Specify request command to use",
|
||||
" --resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS",
|
||||
" --retry NUM "
|
||||
"Retry request NUM times if transient problems occur",
|
||||
" --retry-delay SECONDS "
|
||||
"When retrying, wait this many seconds between each",
|
||||
" --retry-max-time SECONDS Retry only within this period",
|
||||
" -S, --show-error "
|
||||
"Show error. With -s, make curl show errors when they occur",
|
||||
" -s, --silent Silent mode. Don't output anything",
|
||||
" --socks4 HOST[:PORT] SOCKS4 proxy on given host + port",
|
||||
" --socks4a HOST[:PORT] SOCKS4a proxy on given host + port",
|
||||
" --socks5 HOST[:PORT] SOCKS5 proxy on given host + port",
|
||||
" --socks5-hostname HOST[:PORT] "
|
||||
"SOCKS5 proxy, pass host name to proxy",
|
||||
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
|
||||
" --socks5-gssapi-service NAME SOCKS5 proxy service name for gssapi",
|
||||
" --socks5-gssapi-nec Compatibility with NEC SOCKS5 server",
|
||||
#endif
|
||||
" -Y, --speed-limit RATE "
|
||||
"Stop transfers below speed-limit for 'speed-time' secs",
|
||||
" -y, --speed-time SECONDS "
|
||||
"Time for trig speed-limit abort. Defaults to 30",
|
||||
" --ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)",
|
||||
" --ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)",
|
||||
" -2, --sslv2 Use SSLv2 (SSL)",
|
||||
" -3, --sslv3 Use SSLv3 (SSL)",
|
||||
" --ssl-allow-beast Allow security flaw to improve interop (SSL)",
|
||||
" --stderr FILE Where to redirect stderr. - means stdout",
|
||||
" --tcp-nodelay Use the TCP_NODELAY option",
|
||||
" -t, --telnet-option OPT=VAL Set telnet option",
|
||||
" --tftp-blksize VALUE Set TFTP BLKSIZE option (must be >512)",
|
||||
" -z, --time-cond TIME Transfer based on a time condition",
|
||||
" -1, --tlsv1 Use TLSv1 (SSL)",
|
||||
" --trace FILE Write a debug trace to the given file",
|
||||
" --trace-ascii FILE Like --trace but without the hex output",
|
||||
" --trace-time Add time stamps to trace/verbose output",
|
||||
" --tr-encoding Request compressed transfer encoding (H)",
|
||||
" -T, --upload-file FILE Transfer FILE to destination",
|
||||
" --url URL URL to work with",
|
||||
" -B, --use-ascii Use ASCII/text transfer",
|
||||
" -u, --user USER[:PASSWORD] Server user and password",
|
||||
" --tlsuser USER TLS username",
|
||||
" --tlspassword STRING TLS password",
|
||||
" --tlsauthtype STRING TLS authentication type (default SRP)",
|
||||
" -A, --user-agent STRING User-Agent to send to server (H)",
|
||||
" -v, --verbose Make the operation more talkative",
|
||||
" -V, --version Show version number and quit",
|
||||
#ifdef USE_WATT32
|
||||
" --wdebug Turn on Watt-32 debugging",
|
||||
#endif
|
||||
" -w, --write-out FORMAT What to output after completion",
|
||||
" --xattr Store metadata in extended file attributes",
|
||||
" -q If used as the first parameter disables .curlrc",
|
||||
NULL
|
||||
};
|
||||
|
||||
#ifdef NETWARE
|
||||
# define PRINT_LINES_PAUSE 23
|
||||
#endif
|
||||
|
||||
#ifdef __SYMBIAN32__
|
||||
# define PRINT_LINES_PAUSE 16
|
||||
#endif
|
||||
|
||||
void tool_help(void)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; helptext[i]; i++) {
|
||||
puts(helptext[i]);
|
||||
#ifdef PRINT_LINES_PAUSE
|
||||
if(i && ((i % PRINT_LINES_PAUSE) == 0))
|
||||
tool_pressanykey();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
+12
-11
@@ -1,18 +1,18 @@
|
||||
#ifndef __WRITEENV_H
|
||||
#define __WRITEENV_H
|
||||
#ifndef HEADER_CURL_TOOL_HELP_H
|
||||
#define HEADER_CURL_TOOL_HELP_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
@@ -20,9 +20,10 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: writeenv.h,v 1.5 2004/01/07 09:19:36 bagder Exp $
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
void ourWriteEnv(CURL *curl);
|
||||
void tool_help(void);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_HELP_H */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,78 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "rawstr.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_msgs.h"
|
||||
#include "tool_getparam.h"
|
||||
#include "tool_helpers.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/*
|
||||
** Helper functions that are used from more tha one source file.
|
||||
*/
|
||||
|
||||
const char *param2text(int res)
|
||||
{
|
||||
ParameterError error = (ParameterError)res;
|
||||
switch(error) {
|
||||
case PARAM_GOT_EXTRA_PARAMETER:
|
||||
return "had unsupported trailing garbage";
|
||||
case PARAM_OPTION_UNKNOWN:
|
||||
return "is unknown";
|
||||
case PARAM_OPTION_AMBIGUOUS:
|
||||
return "is ambiguous";
|
||||
case PARAM_REQUIRES_PARAMETER:
|
||||
return "requires parameter";
|
||||
case PARAM_BAD_USE:
|
||||
return "is badly used here";
|
||||
case PARAM_BAD_NUMERIC:
|
||||
return "expected a proper numerical parameter";
|
||||
case PARAM_NEGATIVE_NUMERIC:
|
||||
return "expected a positive numerical parameter";
|
||||
case PARAM_LIBCURL_DOESNT_SUPPORT:
|
||||
return "the installed libcurl version doesn't support this";
|
||||
case PARAM_NO_MEM:
|
||||
return "out of memory";
|
||||
default:
|
||||
return "unknown error";
|
||||
}
|
||||
}
|
||||
|
||||
int SetHTTPrequest(struct Configurable *config, HttpReq req, HttpReq *store)
|
||||
{
|
||||
if((*store == HTTPREQ_UNSPEC) ||
|
||||
(*store == req)) {
|
||||
*store = req;
|
||||
return 0;
|
||||
}
|
||||
warnf(config, "You can only select one HTTP request!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef HEADER_CURL_TOOL_HELPERS_H
|
||||
#define HEADER_CURL_TOOL_HELPERS_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
const char *param2text(int res);
|
||||
|
||||
int SetHTTPrequest(struct Configurable *config, HttpReq req, HttpReq *store);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_HELPERS_H */
|
||||
|
||||
+13
-39
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -18,33 +18,18 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: homedir.c,v 1.11 2008-09-12 11:18:18 yangtse Exp $
|
||||
***************************************************************************/
|
||||
|
||||
#include "setup.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef HAVE_PWD_H
|
||||
#include <pwd.h>
|
||||
#endif
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#ifdef VMS
|
||||
#include <unixlib.h>
|
||||
# include <pwd.h>
|
||||
#endif
|
||||
|
||||
#include "homedir.h"
|
||||
#include "tool_homedir.h"
|
||||
|
||||
#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG)
|
||||
#include "memdebug.h"
|
||||
#endif
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
static
|
||||
char *GetEnv(const char *variable, char do_expand)
|
||||
static char *GetEnv(const char *variable, char do_expand)
|
||||
{
|
||||
char *env = NULL;
|
||||
#ifdef WIN32
|
||||
@@ -55,30 +40,23 @@ char *GetEnv(const char *variable, char do_expand)
|
||||
* started. Don't accept truncated results (i.e. rc >= sizeof(buf1)). */
|
||||
|
||||
rc = GetEnvironmentVariable(variable, buf1, sizeof(buf1));
|
||||
if (rc > 0 && rc < sizeof(buf1)) {
|
||||
if(rc > 0 && rc < sizeof(buf1)) {
|
||||
env = buf1;
|
||||
variable = buf1;
|
||||
}
|
||||
if (do_expand && strchr(variable,'%')) {
|
||||
if(do_expand && strchr(variable,'%')) {
|
||||
/* buf2 == variable if not expanded */
|
||||
rc = ExpandEnvironmentStrings (variable, buf2, sizeof(buf2));
|
||||
if (rc > 0 && rc < sizeof(buf2) &&
|
||||
!strchr(buf2,'%')) /* no vars still unexpanded */
|
||||
if(rc > 0 && rc < sizeof(buf2) &&
|
||||
!strchr(buf2,'%')) /* no vars still unexpanded */
|
||||
env = buf2;
|
||||
}
|
||||
#else
|
||||
(void)do_expand;
|
||||
#ifdef VMS
|
||||
env = getenv(variable);
|
||||
if (env && strcmp("HOME",variable) == 0) {
|
||||
env = decc_translate_vms(env);
|
||||
}
|
||||
#else
|
||||
/* no length control */
|
||||
env = getenv(variable);
|
||||
#endif
|
||||
#endif
|
||||
return (env && env[0])?strdup(env):NULL;
|
||||
return (env && env[0]) ? strdup(env) : NULL;
|
||||
}
|
||||
|
||||
/* return the home directory of the current user as an allocated string */
|
||||
@@ -98,13 +76,9 @@ char *homedir(void)
|
||||
{
|
||||
struct passwd *pw = getpwuid(geteuid());
|
||||
|
||||
if (pw) {
|
||||
#ifdef VMS
|
||||
home = decc_translate_vms(pw->pw_dir);
|
||||
#else
|
||||
if(pw) {
|
||||
home = pw->pw_dir;
|
||||
#endif
|
||||
if (home && home[0])
|
||||
if(home && home[0])
|
||||
home = strdup(home);
|
||||
else
|
||||
home = NULL;
|
||||
+10
-10
@@ -1,18 +1,18 @@
|
||||
#ifndef __HOMEDIR_H
|
||||
#define __HOMEDIR_H
|
||||
#ifndef HEADER_CURL_TOOL_HOMEDIR_H
|
||||
#define HEADER_CURL_TOOL_HOMEDIR_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
@@ -20,9 +20,9 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: homedir.h,v 1.2 2004/01/07 09:19:36 bagder Exp $
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
char *homedir(void);
|
||||
|
||||
#endif
|
||||
#endif /* HEADER_CURL_TOOL_HOMEDIR_H */
|
||||
File diff suppressed because it is too large
Load Diff
+12
-10
@@ -1,18 +1,18 @@
|
||||
#ifndef __HUGEHELP_H
|
||||
#define __HUGEHELP_H
|
||||
#ifndef HEADER_CURL_TOOL_HUGEHELP_H
|
||||
#define HEADER_CURL_TOOL_HUGEHELP_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
@@ -20,7 +20,9 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: hugehelp.h,v 1.1 2004/01/29 13:48:36 bagder Exp $
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
void hugehelp(void);
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_HUGEHELP_H */
|
||||
@@ -0,0 +1,100 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "rawstr.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_libinfo.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/* global variable definitions, for libcurl run-time info */
|
||||
|
||||
curl_version_info_data *curlinfo = NULL;
|
||||
long built_in_protos = 0;
|
||||
|
||||
/*
|
||||
* libcurl_info_init: retrieves run-time information about libcurl,
|
||||
* setting a global pointer 'curlinfo' to libcurl's run-time info
|
||||
* struct, and a global bit pattern 'built_in_protos' composed of
|
||||
* CURLPROTO_* bits indicating which protocols are actually built
|
||||
* into library being used.
|
||||
*/
|
||||
|
||||
CURLcode get_libcurl_info(void)
|
||||
{
|
||||
static struct proto_name_pattern {
|
||||
const char *proto_name;
|
||||
long proto_pattern;
|
||||
} const possibly_built_in[] = {
|
||||
{ "dict", CURLPROTO_DICT },
|
||||
{ "file", CURLPROTO_FILE },
|
||||
{ "ftp", CURLPROTO_FTP },
|
||||
{ "ftps", CURLPROTO_FTPS },
|
||||
{ "gopher", CURLPROTO_GOPHER },
|
||||
{ "http", CURLPROTO_HTTP },
|
||||
{ "https", CURLPROTO_HTTPS },
|
||||
{ "imap", CURLPROTO_IMAP },
|
||||
{ "imaps", CURLPROTO_IMAPS },
|
||||
{ "ldap", CURLPROTO_LDAP },
|
||||
{ "ldaps", CURLPROTO_LDAPS },
|
||||
{ "pop3", CURLPROTO_POP3 },
|
||||
{ "pop3s", CURLPROTO_POP3S },
|
||||
{ "rtmp", CURLPROTO_RTMP },
|
||||
{ "rtsp", CURLPROTO_RTSP },
|
||||
{ "scp", CURLPROTO_SCP },
|
||||
{ "sftp", CURLPROTO_SFTP },
|
||||
{ "smtp", CURLPROTO_SMTP },
|
||||
{ "smtps", CURLPROTO_SMTPS },
|
||||
{ "telnet", CURLPROTO_TELNET },
|
||||
{ "tftp", CURLPROTO_TFTP },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
struct proto_name_pattern const *p;
|
||||
const char *const *proto;
|
||||
|
||||
/* Pointer to libcurl's run-time version information */
|
||||
curlinfo = curl_version_info(CURLVERSION_NOW);
|
||||
if(!curlinfo)
|
||||
return CURLE_FAILED_INIT;
|
||||
|
||||
/* Build CURLPROTO_* bit pattern with libcurl's built-in protocols */
|
||||
built_in_protos = 0;
|
||||
if(curlinfo->protocols) {
|
||||
for(proto = curlinfo->protocols; *proto; proto++) {
|
||||
for(p = possibly_built_in; p->proto_name; p++) {
|
||||
if(curlx_raw_equal(*proto, p->proto_name)) {
|
||||
built_in_protos |= p->proto_pattern;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef HEADER_CURL_TOOL_LIBINFO_H
|
||||
#define HEADER_CURL_TOOL_LIBINFO_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/* global variable declarations, for libcurl run-time info */
|
||||
|
||||
extern curl_version_info_data *curlinfo;
|
||||
extern long built_in_protos;
|
||||
|
||||
CURLcode get_libcurl_info(void);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_LIBINFO_H */
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_convert.h"
|
||||
#include "tool_operate.h"
|
||||
#include "tool_panykey.h"
|
||||
#include "tool_vms.h"
|
||||
#include "tool_main.h"
|
||||
|
||||
/*
|
||||
* This is low-level hard-hacking memory leak tracking and similar. Using
|
||||
* the library level code from this client-side is ugly, but we do this
|
||||
* anyway for convenience.
|
||||
*/
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#ifdef __VMS
|
||||
/*
|
||||
* vms_show is a global variable, used in main() as parameter for
|
||||
* function vms_special_exit() to allow proper curl tool exiting.
|
||||
* Its value may be set in other tool_*.c source files thanks to
|
||||
* forward declaration present in tool_vms.h
|
||||
*/
|
||||
static int vms_show = 0;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ensure that file descriptors 0, 1 and 2 (stdin, stdout, stderr) are
|
||||
* open before starting to run. Otherwise, the first three network
|
||||
* sockets opened by curl could be used for input sources, downloaded data
|
||||
* or error logs as they will effectively be stdin, stdout and/or stderr.
|
||||
*/
|
||||
static void main_checkfds(void)
|
||||
{
|
||||
#ifdef HAVE_PIPE
|
||||
int fd[2] = { STDIN_FILENO, STDIN_FILENO };
|
||||
while(fd[0] == STDIN_FILENO ||
|
||||
fd[0] == STDOUT_FILENO ||
|
||||
fd[0] == STDERR_FILENO ||
|
||||
fd[1] == STDIN_FILENO ||
|
||||
fd[1] == STDOUT_FILENO ||
|
||||
fd[1] == STDERR_FILENO)
|
||||
if(pipe(fd) < 0)
|
||||
return; /* Out of handles. This isn't really a big problem now, but
|
||||
will be when we try to create a socket later. */
|
||||
close(fd[0]);
|
||||
close(fd[1]);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
** curl tool main function.
|
||||
*/
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int res;
|
||||
struct Configurable config;
|
||||
|
||||
memset(&config, 0, sizeof(struct Configurable));
|
||||
|
||||
config.errors = stderr; /* default errors to stderr */
|
||||
|
||||
main_checkfds();
|
||||
|
||||
#if defined(HAVE_SIGNAL) && defined(SIGPIPE)
|
||||
(void)signal(SIGPIPE, SIG_IGN);
|
||||
#endif
|
||||
|
||||
res = operate(&config, argc, argv);
|
||||
|
||||
#ifdef __SYMBIAN32__
|
||||
if(config.showerror)
|
||||
tool_pressanykey();
|
||||
#endif
|
||||
|
||||
free_config_fields(&config);
|
||||
|
||||
#ifdef __NOVELL_LIBC__
|
||||
if(getenv("_IN_NETWARE_BASH_") == NULL)
|
||||
tool_pressanykey();
|
||||
#endif
|
||||
|
||||
#ifdef __VMS
|
||||
vms_special_exit(res, vms_show);
|
||||
#else
|
||||
return res;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#ifndef HEADER_CURL_TOOL_MAIN_H
|
||||
#define HEADER_CURL_TOOL_MAIN_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define DEFAULT_MAXREDIRS 50L
|
||||
|
||||
#define RETRY_SLEEP_DEFAULT 1000L /* ms */
|
||||
#define RETRY_SLEEP_MAX 600000L /* ms == 10 minutes */
|
||||
|
||||
#ifndef STDIN_FILENO
|
||||
# define STDIN_FILENO fileno(stdin)
|
||||
#endif
|
||||
|
||||
#ifndef STDOUT_FILENO
|
||||
# define STDOUT_FILENO fileno(stdout)
|
||||
#endif
|
||||
|
||||
#ifndef STDERR_FILENO
|
||||
# define STDERR_FILENO fileno(stderr)
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_MAIN_H */
|
||||
|
||||
@@ -0,0 +1,902 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef USE_METALINK
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#ifdef USE_SSLEAY
|
||||
# ifdef USE_OPENSSL
|
||||
# include <openssl/md5.h>
|
||||
# include <openssl/sha.h>
|
||||
# else
|
||||
# include <md5.h>
|
||||
# include <sha.h>
|
||||
# endif
|
||||
#elif defined(USE_GNUTLS_NETTLE)
|
||||
# include <nettle/md5.h>
|
||||
# include <nettle/sha.h>
|
||||
# define MD5_CTX struct md5_ctx
|
||||
# define SHA_CTX struct sha1_ctx
|
||||
# define SHA256_CTX struct sha256_ctx
|
||||
#elif defined(USE_GNUTLS)
|
||||
# include <gcrypt.h>
|
||||
# define MD5_CTX gcry_md_hd_t
|
||||
# define SHA_CTX gcry_md_hd_t
|
||||
# define SHA256_CTX gcry_md_hd_t
|
||||
#elif defined(USE_NSS)
|
||||
# include <nss.h>
|
||||
# include <pk11pub.h>
|
||||
# define MD5_CTX void *
|
||||
# define SHA_CTX void *
|
||||
# define SHA256_CTX void *
|
||||
# ifdef HAVE_NSS_INITCONTEXT
|
||||
static NSSInitContext *nss_context;
|
||||
# endif
|
||||
#elif defined(__MAC_10_4) || defined(__IPHONE_5_0)
|
||||
/* For Apple operating systems: CommonCrypto has the functions we need.
|
||||
The library's headers are even backward-compatible with OpenSSL's
|
||||
headers as long as we define COMMON_DIGEST_FOR_OPENSSL first.
|
||||
|
||||
These functions are available on Tiger and later, as well as iOS 5.0
|
||||
and later. If you're building for an older cat, well, sorry. */
|
||||
# define COMMON_DIGEST_FOR_OPENSSL
|
||||
# include <CommonCrypto/CommonDigest.h>
|
||||
#elif defined(_WIN32)
|
||||
/* For Windows: If no other crypto library is provided, we fallback
|
||||
to the hash functions provided within the Microsoft Windows CryptoAPI */
|
||||
# include <wincrypt.h>
|
||||
/* Custom structure in order to store the required provider and hash handle */
|
||||
struct win32_crypto_hash {
|
||||
HCRYPTPROV hCryptProv;
|
||||
HCRYPTHASH hHash;
|
||||
};
|
||||
/* Custom Microsoft AES Cryptographic Provider defines required for MinGW */
|
||||
# ifndef ALG_SID_SHA_256
|
||||
# define ALG_SID_SHA_256 12
|
||||
# endif
|
||||
# ifndef CALG_SHA_256
|
||||
# define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
|
||||
# endif
|
||||
# define MD5_CTX struct win32_crypto_hash
|
||||
# define SHA_CTX struct win32_crypto_hash
|
||||
# define SHA256_CTX struct win32_crypto_hash
|
||||
#else
|
||||
# error "Can't compile METALINK support without a crypto library."
|
||||
#endif
|
||||
|
||||
#include "rawstr.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_getparam.h"
|
||||
#include "tool_paramhlp.h"
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_metalink.h"
|
||||
#include "tool_msgs.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/* Copied from tool_getparam.c */
|
||||
#define GetStr(str,val) do { \
|
||||
if(*(str)) { \
|
||||
free(*(str)); \
|
||||
*(str) = NULL; \
|
||||
} \
|
||||
if((val)) \
|
||||
*(str) = strdup((val)); \
|
||||
if(!(val)) \
|
||||
return PARAM_NO_MEM; \
|
||||
} WHILE_FALSE
|
||||
|
||||
#ifdef USE_GNUTLS_NETTLE
|
||||
|
||||
static int MD5_Init(MD5_CTX *ctx)
|
||||
{
|
||||
md5_init(ctx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void MD5_Update(MD5_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
md5_update(ctx, inputLen, input);
|
||||
}
|
||||
|
||||
static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
|
||||
{
|
||||
md5_digest(ctx, 16, digest);
|
||||
}
|
||||
|
||||
static int SHA1_Init(SHA_CTX *ctx)
|
||||
{
|
||||
sha1_init(ctx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void SHA1_Update(SHA_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
sha1_update(ctx, inputLen, input);
|
||||
}
|
||||
|
||||
static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
|
||||
{
|
||||
sha1_digest(ctx, 20, digest);
|
||||
}
|
||||
|
||||
static int SHA256_Init(SHA256_CTX *ctx)
|
||||
{
|
||||
sha256_init(ctx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void SHA256_Update(SHA256_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
sha256_update(ctx, inputLen, input);
|
||||
}
|
||||
|
||||
static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
|
||||
{
|
||||
sha256_digest(ctx, 32, digest);
|
||||
}
|
||||
|
||||
#elif defined(USE_GNUTLS)
|
||||
|
||||
static int MD5_Init(MD5_CTX *ctx)
|
||||
{
|
||||
gcry_md_open(ctx, GCRY_MD_MD5, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void MD5_Update(MD5_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
gcry_md_write(*ctx, input, inputLen);
|
||||
}
|
||||
|
||||
static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
|
||||
{
|
||||
memcpy(digest, gcry_md_read(*ctx, 0), 16);
|
||||
gcry_md_close(*ctx);
|
||||
}
|
||||
|
||||
static int SHA1_Init(SHA_CTX *ctx)
|
||||
{
|
||||
gcry_md_open(ctx, GCRY_MD_SHA1, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void SHA1_Update(SHA_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
gcry_md_write(*ctx, input, inputLen);
|
||||
}
|
||||
|
||||
static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
|
||||
{
|
||||
memcpy(digest, gcry_md_read(*ctx, 0), 20);
|
||||
gcry_md_close(*ctx);
|
||||
}
|
||||
|
||||
static int SHA256_Init(SHA256_CTX *ctx)
|
||||
{
|
||||
gcry_md_open(ctx, GCRY_MD_SHA256, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void SHA256_Update(SHA256_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
gcry_md_write(*ctx, input, inputLen);
|
||||
}
|
||||
|
||||
static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
|
||||
{
|
||||
memcpy(digest, gcry_md_read(*ctx, 0), 32);
|
||||
gcry_md_close(*ctx);
|
||||
}
|
||||
|
||||
#elif defined(USE_NSS)
|
||||
|
||||
static int nss_hash_init(void **pctx, SECOidTag hash_alg)
|
||||
{
|
||||
PK11Context *ctx;
|
||||
|
||||
/* we have to initialize NSS if not initialized alraedy */
|
||||
#ifdef HAVE_NSS_INITCONTEXT
|
||||
if(!NSS_IsInitialized() && !nss_context) {
|
||||
static NSSInitParameters params;
|
||||
params.length = sizeof params;
|
||||
nss_context = NSS_InitContext("", "", "", "", ¶ms, NSS_INIT_READONLY
|
||||
| NSS_INIT_NOCERTDB | NSS_INIT_NOMODDB | NSS_INIT_FORCEOPEN
|
||||
| NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD);
|
||||
}
|
||||
#endif
|
||||
|
||||
ctx = PK11_CreateDigestContext(hash_alg);
|
||||
if(!ctx)
|
||||
return /* failure */ 0;
|
||||
|
||||
if(PK11_DigestBegin(ctx) != SECSuccess) {
|
||||
PK11_DestroyContext(ctx, PR_TRUE);
|
||||
return /* failure */ 0;
|
||||
}
|
||||
|
||||
*pctx = ctx;
|
||||
return /* success */ 1;
|
||||
}
|
||||
|
||||
static void nss_hash_final(void **pctx, unsigned char *out, unsigned int len)
|
||||
{
|
||||
PK11Context *ctx = *pctx;
|
||||
unsigned int outlen;
|
||||
PK11_DigestFinal(ctx, out, &outlen, len);
|
||||
PK11_DestroyContext(ctx, PR_TRUE);
|
||||
}
|
||||
|
||||
static int MD5_Init(MD5_CTX *pctx)
|
||||
{
|
||||
return nss_hash_init(pctx, SEC_OID_MD5);
|
||||
}
|
||||
|
||||
static void MD5_Update(MD5_CTX *pctx,
|
||||
const unsigned char *input,
|
||||
unsigned int input_len)
|
||||
{
|
||||
PK11_DigestOp(*pctx, input, input_len);
|
||||
}
|
||||
|
||||
static void MD5_Final(unsigned char digest[16], MD5_CTX *pctx)
|
||||
{
|
||||
nss_hash_final(pctx, digest, 16);
|
||||
}
|
||||
|
||||
static int SHA1_Init(SHA_CTX *pctx)
|
||||
{
|
||||
return nss_hash_init(pctx, SEC_OID_SHA1);
|
||||
}
|
||||
|
||||
static void SHA1_Update(SHA_CTX *pctx,
|
||||
const unsigned char *input,
|
||||
unsigned int input_len)
|
||||
{
|
||||
PK11_DigestOp(*pctx, input, input_len);
|
||||
}
|
||||
|
||||
static void SHA1_Final(unsigned char digest[20], SHA_CTX *pctx)
|
||||
{
|
||||
nss_hash_final(pctx, digest, 20);
|
||||
}
|
||||
|
||||
static int SHA256_Init(SHA256_CTX *pctx)
|
||||
{
|
||||
return nss_hash_init(pctx, SEC_OID_SHA256);
|
||||
}
|
||||
|
||||
static void SHA256_Update(SHA256_CTX *pctx,
|
||||
const unsigned char *input,
|
||||
unsigned int input_len)
|
||||
{
|
||||
PK11_DigestOp(*pctx, input, input_len);
|
||||
}
|
||||
|
||||
static void SHA256_Final(unsigned char digest[32], SHA256_CTX *pctx)
|
||||
{
|
||||
nss_hash_final(pctx, digest, 32);
|
||||
}
|
||||
|
||||
#elif defined(_WIN32) && !defined(USE_SSLEAY)
|
||||
|
||||
static void win32_crypto_final(struct win32_crypto_hash *ctx,
|
||||
unsigned char *digest,
|
||||
unsigned int digestLen)
|
||||
{
|
||||
unsigned long length;
|
||||
CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
|
||||
if(length == digestLen)
|
||||
CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
|
||||
if(ctx->hHash)
|
||||
CryptDestroyHash(ctx->hHash);
|
||||
if(ctx->hCryptProv)
|
||||
CryptReleaseContext(ctx->hCryptProv, 0);
|
||||
}
|
||||
|
||||
static int MD5_Init(MD5_CTX *ctx)
|
||||
{
|
||||
if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL,
|
||||
PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
|
||||
CryptCreateHash(ctx->hCryptProv, CALG_MD5, 0, 0, &ctx->hHash);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void MD5_Update(MD5_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
|
||||
}
|
||||
|
||||
static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
|
||||
{
|
||||
win32_crypto_final(ctx, digest, 16);
|
||||
}
|
||||
|
||||
static int SHA1_Init(SHA_CTX *ctx)
|
||||
{
|
||||
if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL,
|
||||
PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
|
||||
CryptCreateHash(ctx->hCryptProv, CALG_SHA1, 0, 0, &ctx->hHash);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void SHA1_Update(SHA_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
|
||||
}
|
||||
|
||||
static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
|
||||
{
|
||||
win32_crypto_final(ctx, digest, 20);
|
||||
}
|
||||
|
||||
static int SHA256_Init(SHA256_CTX *ctx)
|
||||
{
|
||||
if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL,
|
||||
PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
|
||||
CryptCreateHash(ctx->hCryptProv, CALG_SHA_256, 0, 0, &ctx->hHash);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void SHA256_Update(SHA256_CTX *ctx,
|
||||
const unsigned char *input,
|
||||
unsigned int inputLen)
|
||||
{
|
||||
CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
|
||||
}
|
||||
|
||||
static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
|
||||
{
|
||||
win32_crypto_final(ctx, digest, 32);
|
||||
}
|
||||
|
||||
#endif /* CRYPTO LIBS */
|
||||
|
||||
const digest_params MD5_DIGEST_PARAMS[] = {
|
||||
{
|
||||
(Curl_digest_init_func) MD5_Init,
|
||||
(Curl_digest_update_func) MD5_Update,
|
||||
(Curl_digest_final_func) MD5_Final,
|
||||
sizeof(MD5_CTX),
|
||||
16
|
||||
}
|
||||
};
|
||||
|
||||
const digest_params SHA1_DIGEST_PARAMS[] = {
|
||||
{
|
||||
(Curl_digest_init_func) SHA1_Init,
|
||||
(Curl_digest_update_func) SHA1_Update,
|
||||
(Curl_digest_final_func) SHA1_Final,
|
||||
sizeof(SHA_CTX),
|
||||
20
|
||||
}
|
||||
};
|
||||
|
||||
const digest_params SHA256_DIGEST_PARAMS[] = {
|
||||
{
|
||||
(Curl_digest_init_func) SHA256_Init,
|
||||
(Curl_digest_update_func) SHA256_Update,
|
||||
(Curl_digest_final_func) SHA256_Final,
|
||||
sizeof(SHA256_CTX),
|
||||
32
|
||||
}
|
||||
};
|
||||
|
||||
static const metalink_digest_def SHA256_DIGEST_DEF[] = {
|
||||
{"sha-256", SHA256_DIGEST_PARAMS}
|
||||
};
|
||||
|
||||
static const metalink_digest_def SHA1_DIGEST_DEF[] = {
|
||||
{"sha-1", SHA1_DIGEST_PARAMS}
|
||||
};
|
||||
|
||||
static const metalink_digest_def MD5_DIGEST_DEF[] = {
|
||||
{"md5", MD5_DIGEST_PARAMS}
|
||||
};
|
||||
|
||||
/*
|
||||
* The alias of supported hash functions in the order by preference
|
||||
* (basically stronger hash comes first). We included "sha-256" and
|
||||
* "sha256". The former is the name defined in the IANA registry named
|
||||
* "Hash Function Textual Names". The latter is widely (and
|
||||
* historically) used in Metalink version 3.
|
||||
*/
|
||||
static const metalink_digest_alias digest_aliases[] = {
|
||||
{"sha-256", SHA256_DIGEST_DEF},
|
||||
{"sha256", SHA256_DIGEST_DEF},
|
||||
{"sha-1", SHA1_DIGEST_DEF},
|
||||
{"sha1", SHA1_DIGEST_DEF},
|
||||
{"md5", MD5_DIGEST_DEF},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
digest_context *Curl_digest_init(const digest_params *dparams)
|
||||
{
|
||||
digest_context *ctxt;
|
||||
|
||||
/* Create digest context */
|
||||
ctxt = malloc(sizeof *ctxt);
|
||||
|
||||
if(!ctxt)
|
||||
return ctxt;
|
||||
|
||||
ctxt->digest_hashctx = malloc(dparams->digest_ctxtsize);
|
||||
|
||||
if(!ctxt->digest_hashctx) {
|
||||
free(ctxt);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ctxt->digest_hash = dparams;
|
||||
|
||||
if(dparams->digest_init(ctxt->digest_hashctx) != 1) {
|
||||
free(ctxt);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ctxt;
|
||||
}
|
||||
|
||||
int Curl_digest_update(digest_context *context,
|
||||
const unsigned char *data,
|
||||
unsigned int len)
|
||||
{
|
||||
(*context->digest_hash->digest_update)(context->digest_hashctx, data, len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Curl_digest_final(digest_context *context, unsigned char *result)
|
||||
{
|
||||
(*context->digest_hash->digest_final)(result, context->digest_hashctx);
|
||||
|
||||
free(context->digest_hashctx);
|
||||
free(context);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned char hex_to_uint(const char *s)
|
||||
{
|
||||
int v[2];
|
||||
int i;
|
||||
for(i = 0; i < 2; ++i) {
|
||||
v[i] = Curl_raw_toupper(s[i]);
|
||||
if('0' <= v[i] && v[i] <= '9') {
|
||||
v[i] -= '0';
|
||||
}
|
||||
else if('A' <= v[i] && v[i] <= 'Z') {
|
||||
v[i] -= 'A'-10;
|
||||
}
|
||||
}
|
||||
return (unsigned char)((v[0] << 4) | v[1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check checksum of file denoted by filename. The expected hash value
|
||||
* is given in hex_hash which is hex-encoded string.
|
||||
*
|
||||
* This function returns 1 if it succeeds or one of the following
|
||||
* integers:
|
||||
*
|
||||
* 0:
|
||||
* Checksum didn't match.
|
||||
* -1:
|
||||
* Could not open file; or could not read data from file.
|
||||
* -2:
|
||||
* Hash algorithm not available.
|
||||
*/
|
||||
static int check_hash(const char *filename,
|
||||
const metalink_digest_def *digest_def,
|
||||
const unsigned char *digest, FILE *error)
|
||||
{
|
||||
unsigned char *result;
|
||||
digest_context *dctx;
|
||||
int check_ok, flags, fd;
|
||||
|
||||
flags = O_RDONLY;
|
||||
#ifdef O_BINARY
|
||||
/* O_BINARY is required in order to avoid binary EOF in text mode */
|
||||
flags |= O_BINARY;
|
||||
#endif
|
||||
|
||||
fd = open(filename, flags);
|
||||
if(fd == -1) {
|
||||
fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename,
|
||||
digest_def->hash_name, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
dctx = Curl_digest_init(digest_def->dparams);
|
||||
if(!dctx) {
|
||||
fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename,
|
||||
digest_def->hash_name, "failed to initialize hash algorithm");
|
||||
close(fd);
|
||||
return -2;
|
||||
}
|
||||
|
||||
result = malloc(digest_def->dparams->digest_resultlen);
|
||||
while(1) {
|
||||
unsigned char buf[4096];
|
||||
ssize_t len = read(fd, buf, sizeof(buf));
|
||||
if(len == 0) {
|
||||
break;
|
||||
}
|
||||
else if(len == -1) {
|
||||
fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename,
|
||||
digest_def->hash_name, strerror(errno));
|
||||
Curl_digest_final(dctx, result);
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
Curl_digest_update(dctx, buf, (unsigned int)len);
|
||||
}
|
||||
Curl_digest_final(dctx, result);
|
||||
check_ok = memcmp(result, digest,
|
||||
digest_def->dparams->digest_resultlen) == 0;
|
||||
/* sha*sum style verdict output */
|
||||
if(check_ok)
|
||||
fprintf(error, "Metalink: validating (%s) [%s] OK\n", filename,
|
||||
digest_def->hash_name);
|
||||
else
|
||||
fprintf(error, "Metalink: validating (%s) [%s] FAILED (digest mismatch)\n",
|
||||
filename, digest_def->hash_name);
|
||||
|
||||
free(result);
|
||||
close(fd);
|
||||
return check_ok;
|
||||
}
|
||||
|
||||
int metalink_check_hash(struct Configurable *config,
|
||||
metalinkfile *mlfile,
|
||||
const char *filename)
|
||||
{
|
||||
int rv;
|
||||
fprintf(config->errors, "Metalink: validating (%s)...\n", filename);
|
||||
if(mlfile->checksum == NULL) {
|
||||
fprintf(config->errors,
|
||||
"Metalink: validating (%s) FAILED (digest missing)\n",
|
||||
filename);
|
||||
return -2;
|
||||
}
|
||||
rv = check_hash(filename, mlfile->checksum->digest_def,
|
||||
mlfile->checksum->digest, config->errors);
|
||||
return rv;
|
||||
}
|
||||
|
||||
static metalink_checksum *new_metalink_checksum_from_hex_digest
|
||||
(const metalink_digest_def *digest_def, const char *hex_digest)
|
||||
{
|
||||
metalink_checksum *chksum;
|
||||
unsigned char *digest;
|
||||
size_t i;
|
||||
size_t len = strlen(hex_digest);
|
||||
digest = malloc(len/2);
|
||||
for(i = 0; i < len; i += 2) {
|
||||
digest[i/2] = hex_to_uint(hex_digest+i);
|
||||
}
|
||||
chksum = malloc(sizeof(metalink_checksum));
|
||||
chksum->digest_def = digest_def;
|
||||
chksum->digest = digest;
|
||||
return chksum;
|
||||
}
|
||||
|
||||
static metalink_resource *new_metalink_resource(const char *url)
|
||||
{
|
||||
metalink_resource *res;
|
||||
res = malloc(sizeof(metalink_resource));
|
||||
res->next = NULL;
|
||||
res->url = strdup(url);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Returns nonzero if hex_digest is properly formatted; that is each
|
||||
letter is in [0-9A-Za-z] and the length of the string equals to the
|
||||
result length of digest * 2. */
|
||||
static int check_hex_digest(const char *hex_digest,
|
||||
const metalink_digest_def *digest_def)
|
||||
{
|
||||
size_t i;
|
||||
for(i = 0; hex_digest[i]; ++i) {
|
||||
char c = hex_digest[i];
|
||||
if(!(('0' <= c && c <= '9') || ('a' <= c && c <= 'z') ||
|
||||
('A' <= c && c <= 'Z'))) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return digest_def->dparams->digest_resultlen * 2 == i;
|
||||
}
|
||||
|
||||
static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo)
|
||||
{
|
||||
metalinkfile *f;
|
||||
f = (metalinkfile*)malloc(sizeof(metalinkfile));
|
||||
f->next = NULL;
|
||||
f->filename = strdup(fileinfo->name);
|
||||
f->checksum = NULL;
|
||||
f->resource = NULL;
|
||||
if(fileinfo->checksums) {
|
||||
const metalink_digest_alias *digest_alias;
|
||||
for(digest_alias = digest_aliases; digest_alias->alias_name;
|
||||
++digest_alias) {
|
||||
metalink_checksum_t **p;
|
||||
for(p = fileinfo->checksums; *p; ++p) {
|
||||
if(Curl_raw_equal(digest_alias->alias_name, (*p)->type) &&
|
||||
check_hex_digest((*p)->hash, digest_alias->digest_def)) {
|
||||
f->checksum =
|
||||
new_metalink_checksum_from_hex_digest(digest_alias->digest_def,
|
||||
(*p)->hash);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(f->checksum) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(fileinfo->resources) {
|
||||
metalink_resource_t **p;
|
||||
metalink_resource root, *tail;
|
||||
root.next = NULL;
|
||||
tail = &root;
|
||||
for(p = fileinfo->resources; *p; ++p) {
|
||||
metalink_resource *res;
|
||||
/* Filter by type if it is non-NULL. In Metalink v3, type
|
||||
includes the type of the resource. In curl, we are only
|
||||
interested in HTTP, HTTPS and FTP. In addition to them,
|
||||
Metalink v3 file may contain bittorrent type URL, which
|
||||
points to the BitTorrent metainfo file. We ignore it here.
|
||||
In Metalink v4, type was deprecated and all
|
||||
fileinfo->resources point to the target file. BitTorrent
|
||||
metainfo file URL may be appeared in fileinfo->metaurls.
|
||||
*/
|
||||
if((*p)->type == NULL ||
|
||||
Curl_raw_equal((*p)->type, "http") ||
|
||||
Curl_raw_equal((*p)->type, "https") ||
|
||||
Curl_raw_equal((*p)->type, "ftp") ||
|
||||
Curl_raw_equal((*p)->type, "ftps")) {
|
||||
res = new_metalink_resource((*p)->url);
|
||||
tail->next = res;
|
||||
tail = res;
|
||||
}
|
||||
}
|
||||
f->resource = root.next;
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
int parse_metalink(struct Configurable *config, struct OutStruct *outs,
|
||||
const char *metalink_url)
|
||||
{
|
||||
metalink_error_t r;
|
||||
metalink_t* metalink;
|
||||
metalink_file_t **files;
|
||||
bool warnings = FALSE;
|
||||
|
||||
/* metlaink_parse_final deletes outs->metalink_parser */
|
||||
r = metalink_parse_final(outs->metalink_parser, NULL, 0, &metalink);
|
||||
outs->metalink_parser = NULL;
|
||||
if(r != 0) {
|
||||
return -1;
|
||||
}
|
||||
if(metalink->files == NULL) {
|
||||
fprintf(config->errors, "Metalink: parsing (%s) WARNING "
|
||||
"(missing or invalid file name)\n",
|
||||
metalink_url);
|
||||
metalink_delete(metalink);
|
||||
return -1;
|
||||
}
|
||||
for(files = metalink->files; *files; ++files) {
|
||||
struct getout *url;
|
||||
/* Skip an entry which has no resource. */
|
||||
if(!(*files)->resources) {
|
||||
fprintf(config->errors, "Metalink: parsing (%s) WARNING "
|
||||
"(missing or invalid resource)\n",
|
||||
metalink_url, (*files)->name);
|
||||
continue;
|
||||
}
|
||||
if(config->url_get ||
|
||||
((config->url_get = config->url_list) != NULL)) {
|
||||
/* there's a node here, if it already is filled-in continue to
|
||||
find an "empty" node */
|
||||
while(config->url_get && (config->url_get->flags & GETOUT_URL))
|
||||
config->url_get = config->url_get->next;
|
||||
}
|
||||
|
||||
/* now there might or might not be an available node to fill in! */
|
||||
|
||||
if(config->url_get)
|
||||
/* existing node */
|
||||
url = config->url_get;
|
||||
else
|
||||
/* there was no free node, create one! */
|
||||
url = new_getout(config);
|
||||
|
||||
if(url) {
|
||||
metalinkfile *mlfile;
|
||||
mlfile = new_metalinkfile(*files);
|
||||
if(!mlfile->checksum) {
|
||||
warnings = TRUE;
|
||||
fprintf(config->errors, "Metalink: parsing (%s) WARNING "
|
||||
"(digest missing)\n",
|
||||
metalink_url);
|
||||
}
|
||||
/* Set name as url */
|
||||
GetStr(&url->url, mlfile->filename);
|
||||
|
||||
/* set flag metalink here */
|
||||
url->flags |= GETOUT_URL | GETOUT_METALINK;
|
||||
|
||||
if(config->metalinkfile_list) {
|
||||
config->metalinkfile_last->next = mlfile;
|
||||
config->metalinkfile_last = mlfile;
|
||||
}
|
||||
else {
|
||||
config->metalinkfile_list = config->metalinkfile_last = mlfile;
|
||||
}
|
||||
}
|
||||
}
|
||||
metalink_delete(metalink);
|
||||
return (warnings) ? -2 : 0;
|
||||
}
|
||||
|
||||
size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
|
||||
void *userdata)
|
||||
{
|
||||
struct OutStruct *outs = userdata;
|
||||
struct Configurable *config = outs->config;
|
||||
int rv;
|
||||
|
||||
/*
|
||||
* Once that libcurl has called back tool_write_cb() the returned value
|
||||
* is checked against the amount that was intended to be written, if
|
||||
* it does not match then it fails with CURLE_WRITE_ERROR. So at this
|
||||
* point returning a value different from sz*nmemb indicates failure.
|
||||
*/
|
||||
const size_t failure = (sz * nmemb) ? 0 : 1;
|
||||
|
||||
if(!config)
|
||||
return failure;
|
||||
|
||||
rv = metalink_parse_update(outs->metalink_parser, buffer, sz *nmemb);
|
||||
if(rv == 0)
|
||||
return sz * nmemb;
|
||||
else {
|
||||
fprintf(config->errors, "Metalink: parsing FAILED\n");
|
||||
return failure;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns nonzero if content_type includes mediatype.
|
||||
*/
|
||||
static int check_content_type(const char *content_type, const char *media_type)
|
||||
{
|
||||
const char *ptr = content_type;
|
||||
size_t media_type_len = strlen(media_type);
|
||||
for(; *ptr && (*ptr == ' ' || *ptr == '\t'); ++ptr);
|
||||
if(!*ptr) {
|
||||
return 0;
|
||||
}
|
||||
return Curl_raw_nequal(ptr, media_type, media_type_len) &&
|
||||
(*(ptr+media_type_len) == '\0' || *(ptr+media_type_len) == ' ' ||
|
||||
*(ptr+media_type_len) == '\t' || *(ptr+media_type_len) == ';');
|
||||
}
|
||||
|
||||
int check_metalink_content_type(const char *content_type)
|
||||
{
|
||||
return check_content_type(content_type, "application/metalink+xml");
|
||||
}
|
||||
|
||||
int count_next_metalink_resource(metalinkfile *mlfile)
|
||||
{
|
||||
int count = 0;
|
||||
metalink_resource *res;
|
||||
for(res = mlfile->resource; res; res = res->next, ++count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static void delete_metalink_checksum(metalink_checksum *chksum)
|
||||
{
|
||||
if(chksum == NULL) {
|
||||
return;
|
||||
}
|
||||
Curl_safefree(chksum->digest);
|
||||
Curl_safefree(chksum);
|
||||
}
|
||||
|
||||
static void delete_metalink_resource(metalink_resource *res)
|
||||
{
|
||||
if(res == NULL) {
|
||||
return;
|
||||
}
|
||||
Curl_safefree(res->url);
|
||||
Curl_safefree(res);
|
||||
}
|
||||
|
||||
static void delete_metalinkfile(metalinkfile *mlfile)
|
||||
{
|
||||
metalink_resource *res;
|
||||
if(mlfile == NULL) {
|
||||
return;
|
||||
}
|
||||
Curl_safefree(mlfile->filename);
|
||||
delete_metalink_checksum(mlfile->checksum);
|
||||
for(res = mlfile->resource; res;) {
|
||||
metalink_resource *next;
|
||||
next = res->next;
|
||||
delete_metalink_resource(res);
|
||||
res = next;
|
||||
}
|
||||
Curl_safefree(mlfile);
|
||||
}
|
||||
|
||||
void clean_metalink(struct Configurable *config)
|
||||
{
|
||||
while(config->metalinkfile_list) {
|
||||
metalinkfile *mlfile = config->metalinkfile_list;
|
||||
config->metalinkfile_list = config->metalinkfile_list->next;
|
||||
delete_metalinkfile(mlfile);
|
||||
}
|
||||
config->metalinkfile_last = 0;
|
||||
}
|
||||
|
||||
void metalink_cleanup(void)
|
||||
{
|
||||
#if defined(USE_NSS) && defined(HAVE_NSS_INITCONTEXT)
|
||||
if(nss_context) {
|
||||
NSS_ShutdownContext(nss_context);
|
||||
nss_context = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* USE_METALINK */
|
||||
@@ -0,0 +1,161 @@
|
||||
#ifndef HEADER_CURL_TOOL_METALINK_H
|
||||
#define HEADER_CURL_TOOL_METALINK_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/* returns 1 for success, 0 otherwise (we use OpenSSL *_Init fncs directly) */
|
||||
typedef int (* Curl_digest_init_func)(void *context);
|
||||
|
||||
typedef void (* Curl_digest_update_func)(void *context,
|
||||
const unsigned char *data,
|
||||
unsigned int len);
|
||||
typedef void (* Curl_digest_final_func)(unsigned char *result, void *context);
|
||||
|
||||
typedef struct {
|
||||
Curl_digest_init_func digest_init; /* Initialize context procedure */
|
||||
Curl_digest_update_func digest_update; /* Update context with data */
|
||||
Curl_digest_final_func digest_final; /* Get final result procedure */
|
||||
unsigned int digest_ctxtsize; /* Context structure size */
|
||||
unsigned int digest_resultlen; /* Result length (bytes) */
|
||||
} digest_params;
|
||||
|
||||
typedef struct {
|
||||
const digest_params *digest_hash; /* Hash function definition */
|
||||
void *digest_hashctx; /* Hash function context */
|
||||
} digest_context;
|
||||
|
||||
digest_context * Curl_digest_init(const digest_params *dparams);
|
||||
int Curl_digest_update(digest_context *context,
|
||||
const unsigned char *data,
|
||||
unsigned int len);
|
||||
int Curl_digest_final(digest_context *context, unsigned char *result);
|
||||
|
||||
typedef struct {
|
||||
const char *hash_name;
|
||||
const digest_params *dparams;
|
||||
} metalink_digest_def;
|
||||
|
||||
typedef struct {
|
||||
const char *alias_name;
|
||||
const metalink_digest_def *digest_def;
|
||||
} metalink_digest_alias;
|
||||
|
||||
typedef struct metalink_checksum {
|
||||
const metalink_digest_def *digest_def;
|
||||
/* raw digest value, not ascii hex digest */
|
||||
unsigned char *digest;
|
||||
} metalink_checksum;
|
||||
|
||||
typedef struct metalink_resource {
|
||||
struct metalink_resource *next;
|
||||
char *url;
|
||||
} metalink_resource;
|
||||
|
||||
typedef struct metalinkfile {
|
||||
struct metalinkfile *next;
|
||||
char *filename;
|
||||
metalink_checksum *checksum;
|
||||
metalink_resource *resource;
|
||||
} metalinkfile;
|
||||
|
||||
#ifdef USE_METALINK
|
||||
|
||||
/*
|
||||
* curl requires libmetalink 0.1.0 or newer
|
||||
*/
|
||||
#define CURL_REQ_LIBMETALINK_MAJOR 0
|
||||
#define CURL_REQ_LIBMETALINK_MINOR 1
|
||||
#define CURL_REQ_LIBMETALINK_PATCH 0
|
||||
|
||||
#define CURL_REQ_LIBMETALINK_VERS ((CURL_REQ_LIBMETALINK_MAJOR * 10000) + \
|
||||
(CURL_REQ_LIBMETALINK_MINOR * 100) + \
|
||||
CURL_REQ_LIBMETALINK_PATCH)
|
||||
|
||||
extern const digest_params MD5_DIGEST_PARAMS[1];
|
||||
extern const digest_params SHA1_DIGEST_PARAMS[1];
|
||||
extern const digest_params SHA256_DIGEST_PARAMS[1];
|
||||
|
||||
#include <metalink/metalink.h>
|
||||
|
||||
/*
|
||||
* Counts the resource in the metalinkfile.
|
||||
*/
|
||||
int count_next_metalink_resource(metalinkfile *mlfile);
|
||||
void clean_metalink(struct Configurable *config);
|
||||
|
||||
/*
|
||||
* Performs final parse operation and extracts information from
|
||||
* Metalink and creates metalinkfile structs.
|
||||
*
|
||||
* This function returns 0 if it succeeds without warnings, or one of
|
||||
* the following negative error codes:
|
||||
*
|
||||
* -1: Parsing failed; or no file is found
|
||||
* -2: Parsing succeeded with some warnings.
|
||||
*/
|
||||
int parse_metalink(struct Configurable *config, struct OutStruct *outs,
|
||||
const char *metalink_url);
|
||||
|
||||
/*
|
||||
* Callback function for CURLOPT_WRITEFUNCTION
|
||||
*/
|
||||
size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
|
||||
void *userdata);
|
||||
|
||||
/*
|
||||
* Returns nonzero if content_type includes "application/metalink+xml"
|
||||
* media-type. The check is done in case-insensitive manner.
|
||||
*/
|
||||
int check_metalink_content_type(const char *content_type);
|
||||
|
||||
/*
|
||||
* Check checksum of file denoted by filename.
|
||||
*
|
||||
* This function returns 1 if the checksum matches or one of the
|
||||
* following integers:
|
||||
*
|
||||
* 0:
|
||||
* Checksum didn't match.
|
||||
* -1:
|
||||
* Could not open file; or could not read data from file.
|
||||
* -2:
|
||||
* No checksum in Metalink supported, hash algorithm not available, or
|
||||
* Metalink does not contain checksum.
|
||||
*/
|
||||
int metalink_check_hash(struct Configurable *config,
|
||||
metalinkfile *mlfile,
|
||||
const char *filename);
|
||||
|
||||
/*
|
||||
* Release resources allocated at global scope.
|
||||
*/
|
||||
void metalink_cleanup(void);
|
||||
|
||||
#else /* USE_METALINK */
|
||||
|
||||
#define count_next_metalink_resource(x) 0
|
||||
#define clean_metalink(x) Curl_nop_stmt
|
||||
|
||||
#endif /* USE_METALINK */
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_METALINK_H */
|
||||
@@ -0,0 +1,127 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "tool_mfiles.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
static void AppendNode(struct multi_files **first,
|
||||
struct multi_files **last,
|
||||
struct multi_files *new)
|
||||
{
|
||||
DEBUGASSERT(((*first) && (*last)) || ((!*first) && (!*last)));
|
||||
|
||||
if(*last)
|
||||
(*last)->next = new;
|
||||
else
|
||||
*first = new;
|
||||
*last = new;
|
||||
}
|
||||
|
||||
/*
|
||||
* AddMultiFiles: Add a new list node possibly followed with a type_name.
|
||||
*
|
||||
* multi_first argument is the address of a pointer to the first element
|
||||
* of the multi_files linked list. A NULL pointer indicates empty list.
|
||||
*
|
||||
* multi_last argument is the address of a pointer to the last element
|
||||
* of the multi_files linked list. A NULL pointer indicates empty list.
|
||||
*
|
||||
* Pointers stored in multi_first and multi_last are modified while
|
||||
* function is executed. An out of memory condition free's the whole
|
||||
* list and returns with pointers stored in multi_first and multi_last
|
||||
* set to NULL and a NULL function result.
|
||||
*
|
||||
* Function returns same pointer as stored at multi_last.
|
||||
*/
|
||||
|
||||
struct multi_files *AddMultiFiles(const char *file_name,
|
||||
const char *type_name,
|
||||
const char *show_filename,
|
||||
struct multi_files **multi_first,
|
||||
struct multi_files **multi_last)
|
||||
{
|
||||
struct multi_files *multi;
|
||||
struct multi_files *multi_type;
|
||||
struct multi_files *multi_name;
|
||||
|
||||
multi = calloc(1, sizeof(struct multi_files));
|
||||
if(multi) {
|
||||
multi->form.option = CURLFORM_FILE;
|
||||
multi->form.value = file_name;
|
||||
AppendNode(multi_first, multi_last, multi);
|
||||
}
|
||||
else {
|
||||
FreeMultiInfo(multi_first, multi_last);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(type_name) {
|
||||
multi_type = calloc(1, sizeof(struct multi_files));
|
||||
if(multi_type) {
|
||||
multi_type->form.option = CURLFORM_CONTENTTYPE;
|
||||
multi_type->form.value = type_name;
|
||||
AppendNode(multi_first, multi_last, multi_type);
|
||||
}
|
||||
else {
|
||||
FreeMultiInfo(multi_first, multi_last);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if(show_filename) {
|
||||
multi_name = calloc(1, sizeof(struct multi_files));
|
||||
if(multi_name) {
|
||||
multi_name->form.option = CURLFORM_FILENAME;
|
||||
multi_name->form.value = show_filename;
|
||||
AppendNode(multi_first, multi_last, multi_name);
|
||||
}
|
||||
else {
|
||||
FreeMultiInfo(multi_first, multi_last);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return *multi_last;
|
||||
}
|
||||
|
||||
/*
|
||||
* FreeMultiInfo: Free the items of the list.
|
||||
*/
|
||||
|
||||
void FreeMultiInfo(struct multi_files **multi_first,
|
||||
struct multi_files **multi_last)
|
||||
{
|
||||
struct multi_files *next;
|
||||
struct multi_files *item = *multi_first;
|
||||
|
||||
while(item) {
|
||||
next = item->next;
|
||||
Curl_safefree(item);
|
||||
item = next;
|
||||
}
|
||||
*multi_first = NULL;
|
||||
if(multi_last)
|
||||
*multi_last = NULL;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
#ifndef HEADER_CURL_TOOL_MFILES_H
|
||||
#define HEADER_CURL_TOOL_MFILES_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/*
|
||||
* Structure for storing the information needed to build
|
||||
* a multiple files section.
|
||||
*/
|
||||
|
||||
struct multi_files {
|
||||
struct curl_forms form;
|
||||
struct multi_files *next;
|
||||
};
|
||||
|
||||
struct multi_files *AddMultiFiles(const char *file_name,
|
||||
const char *type_name,
|
||||
const char *show_filename,
|
||||
struct multi_files **multi_first,
|
||||
struct multi_files **multi_last);
|
||||
|
||||
void FreeMultiInfo(struct multi_files **multi_first,
|
||||
struct multi_files **multi_last);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_MFILES_H */
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_msgs.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#define WARN_PREFIX "Warning: "
|
||||
#define WARN_TEXTWIDTH (79 - (int)strlen(WARN_PREFIX))
|
||||
|
||||
/*
|
||||
* Emit warning formatted message on configured 'errors' stream unless
|
||||
* mute (--silent) was selected.
|
||||
*/
|
||||
|
||||
void warnf(struct Configurable *config, const char *fmt, ...)
|
||||
{
|
||||
if(!config->mute) {
|
||||
va_list ap;
|
||||
int len;
|
||||
char *ptr;
|
||||
char print_buffer[256];
|
||||
|
||||
va_start(ap, fmt);
|
||||
len = vsnprintf(print_buffer, sizeof(print_buffer), fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
ptr = print_buffer;
|
||||
while(len > 0) {
|
||||
fputs(WARN_PREFIX, config->errors);
|
||||
|
||||
if(len > (int)WARN_TEXTWIDTH) {
|
||||
int cut = WARN_TEXTWIDTH-1;
|
||||
|
||||
while(!ISSPACE(ptr[cut]) && cut) {
|
||||
cut--;
|
||||
}
|
||||
if(0 == cut)
|
||||
/* not a single cutting position was found, just cut it at the
|
||||
max text width then! */
|
||||
cut = WARN_TEXTWIDTH-1;
|
||||
|
||||
(void)fwrite(ptr, cut + 1, 1, config->errors);
|
||||
fputs("\n", config->errors);
|
||||
ptr += cut+1; /* skip the space too */
|
||||
len -= cut;
|
||||
}
|
||||
else {
|
||||
fputs(ptr, config->errors);
|
||||
len = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Emit help formatted message on given stream.
|
||||
*/
|
||||
|
||||
void helpf(FILE *errors, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
if(fmt) {
|
||||
va_start(ap, fmt);
|
||||
fputs("curl: ", errors); /* prefix it */
|
||||
vfprintf(errors, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
fprintf(errors, "curl: try 'curl --help' "
|
||||
#ifdef USE_MANUAL
|
||||
"or 'curl --manual' "
|
||||
#endif
|
||||
"for more information\n");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef HEADER_CURL_TOOL_MSGS_H
|
||||
#define HEADER_CURL_TOOL_MSGS_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
void warnf(struct Configurable *config, const char *fmt, ...);
|
||||
|
||||
void helpf(FILE *errors, const char *fmt, ...);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_MSGS_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
#ifndef HEADER_CURL_TOOL_OPERATE_H
|
||||
#define HEADER_CURL_TOOL_OPERATE_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
int operate(struct Configurable *config, int argc, argv_item_t argv[]);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_OPERATE_H */
|
||||
|
||||
@@ -0,0 +1,257 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "rawstr.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_convert.h"
|
||||
#include "tool_operhlp.h"
|
||||
#include "tool_version.h"
|
||||
|
||||
#ifdef USE_METALINK
|
||||
/* import the declaration of metalink_cleanup() */
|
||||
# include "tool_metalink.h"
|
||||
#endif
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/*
|
||||
* my_useragent: returns allocated string with default user agent
|
||||
*/
|
||||
char *my_useragent(void)
|
||||
{
|
||||
return strdup( CURL_NAME "/" CURL_VERSION );
|
||||
}
|
||||
|
||||
/*
|
||||
* Print list of OpenSSL supported engines
|
||||
*/
|
||||
void list_engines(const struct curl_slist *engines)
|
||||
{
|
||||
puts("Build-time engines:");
|
||||
if(!engines) {
|
||||
puts(" <none>");
|
||||
return;
|
||||
}
|
||||
for(; engines; engines = engines->next)
|
||||
printf(" %s\n", engines->data);
|
||||
}
|
||||
|
||||
void clean_getout(struct Configurable *config)
|
||||
{
|
||||
struct getout *next;
|
||||
struct getout *node = config->url_list;
|
||||
|
||||
while(node) {
|
||||
next = node->next;
|
||||
Curl_safefree(node->url);
|
||||
Curl_safefree(node->outfile);
|
||||
Curl_safefree(node->infile);
|
||||
Curl_safefree(node);
|
||||
node = next;
|
||||
}
|
||||
config->url_list = NULL;
|
||||
}
|
||||
|
||||
bool output_expected(const char *url, const char *uploadfile)
|
||||
{
|
||||
if(!uploadfile)
|
||||
return TRUE; /* download */
|
||||
if(checkprefix("http://", url) || checkprefix("https://", url))
|
||||
return TRUE; /* HTTP(S) upload */
|
||||
|
||||
return FALSE; /* non-HTTP upload, probably no output should be expected */
|
||||
}
|
||||
|
||||
bool stdin_upload(const char *uploadfile)
|
||||
{
|
||||
return (curlx_strequal(uploadfile, "-") ||
|
||||
curlx_strequal(uploadfile, ".")) ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Adds the file name to the URL if it doesn't already have one.
|
||||
* url will be freed before return if the returned pointer is different
|
||||
*/
|
||||
char *add_file_name_to_url(CURL *curl, char *url, const char *filename)
|
||||
{
|
||||
/* If no file name part is given in the URL, we add this file name */
|
||||
char *ptr = strstr(url, "://");
|
||||
if(ptr)
|
||||
ptr += 3;
|
||||
else
|
||||
ptr = url;
|
||||
ptr = strrchr(ptr, '/');
|
||||
if(!ptr || !strlen(++ptr)) {
|
||||
/* The URL has no file name part, add the local file name. In order
|
||||
to be able to do so, we have to create a new URL in another
|
||||
buffer.*/
|
||||
|
||||
/* We only want the part of the local path that is on the right
|
||||
side of the rightmost slash and backslash. */
|
||||
const char *filep = strrchr(filename, '/');
|
||||
char *file2 = strrchr(filep?filep:filename, '\\');
|
||||
char *encfile;
|
||||
|
||||
if(file2)
|
||||
filep = file2 + 1;
|
||||
else if(filep)
|
||||
filep++;
|
||||
else
|
||||
filep = filename;
|
||||
|
||||
/* URL encode the file name */
|
||||
encfile = curl_easy_escape(curl, filep, 0 /* use strlen */);
|
||||
if(encfile) {
|
||||
char *urlbuffer = malloc(strlen(url) + strlen(encfile) + 3);
|
||||
if(!urlbuffer) {
|
||||
curl_free(encfile);
|
||||
Curl_safefree(url);
|
||||
return NULL;
|
||||
}
|
||||
if(ptr)
|
||||
/* there is a trailing slash on the URL */
|
||||
sprintf(urlbuffer, "%s%s", url, encfile);
|
||||
else
|
||||
/* there is no trailing slash on the URL */
|
||||
sprintf(urlbuffer, "%s/%s", url, encfile);
|
||||
|
||||
curl_free(encfile);
|
||||
Curl_safefree(url);
|
||||
|
||||
url = urlbuffer; /* use our new URL instead! */
|
||||
}
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
/* Extracts the name portion of the URL.
|
||||
* Returns a pointer to a heap-allocated string or NULL if
|
||||
* no name part, at location indicated by first argument.
|
||||
*/
|
||||
CURLcode get_url_file_name(char **filename, const char *url)
|
||||
{
|
||||
const char *pc;
|
||||
|
||||
*filename = NULL;
|
||||
|
||||
/* Find and get the remote file name */
|
||||
pc = strstr(url, "://");
|
||||
if(pc)
|
||||
pc += 3;
|
||||
else
|
||||
pc = url;
|
||||
pc = strrchr(pc, '/');
|
||||
|
||||
if(pc) {
|
||||
/* duplicate the string beyond the slash */
|
||||
pc++;
|
||||
if(*pc) {
|
||||
*filename = strdup(pc);
|
||||
if(!*filename)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
}
|
||||
|
||||
/* in case we built debug enabled, we allow an environment variable
|
||||
* named CURL_TESTDIR to prefix the given file name to put it into a
|
||||
* specific directory
|
||||
*/
|
||||
#ifdef DEBUGBUILD
|
||||
{
|
||||
char *tdir = curlx_getenv("CURL_TESTDIR");
|
||||
if(tdir) {
|
||||
char buffer[512]; /* suitably large */
|
||||
snprintf(buffer, sizeof(buffer), "%s/%s", tdir, *filename);
|
||||
Curl_safefree(*filename);
|
||||
*filename = strdup(buffer); /* clone the buffer */
|
||||
curl_free(tdir);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the main global constructor for the app. Call this before
|
||||
* _any_ libcurl usage. If this fails, *NO* libcurl functions may be
|
||||
* used, or havoc may be the result.
|
||||
*/
|
||||
CURLcode main_init(void)
|
||||
{
|
||||
#if defined(__DJGPP__) || defined(__GO32__)
|
||||
/* stop stat() wasting time */
|
||||
_djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE;
|
||||
#endif
|
||||
|
||||
return curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the main global destructor for the app. Call this after
|
||||
* _all_ libcurl usage is done.
|
||||
*/
|
||||
void main_free(void)
|
||||
{
|
||||
curl_global_cleanup();
|
||||
convert_cleanup();
|
||||
#ifdef USE_METALINK
|
||||
metalink_cleanup();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CURLDEBUG
|
||||
void memory_tracking_init(void)
|
||||
{
|
||||
char *env;
|
||||
/* if CURL_MEMDEBUG is set, this starts memory tracking message logging */
|
||||
env = curlx_getenv("CURL_MEMDEBUG");
|
||||
if(env) {
|
||||
/* use the value as file name */
|
||||
char fname[CURL_MT_LOGFNAME_BUFSIZE];
|
||||
if(strlen(env) >= CURL_MT_LOGFNAME_BUFSIZE)
|
||||
env[CURL_MT_LOGFNAME_BUFSIZE-1] = '\0';
|
||||
strcpy(fname, env);
|
||||
curl_free(env);
|
||||
curl_memdebug(fname);
|
||||
/* this weird stuff here is to make curl_free() get called
|
||||
before curl_memdebug() as otherwise memory tracking will
|
||||
log a free() without an alloc! */
|
||||
}
|
||||
/* if CURL_MEMLIMIT is set, this enables fail-on-alloc-number-N feature */
|
||||
env = curlx_getenv("CURL_MEMLIMIT");
|
||||
if(env) {
|
||||
char *endptr;
|
||||
long num = strtol(env, &endptr, 10);
|
||||
if((endptr != env) && (endptr == env + strlen(env)) && (num > 0))
|
||||
curl_memlimit(num);
|
||||
curl_free(env);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
#ifndef HEADER_CURL_TOOL_OPERHLP_H
|
||||
#define HEADER_CURL_TOOL_OPERHLP_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
char *my_useragent(void);
|
||||
|
||||
void list_engines(const struct curl_slist *engines);
|
||||
|
||||
void clean_getout(struct Configurable *config);
|
||||
|
||||
bool output_expected(const char *url, const char *uploadfile);
|
||||
|
||||
bool stdin_upload(const char *uploadfile);
|
||||
|
||||
char *add_file_name_to_url(CURL *curl, char *url, const char *filename);
|
||||
|
||||
CURLcode get_url_file_name(char **filename, const char *url);
|
||||
|
||||
CURLcode main_init(void);
|
||||
|
||||
void main_free(void);
|
||||
|
||||
#ifdef CURLDEBUG
|
||||
void memory_tracking_init(void);
|
||||
#else
|
||||
# define memory_tracking_init() Curl_nop_stmt
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_OPERHLP_H */
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#if defined(__SYMBIAN32__) || defined(NETWARE)
|
||||
|
||||
#ifdef NETWARE
|
||||
# ifdef __NOVELL_LIBC__
|
||||
# include <screen.h>
|
||||
# else
|
||||
# include <nwconio.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "tool_panykey.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
void tool_pressanykey(void)
|
||||
{
|
||||
#if defined(__SYMBIAN32__)
|
||||
getchar();
|
||||
#elif defined(NETWARE)
|
||||
pressanykey();
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* __SYMBIAN32__ || NETWARE */
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef HEADER_CURL_TOOL_PANYKEY_H
|
||||
#define HEADER_CURL_TOOL_PANYKEY_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#if defined(__SYMBIAN32__) || defined(NETWARE)
|
||||
|
||||
void tool_pressanykey(void);
|
||||
|
||||
#else
|
||||
|
||||
#define tool_pressanykey() Curl_nop_stmt
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_PANYKEY_H */
|
||||
|
||||
@@ -0,0 +1,407 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "rawstr.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_getparam.h"
|
||||
#include "tool_getpass.h"
|
||||
#include "tool_homedir.h"
|
||||
#include "tool_msgs.h"
|
||||
#include "tool_paramhlp.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
struct getout *new_getout(struct Configurable *config)
|
||||
{
|
||||
struct getout *node = calloc(1, sizeof(struct getout));
|
||||
struct getout *last = config->url_last;
|
||||
if(node) {
|
||||
/* append this new node last in the list */
|
||||
if(last)
|
||||
last->next = node;
|
||||
else
|
||||
config->url_list = node; /* first node */
|
||||
|
||||
/* move the last pointer */
|
||||
config->url_last = node;
|
||||
|
||||
node->flags = config->default_node_flags;
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
ParameterError file2string(char **bufp, FILE *file)
|
||||
{
|
||||
char buffer[256];
|
||||
char *ptr;
|
||||
char *string = NULL;
|
||||
size_t stringlen = 0;
|
||||
size_t buflen;
|
||||
|
||||
if(file) {
|
||||
while(fgets(buffer, sizeof(buffer), file)) {
|
||||
if((ptr = strchr(buffer, '\r')) != NULL)
|
||||
*ptr = '\0';
|
||||
if((ptr = strchr(buffer, '\n')) != NULL)
|
||||
*ptr = '\0';
|
||||
buflen = strlen(buffer);
|
||||
if((ptr = realloc(string, stringlen+buflen+1)) == NULL) {
|
||||
Curl_safefree(string);
|
||||
return PARAM_NO_MEM;
|
||||
}
|
||||
string = ptr;
|
||||
strcpy(string+stringlen, buffer);
|
||||
stringlen += buflen;
|
||||
}
|
||||
}
|
||||
*bufp = string;
|
||||
return PARAM_OK;
|
||||
}
|
||||
|
||||
ParameterError file2memory(char **bufp, size_t *size, FILE *file)
|
||||
{
|
||||
char *newbuf;
|
||||
char *buffer = NULL;
|
||||
size_t alloc = 512;
|
||||
size_t nused = 0;
|
||||
size_t nread;
|
||||
|
||||
if(file) {
|
||||
do {
|
||||
if(!buffer || (alloc == nused)) {
|
||||
/* size_t overflow detection for huge files */
|
||||
if(alloc+1 > ((size_t)-1)/2) {
|
||||
Curl_safefree(buffer);
|
||||
return PARAM_NO_MEM;
|
||||
}
|
||||
alloc *= 2;
|
||||
/* allocate an extra char, reserved space, for null termination */
|
||||
if((newbuf = realloc(buffer, alloc+1)) == NULL) {
|
||||
Curl_safefree(buffer);
|
||||
return PARAM_NO_MEM;
|
||||
}
|
||||
buffer = newbuf;
|
||||
}
|
||||
nread = fread(buffer+nused, 1, alloc-nused, file);
|
||||
nused += nread;
|
||||
} while(nread);
|
||||
/* null terminate the buffer in case it's used as a string later */
|
||||
buffer[nused] = '\0';
|
||||
/* free trailing slack space, if possible */
|
||||
if(alloc != nused) {
|
||||
if((newbuf = realloc(buffer, nused+1)) == NULL) {
|
||||
Curl_safefree(buffer);
|
||||
return PARAM_NO_MEM;
|
||||
}
|
||||
buffer = newbuf;
|
||||
}
|
||||
/* discard buffer if nothing was read */
|
||||
if(!nused) {
|
||||
Curl_safefree(buffer); /* no string */
|
||||
}
|
||||
}
|
||||
*size = nused;
|
||||
*bufp = buffer;
|
||||
return PARAM_OK;
|
||||
}
|
||||
|
||||
void cleanarg(char *str)
|
||||
{
|
||||
#ifdef HAVE_WRITABLE_ARGV
|
||||
/* now that GetStr has copied the contents of nextarg, wipe the next
|
||||
* argument out so that the username:password isn't displayed in the
|
||||
* system process list */
|
||||
if(str) {
|
||||
size_t len = strlen(str);
|
||||
memset(str, ' ', len);
|
||||
}
|
||||
#else
|
||||
(void)str;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse the string and write the long in the given address. Return PARAM_OK
|
||||
* on success, otherwise a parameter specific error enum.
|
||||
*
|
||||
* Since this function gets called with the 'nextarg' pointer from within the
|
||||
* getparameter a lot, we must check it for NULL before accessing the str
|
||||
* data.
|
||||
*/
|
||||
|
||||
ParameterError str2num(long *val, const char *str)
|
||||
{
|
||||
if(str) {
|
||||
char *endptr;
|
||||
long num = strtol(str, &endptr, 10);
|
||||
if((endptr != str) && (endptr == str + strlen(str))) {
|
||||
*val = num;
|
||||
return PARAM_OK; /* Ok */
|
||||
}
|
||||
}
|
||||
return PARAM_BAD_NUMERIC; /* badness */
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse the string and write the long in the given address. Return PARAM_OK
|
||||
* on success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS!
|
||||
*
|
||||
* Since this function gets called with the 'nextarg' pointer from within the
|
||||
* getparameter a lot, we must check it for NULL before accessing the str
|
||||
* data.
|
||||
*/
|
||||
|
||||
ParameterError str2unum(long *val, const char *str)
|
||||
{
|
||||
if(str[0]=='-')
|
||||
return PARAM_NEGATIVE_NUMERIC; /* badness */
|
||||
return str2num(val, str);
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse the string and modify the long in the given address. Return
|
||||
* non-zero on failure, zero on success.
|
||||
*
|
||||
* The string is a list of protocols
|
||||
*
|
||||
* Since this function gets called with the 'nextarg' pointer from within the
|
||||
* getparameter a lot, we must check it for NULL before accessing the str
|
||||
* data.
|
||||
*/
|
||||
|
||||
long proto2num(struct Configurable *config, long *val, const char *str)
|
||||
{
|
||||
char *buffer;
|
||||
const char *sep = ",";
|
||||
char *token;
|
||||
|
||||
static struct sprotos {
|
||||
const char *name;
|
||||
long bit;
|
||||
} const protos[] = {
|
||||
{ "all", CURLPROTO_ALL },
|
||||
{ "http", CURLPROTO_HTTP },
|
||||
{ "https", CURLPROTO_HTTPS },
|
||||
{ "ftp", CURLPROTO_FTP },
|
||||
{ "ftps", CURLPROTO_FTPS },
|
||||
{ "scp", CURLPROTO_SCP },
|
||||
{ "sftp", CURLPROTO_SFTP },
|
||||
{ "telnet", CURLPROTO_TELNET },
|
||||
{ "ldap", CURLPROTO_LDAP },
|
||||
{ "ldaps", CURLPROTO_LDAPS },
|
||||
{ "dict", CURLPROTO_DICT },
|
||||
{ "file", CURLPROTO_FILE },
|
||||
{ "tftp", CURLPROTO_TFTP },
|
||||
{ "imap", CURLPROTO_IMAP },
|
||||
{ "imaps", CURLPROTO_IMAPS },
|
||||
{ "pop3", CURLPROTO_POP3 },
|
||||
{ "pop3s", CURLPROTO_POP3S },
|
||||
{ "smtp", CURLPROTO_SMTP },
|
||||
{ "smtps", CURLPROTO_SMTPS },
|
||||
{ "rtsp", CURLPROTO_RTSP },
|
||||
{ "gopher", CURLPROTO_GOPHER },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
if(!str)
|
||||
return 1;
|
||||
|
||||
buffer = strdup(str); /* because strtok corrupts it */
|
||||
if(!buffer)
|
||||
return 1;
|
||||
|
||||
for(token = strtok(buffer, sep);
|
||||
token;
|
||||
token = strtok(NULL, sep)) {
|
||||
enum e_action { allow, deny, set } action = allow;
|
||||
|
||||
struct sprotos const *pp;
|
||||
|
||||
/* Process token modifiers */
|
||||
while(!ISALNUM(*token)) { /* may be NULL if token is all modifiers */
|
||||
switch (*token++) {
|
||||
case '=':
|
||||
action = set;
|
||||
break;
|
||||
case '-':
|
||||
action = deny;
|
||||
break;
|
||||
case '+':
|
||||
action = allow;
|
||||
break;
|
||||
default: /* Includes case of terminating NULL */
|
||||
Curl_safefree(buffer);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
for(pp=protos; pp->name; pp++) {
|
||||
if(curlx_raw_equal(token, pp->name)) {
|
||||
switch (action) {
|
||||
case deny:
|
||||
*val &= ~(pp->bit);
|
||||
break;
|
||||
case allow:
|
||||
*val |= pp->bit;
|
||||
break;
|
||||
case set:
|
||||
*val = pp->bit;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!(pp->name)) { /* unknown protocol */
|
||||
/* If they have specified only this protocol, we say treat it as
|
||||
if no protocols are allowed */
|
||||
if(action == set)
|
||||
*val = 0;
|
||||
warnf(config, "unrecognized protocol '%s'\n", token);
|
||||
}
|
||||
}
|
||||
Curl_safefree(buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the given string looking for an offset (which may be a
|
||||
* larger-than-integer value). The offset CANNOT be negative!
|
||||
*
|
||||
* @param val the offset to populate
|
||||
* @param str the buffer containing the offset
|
||||
* @return PARAM_OK if successful, a parameter specific error enum if failure.
|
||||
*/
|
||||
ParameterError str2offset(curl_off_t *val, const char *str)
|
||||
{
|
||||
char *endptr;
|
||||
if(str[0] == '-')
|
||||
/* offsets aren't negative, this indicates weird input */
|
||||
return PARAM_NEGATIVE_NUMERIC;
|
||||
|
||||
#if(CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
|
||||
*val = curlx_strtoofft(str, &endptr, 0);
|
||||
if((*val == CURL_OFF_T_MAX || *val == CURL_OFF_T_MIN) && (ERRNO == ERANGE))
|
||||
return PARAM_BAD_NUMERIC;
|
||||
#else
|
||||
*val = strtol(str, &endptr, 0);
|
||||
if((*val == LONG_MIN || *val == LONG_MAX) && ERRNO == ERANGE)
|
||||
return PARAM_BAD_NUMERIC;
|
||||
#endif
|
||||
if((endptr != str) && (endptr == str + strlen(str)))
|
||||
return PARAM_OK;
|
||||
|
||||
return PARAM_BAD_NUMERIC;
|
||||
}
|
||||
|
||||
ParameterError checkpasswd(const char *kind, /* for what purpose */
|
||||
char **userpwd) /* pointer to allocated string */
|
||||
{
|
||||
char *ptr;
|
||||
|
||||
if(!*userpwd)
|
||||
return PARAM_OK;
|
||||
|
||||
ptr = strchr(*userpwd, ':');
|
||||
if(!ptr) {
|
||||
/* no password present, prompt for one */
|
||||
char passwd[256] = "";
|
||||
char prompt[256];
|
||||
size_t passwdlen;
|
||||
size_t userlen = strlen(*userpwd);
|
||||
char *passptr;
|
||||
|
||||
/* build a nice-looking prompt */
|
||||
curlx_msnprintf(prompt, sizeof(prompt),
|
||||
"Enter %s password for user '%s':",
|
||||
kind, *userpwd);
|
||||
|
||||
/* get password */
|
||||
getpass_r(prompt, passwd, sizeof(passwd));
|
||||
passwdlen = strlen(passwd);
|
||||
|
||||
/* extend the allocated memory area to fit the password too */
|
||||
passptr = realloc(*userpwd,
|
||||
passwdlen + 1 + /* an extra for the colon */
|
||||
userlen + 1); /* an extra for the zero */
|
||||
if(!passptr)
|
||||
return PARAM_NO_MEM;
|
||||
|
||||
/* append the password separated with a colon */
|
||||
passptr[userlen] = ':';
|
||||
memcpy(&passptr[userlen+1], passwd, passwdlen+1);
|
||||
*userpwd = passptr;
|
||||
}
|
||||
return PARAM_OK;
|
||||
}
|
||||
|
||||
ParameterError add2list(struct curl_slist **list, const char *ptr)
|
||||
{
|
||||
struct curl_slist *newlist = curl_slist_append(*list, ptr);
|
||||
if(newlist)
|
||||
*list = newlist;
|
||||
else
|
||||
return PARAM_NO_MEM;
|
||||
|
||||
return PARAM_OK;
|
||||
}
|
||||
|
||||
int ftpfilemethod(struct Configurable *config, const char *str)
|
||||
{
|
||||
if(curlx_raw_equal("singlecwd", str))
|
||||
return CURLFTPMETHOD_SINGLECWD;
|
||||
if(curlx_raw_equal("nocwd", str))
|
||||
return CURLFTPMETHOD_NOCWD;
|
||||
if(curlx_raw_equal("multicwd", str))
|
||||
return CURLFTPMETHOD_MULTICWD;
|
||||
warnf(config, "unrecognized ftp file method '%s', using default\n", str);
|
||||
return CURLFTPMETHOD_MULTICWD;
|
||||
}
|
||||
|
||||
int ftpcccmethod(struct Configurable *config, const char *str)
|
||||
{
|
||||
if(curlx_raw_equal("passive", str))
|
||||
return CURLFTPSSL_CCC_PASSIVE;
|
||||
if(curlx_raw_equal("active", str))
|
||||
return CURLFTPSSL_CCC_ACTIVE;
|
||||
warnf(config, "unrecognized ftp CCC method '%s', using default\n", str);
|
||||
return CURLFTPSSL_CCC_PASSIVE;
|
||||
}
|
||||
|
||||
long delegation(struct Configurable *config, char *str)
|
||||
{
|
||||
if(curlx_raw_equal("none", str))
|
||||
return CURLGSSAPI_DELEGATION_NONE;
|
||||
if(curlx_raw_equal("policy", str))
|
||||
return CURLGSSAPI_DELEGATION_POLICY_FLAG;
|
||||
if(curlx_raw_equal("always", str))
|
||||
return CURLGSSAPI_DELEGATION_FLAG;
|
||||
warnf(config, "unrecognized delegation method '%s', using none\n", str);
|
||||
return CURLGSSAPI_DELEGATION_NONE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
#ifndef HEADER_CURL_TOOL_PARAMHLP_H
|
||||
#define HEADER_CURL_TOOL_PARAMHLP_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
struct getout *new_getout(struct Configurable *config);
|
||||
|
||||
ParameterError file2string(char **bufp, FILE *file);
|
||||
|
||||
ParameterError file2memory(char **bufp, size_t *size, FILE *file);
|
||||
|
||||
void cleanarg(char *str);
|
||||
|
||||
ParameterError str2num(long *val, const char *str);
|
||||
ParameterError str2unum(long *val, const char *str);
|
||||
|
||||
long proto2num(struct Configurable *config, long *val, const char *str);
|
||||
|
||||
ParameterError str2offset(curl_off_t *val, const char *str);
|
||||
|
||||
ParameterError checkpasswd(const char *kind, char **userpwd);
|
||||
|
||||
ParameterError add2list(struct curl_slist **list, const char *ptr);
|
||||
|
||||
int ftpfilemethod(struct Configurable *config, const char *str);
|
||||
|
||||
int ftpcccmethod(struct Configurable *config, const char *str);
|
||||
|
||||
long delegation(struct Configurable *config, char *str);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_PARAMHLP_H */
|
||||
|
||||
@@ -0,0 +1,306 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_getparam.h"
|
||||
#include "tool_helpers.h"
|
||||
#include "tool_homedir.h"
|
||||
#include "tool_msgs.h"
|
||||
#include "tool_parsecfg.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#define CURLRC DOT_CHAR "curlrc"
|
||||
#define ISSEP(x) (((x) == '=') || ((x) == ':'))
|
||||
|
||||
static const char *unslashquote(const char *line, char *param);
|
||||
static char *my_get_line(FILE *fp);
|
||||
|
||||
/* return 0 on everything-is-fine, and non-zero otherwise */
|
||||
int parseconfig(const char *filename,
|
||||
struct Configurable *config)
|
||||
{
|
||||
int res;
|
||||
FILE *file;
|
||||
char filebuffer[512];
|
||||
bool usedarg;
|
||||
char *home;
|
||||
int rc = 0;
|
||||
|
||||
if(!filename || !*filename) {
|
||||
/* NULL or no file name attempts to load .curlrc from the homedir! */
|
||||
|
||||
#ifndef __AMIGA__
|
||||
filename = CURLRC; /* sensible default */
|
||||
home = homedir(); /* portable homedir finder */
|
||||
if(home) {
|
||||
if(strlen(home) < (sizeof(filebuffer) - strlen(CURLRC))) {
|
||||
snprintf(filebuffer, sizeof(filebuffer),
|
||||
"%s%s%s", home, DIR_CHAR, CURLRC);
|
||||
|
||||
#ifdef WIN32
|
||||
/* Check if the file exists - if not, try CURLRC in the same
|
||||
* directory as our executable
|
||||
*/
|
||||
file = fopen(filebuffer, "r");
|
||||
if(file != NULL) {
|
||||
fclose(file);
|
||||
filename = filebuffer;
|
||||
}
|
||||
else {
|
||||
/* Get the filename of our executable. GetModuleFileName is
|
||||
* already declared via inclusions done in setup header file.
|
||||
* We assume that we are using the ASCII version here.
|
||||
*/
|
||||
int n = GetModuleFileName(0, filebuffer, sizeof(filebuffer));
|
||||
if(n > 0 && n < (int)sizeof(filebuffer)) {
|
||||
/* We got a valid filename - get the directory part */
|
||||
char *lastdirchar = strrchr(filebuffer, '\\');
|
||||
if(lastdirchar) {
|
||||
size_t remaining;
|
||||
*lastdirchar = 0;
|
||||
/* If we have enough space, build the RC filename */
|
||||
remaining = sizeof(filebuffer) - strlen(filebuffer);
|
||||
if(strlen(CURLRC) < remaining - 1) {
|
||||
snprintf(lastdirchar, remaining,
|
||||
"%s%s", DIR_CHAR, CURLRC);
|
||||
/* Don't bother checking if it exists - we do
|
||||
* that later
|
||||
*/
|
||||
filename = filebuffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#else /* WIN32 */
|
||||
filename = filebuffer;
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
Curl_safefree(home); /* we've used it, now free it */
|
||||
}
|
||||
|
||||
# else /* __AMIGA__ */
|
||||
/* On AmigaOS all the config files are into env:
|
||||
*/
|
||||
filename = "ENV:" CURLRC;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
if(strcmp(filename,"-"))
|
||||
file = fopen(filename, "r");
|
||||
else
|
||||
file = stdin;
|
||||
|
||||
if(file) {
|
||||
char *line;
|
||||
char *aline;
|
||||
char *option;
|
||||
char *param;
|
||||
int lineno = 0;
|
||||
bool alloced_param;
|
||||
|
||||
while(NULL != (aline = my_get_line(file))) {
|
||||
lineno++;
|
||||
line = aline;
|
||||
alloced_param=FALSE;
|
||||
|
||||
/* line with # in the first non-blank column is a comment! */
|
||||
while(*line && ISSPACE(*line))
|
||||
line++;
|
||||
|
||||
switch(*line) {
|
||||
case '#':
|
||||
case '/':
|
||||
case '\r':
|
||||
case '\n':
|
||||
case '*':
|
||||
case '\0':
|
||||
Curl_safefree(aline);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* the option keywords starts here */
|
||||
option = line;
|
||||
while(*line && !ISSPACE(*line) && !ISSEP(*line))
|
||||
line++;
|
||||
/* ... and has ended here */
|
||||
|
||||
if(*line)
|
||||
*line++ = '\0'; /* zero terminate, we have a local copy of the data */
|
||||
|
||||
#ifdef DEBUG_CONFIG
|
||||
fprintf(stderr, "GOT: %s\n", option);
|
||||
#endif
|
||||
|
||||
/* pass spaces and separator(s) */
|
||||
while(*line && (ISSPACE(*line) || ISSEP(*line)))
|
||||
line++;
|
||||
|
||||
/* the parameter starts here (unless quoted) */
|
||||
if(*line == '\"') {
|
||||
/* quoted parameter, do the quote dance */
|
||||
line++;
|
||||
param = malloc(strlen(line) + 1); /* parameter */
|
||||
if(!param) {
|
||||
/* out of memory */
|
||||
Curl_safefree(aline);
|
||||
rc = 1;
|
||||
break;
|
||||
}
|
||||
alloced_param = TRUE;
|
||||
(void)unslashquote(line, param);
|
||||
}
|
||||
else {
|
||||
param = line; /* parameter starts here */
|
||||
while(*line && !ISSPACE(*line))
|
||||
line++;
|
||||
*line = '\0'; /* zero terminate */
|
||||
}
|
||||
|
||||
if(param && !*param) {
|
||||
/* do this so getparameter can check for required parameters.
|
||||
Otherwise it always thinks there's a parameter. */
|
||||
if(alloced_param)
|
||||
Curl_safefree(param);
|
||||
param = NULL;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_CONFIG
|
||||
fprintf(stderr, "PARAM: \"%s\"\n",(param ? param : "(null)"));
|
||||
#endif
|
||||
res = getparameter(option, param, &usedarg, config);
|
||||
|
||||
if(param && *param && !usedarg)
|
||||
/* we passed in a parameter that wasn't used! */
|
||||
res = PARAM_GOT_EXTRA_PARAMETER;
|
||||
|
||||
if(res != PARAM_OK) {
|
||||
/* the help request isn't really an error */
|
||||
if(!strcmp(filename, "-")) {
|
||||
filename = (char *)"<stdin>";
|
||||
}
|
||||
if(PARAM_HELP_REQUESTED != res) {
|
||||
const char *reason = param2text(res);
|
||||
warnf(config, "%s:%d: warning: '%s' %s\n",
|
||||
filename, lineno, option, reason);
|
||||
}
|
||||
}
|
||||
|
||||
if(alloced_param)
|
||||
Curl_safefree(param);
|
||||
|
||||
Curl_safefree(aline);
|
||||
}
|
||||
if(file != stdin)
|
||||
fclose(file);
|
||||
}
|
||||
else
|
||||
rc = 1; /* couldn't open the file */
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copies the string from line to the buffer at param, unquoting
|
||||
* backslash-quoted characters and NUL-terminating the output string.
|
||||
* Stops at the first non-backslash-quoted double quote character or the
|
||||
* end of the input string. param must be at least as long as the input
|
||||
* string. Returns the pointer after the last handled input character.
|
||||
*/
|
||||
static const char *unslashquote(const char *line, char *param)
|
||||
{
|
||||
while(*line && (*line != '\"')) {
|
||||
if(*line == '\\') {
|
||||
char out;
|
||||
line++;
|
||||
|
||||
/* default is to output the letter after the backslash */
|
||||
switch(out = *line) {
|
||||
case '\0':
|
||||
continue; /* this'll break out of the loop */
|
||||
case 't':
|
||||
out = '\t';
|
||||
break;
|
||||
case 'n':
|
||||
out = '\n';
|
||||
break;
|
||||
case 'r':
|
||||
out = '\r';
|
||||
break;
|
||||
case 'v':
|
||||
out = '\v';
|
||||
break;
|
||||
}
|
||||
*param++ = out;
|
||||
line++;
|
||||
}
|
||||
else
|
||||
*param++ = *line++;
|
||||
}
|
||||
*param = '\0'; /* always zero terminate */
|
||||
return line;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reads a line from the given file, ensuring is NUL terminated.
|
||||
* The pointer must be freed by the caller.
|
||||
* NULL is returned on an out of memory condition.
|
||||
*/
|
||||
static char *my_get_line(FILE *fp)
|
||||
{
|
||||
char buf[4096];
|
||||
char *nl = NULL;
|
||||
char *retval = NULL;
|
||||
|
||||
do {
|
||||
if(NULL == fgets(buf, sizeof(buf), fp))
|
||||
break;
|
||||
if(!retval) {
|
||||
retval = strdup(buf);
|
||||
if(!retval)
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
char *ptr;
|
||||
ptr = realloc(retval, strlen(retval) + strlen(buf) + 1);
|
||||
if(!ptr) {
|
||||
Curl_safefree(retval);
|
||||
return NULL;
|
||||
}
|
||||
retval = ptr;
|
||||
strcat(retval, buf);
|
||||
}
|
||||
nl = strchr(retval, '\n');
|
||||
} while(!nl);
|
||||
|
||||
if(nl)
|
||||
*nl = '\0';
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef HEADER_CURL_TOOL_PARSECFG_H
|
||||
#define HEADER_CURL_TOOL_PARSECFG_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
int parseconfig(const char *filename,
|
||||
struct Configurable *config);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_PARSECFG_H */
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
#ifndef HEADER_CURL_TOOL_SDECLS_H
|
||||
#define HEADER_CURL_TOOL_SDECLS_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
#ifdef USE_METALINK
|
||||
# include <metalink/metalink.h>
|
||||
#endif /* USE_METALINK */
|
||||
|
||||
/*
|
||||
* OutStruct variables keep track of information relative to curl's
|
||||
* output writing, which may take place to a standard stream or a file.
|
||||
*
|
||||
* 'filename' member is either a pointer to a file name string or NULL
|
||||
* when dealing with a standard stream.
|
||||
*
|
||||
* 'alloc_filename' member is TRUE when string pointed by 'filename' has been
|
||||
* dynamically allocated and 'belongs' to this OutStruct, otherwise FALSE.
|
||||
*
|
||||
* 'is_cd_filename' member is TRUE when string pointed by 'filename' has been
|
||||
* set using a server-specified Content-Disposition filename, otherwise FALSE.
|
||||
*
|
||||
* 's_isreg' member is TRUE when output goes to a regular file, this also
|
||||
* implies that output is 'seekable' and 'appendable' and also that member
|
||||
* 'filename' points to file name's string. For any standard stream member
|
||||
* 's_isreg' will be FALSE.
|
||||
*
|
||||
* 'fopened' member is TRUE when output goes to a regular file and it
|
||||
* has been fopen'ed, requiring it to be closed later on. In any other
|
||||
* case this is FALSE.
|
||||
*
|
||||
* 'stream' member is a pointer to a stream controlling object as returned
|
||||
* from a 'fopen' call or a standard stream.
|
||||
*
|
||||
* 'config' member is a pointer to associated 'Configurable' struct.
|
||||
*
|
||||
* 'bytes' member represents amount written so far.
|
||||
*
|
||||
* 'init' member holds original file size or offset at which truncation is
|
||||
* taking place. Always zero unless appending to a non-empty regular file.
|
||||
*
|
||||
* 'metalink_parser' member is a pointer to Metalink XML parser
|
||||
* context.
|
||||
*/
|
||||
|
||||
struct OutStruct {
|
||||
char *filename;
|
||||
bool alloc_filename;
|
||||
bool is_cd_filename;
|
||||
bool s_isreg;
|
||||
bool fopened;
|
||||
FILE *stream;
|
||||
struct Configurable *config;
|
||||
curl_off_t bytes;
|
||||
curl_off_t init;
|
||||
#ifdef USE_METALINK
|
||||
metalink_parser_context_t *metalink_parser;
|
||||
#endif /* USE_METALINK */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* InStruct variables keep track of information relative to curl's
|
||||
* input reading, which may take place from stdin or from some file.
|
||||
*
|
||||
* 'fd' member is either 'stdin' file descriptor number STDIN_FILENO
|
||||
* or a file descriptor as returned from an 'open' call for some file.
|
||||
*
|
||||
* 'config' member is a pointer to associated 'Configurable' struct.
|
||||
*/
|
||||
|
||||
struct InStruct {
|
||||
int fd;
|
||||
struct Configurable *config;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* A linked list of these 'getout' nodes contain URL's to fetch,
|
||||
* as well as information relative to where URL contents should
|
||||
* be stored or which file should be uploaded.
|
||||
*/
|
||||
|
||||
struct getout {
|
||||
struct getout *next; /* next one */
|
||||
char *url; /* the URL we deal with */
|
||||
char *outfile; /* where to store the output */
|
||||
char *infile; /* file to upload, if GETOUT_UPLOAD is set */
|
||||
int flags; /* options - composed of GETOUT_* bits */
|
||||
};
|
||||
|
||||
#define GETOUT_OUTFILE (1<<0) /* set when outfile is deemed done */
|
||||
#define GETOUT_URL (1<<1) /* set when URL is deemed done */
|
||||
#define GETOUT_USEREMOTE (1<<2) /* use remote file name locally */
|
||||
#define GETOUT_UPLOAD (1<<3) /* if set, -T has been used */
|
||||
#define GETOUT_NOUPLOAD (1<<4) /* if set, -T "" has been used */
|
||||
#define GETOUT_METALINK (1<<5) /* set when Metalink download */
|
||||
|
||||
/*
|
||||
* 'trace' enumeration represents curl's output look'n feel possibilities.
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
TRACE_NONE, /* no trace/verbose output at all */
|
||||
TRACE_BIN, /* tcpdump inspired look */
|
||||
TRACE_ASCII, /* like *BIN but without the hex output */
|
||||
TRACE_PLAIN /* -v/--verbose type */
|
||||
} trace;
|
||||
|
||||
|
||||
/*
|
||||
* 'HttpReq' enumeration represents HTTP request types.
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
HTTPREQ_UNSPEC, /* first in list */
|
||||
HTTPREQ_GET,
|
||||
HTTPREQ_HEAD,
|
||||
HTTPREQ_POST,
|
||||
HTTPREQ_SIMPLEPOST,
|
||||
HTTPREQ_CUSTOM,
|
||||
HTTPREQ_LAST /* last in list */
|
||||
} HttpReq;
|
||||
|
||||
|
||||
/*
|
||||
* Complete struct declarations which have Configurable struct members,
|
||||
* just in case this header is directly included in some source file.
|
||||
*/
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_SDECLS_H */
|
||||
|
||||
@@ -0,0 +1,545 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifndef CURL_DISABLE_LIBCURL_OPTION
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
/* use our own printf() functions */
|
||||
#include "curlx.h"
|
||||
|
||||
#include "tool_cfgable.h"
|
||||
#include "tool_easysrc.h"
|
||||
#include "tool_setopt.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
/* Lookup tables for converting setopt values back to symbols */
|
||||
/* For enums, values may be in any order. */
|
||||
/* For bit masks, put combinations first, then single bits, */
|
||||
/* and finally any "NONE" value. */
|
||||
|
||||
#define NV(e) {#e, e}
|
||||
#define NV1(e, v) {#e, (v)}
|
||||
#define NVEND {NULL, 0} /* sentinel to mark end of list */
|
||||
|
||||
const NameValue setopt_nv_CURLPROXY[] = {
|
||||
NV(CURLPROXY_HTTP),
|
||||
NV(CURLPROXY_HTTP_1_0),
|
||||
NV(CURLPROXY_SOCKS4),
|
||||
NV(CURLPROXY_SOCKS5),
|
||||
NV(CURLPROXY_SOCKS4A),
|
||||
NV(CURLPROXY_SOCKS5_HOSTNAME),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
const NameValueUnsigned setopt_nv_CURLAUTH[] = {
|
||||
NV(CURLAUTH_ANY), /* combination */
|
||||
NV(CURLAUTH_ANYSAFE), /* combination */
|
||||
NV(CURLAUTH_BASIC),
|
||||
NV(CURLAUTH_DIGEST),
|
||||
NV(CURLAUTH_GSSNEGOTIATE),
|
||||
NV(CURLAUTH_NTLM),
|
||||
NV(CURLAUTH_DIGEST_IE),
|
||||
NV(CURLAUTH_NTLM_WB),
|
||||
NV(CURLAUTH_ONLY),
|
||||
NV(CURLAUTH_NONE),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
const NameValue setopt_nv_CURL_HTTP_VERSION[] = {
|
||||
NV(CURL_HTTP_VERSION_NONE),
|
||||
NV(CURL_HTTP_VERSION_1_0),
|
||||
NV(CURL_HTTP_VERSION_1_1),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
const NameValue setopt_nv_CURL_SSLVERSION[] = {
|
||||
NV(CURL_SSLVERSION_DEFAULT),
|
||||
NV(CURL_SSLVERSION_TLSv1),
|
||||
NV(CURL_SSLVERSION_SSLv2),
|
||||
NV(CURL_SSLVERSION_SSLv3),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
const NameValue setopt_nv_CURL_TIMECOND[] = {
|
||||
NV(CURL_TIMECOND_IFMODSINCE),
|
||||
NV(CURL_TIMECOND_IFUNMODSINCE),
|
||||
NV(CURL_TIMECOND_LASTMOD),
|
||||
NV(CURL_TIMECOND_NONE),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
const NameValue setopt_nv_CURLFTPSSL_CCC[] = {
|
||||
NV(CURLFTPSSL_CCC_NONE),
|
||||
NV(CURLFTPSSL_CCC_PASSIVE),
|
||||
NV(CURLFTPSSL_CCC_ACTIVE),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
/* These mappings essentially triplicated - see
|
||||
* tool_libinfo.c and tool_paramhlp.c */
|
||||
const NameValue setopt_nv_CURLPROTO[] = {
|
||||
NV(CURLPROTO_ALL), /* combination */
|
||||
NV(CURLPROTO_DICT),
|
||||
NV(CURLPROTO_FILE),
|
||||
NV(CURLPROTO_FTP),
|
||||
NV(CURLPROTO_FTPS),
|
||||
NV(CURLPROTO_GOPHER),
|
||||
NV(CURLPROTO_HTTP),
|
||||
NV(CURLPROTO_HTTPS),
|
||||
NV(CURLPROTO_IMAP),
|
||||
NV(CURLPROTO_IMAPS),
|
||||
NV(CURLPROTO_LDAP),
|
||||
NV(CURLPROTO_LDAPS),
|
||||
NV(CURLPROTO_POP3),
|
||||
NV(CURLPROTO_POP3S),
|
||||
NV(CURLPROTO_RTSP),
|
||||
NV(CURLPROTO_SCP),
|
||||
NV(CURLPROTO_SFTP),
|
||||
NV(CURLPROTO_SMTP),
|
||||
NV(CURLPROTO_SMTPS),
|
||||
NV(CURLPROTO_TELNET),
|
||||
NV(CURLPROTO_TFTP),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
/* These options have non-zero default values. */
|
||||
static const NameValue setopt_nv_CURLNONZERODEFAULTS[] = {
|
||||
NV1(CURLOPT_SSL_VERIFYPEER, 1),
|
||||
NV1(CURLOPT_SSL_VERIFYHOST, 1),
|
||||
NVEND
|
||||
};
|
||||
|
||||
/* Format and add code; jump to nomem on malloc error */
|
||||
#define ADD(args) do { \
|
||||
ret = easysrc_add args; \
|
||||
if(ret) \
|
||||
goto nomem; \
|
||||
} WHILE_FALSE
|
||||
#define ADDF(args) do { \
|
||||
ret = easysrc_addf args; \
|
||||
if(ret) \
|
||||
goto nomem; \
|
||||
} WHILE_FALSE
|
||||
|
||||
#define DECL0(s) ADD((&easysrc_decl, s))
|
||||
#define DECL1(f,a) ADDF((&easysrc_decl, f,a))
|
||||
|
||||
#define DATA0(s) ADD((&easysrc_data, s))
|
||||
#define DATA1(f,a) ADDF((&easysrc_data, f,a))
|
||||
#define DATA2(f,a,b) ADDF((&easysrc_data, f,a,b))
|
||||
#define DATA3(f,a,b,c) ADDF((&easysrc_data, f,a,b,c))
|
||||
|
||||
#define CODE0(s) ADD((&easysrc_code, s))
|
||||
#define CODE1(f,a) ADDF((&easysrc_code, f,a))
|
||||
#define CODE2(f,a,b) ADDF((&easysrc_code, f,a,b))
|
||||
#define CODE3(f,a,b,c) ADDF((&easysrc_code, f,a,b,c))
|
||||
|
||||
#define CLEAN0(s) ADD((&easysrc_clean, s))
|
||||
#define CLEAN1(f,a) ADDF((&easysrc_clean, f,a))
|
||||
|
||||
#define REM0(s) ADD((&easysrc_toohard, s))
|
||||
#define REM1(f,a) ADDF((&easysrc_toohard, f,a))
|
||||
#define REM2(f,a,b) ADDF((&easysrc_toohard, f,a,b))
|
||||
|
||||
/* Escape string to C string syntax. Return NULL if out of memory.
|
||||
* Is this correct for those wacky EBCDIC guys? */
|
||||
static char *c_escape(const char *str)
|
||||
{
|
||||
size_t len = 0;
|
||||
const char *s;
|
||||
unsigned char c;
|
||||
char *escaped, *e;
|
||||
/* Allocate space based on worst-case */
|
||||
len = strlen(str);
|
||||
escaped = malloc(4 * len + 1);
|
||||
if(!escaped)
|
||||
return NULL;
|
||||
|
||||
e = escaped;
|
||||
for(s=str; (c=*s) != '\0'; s++) {
|
||||
if(c=='\n') {
|
||||
strcpy(e, "\\n");
|
||||
e += 2;
|
||||
}
|
||||
else if(c=='\r') {
|
||||
strcpy(e, "\\r");
|
||||
e += 2;
|
||||
}
|
||||
else if(c=='\t') {
|
||||
strcpy(e, "\\t");
|
||||
e += 2;
|
||||
}
|
||||
else if(c=='\\') {
|
||||
strcpy(e, "\\\\");
|
||||
e += 2;
|
||||
}
|
||||
else if(c=='"') {
|
||||
strcpy(e, "\\\"");
|
||||
e += 2;
|
||||
}
|
||||
else if(! isprint(c)) {
|
||||
sprintf(e, "\\%03o", c);
|
||||
e += 4;
|
||||
}
|
||||
else
|
||||
*e++ = c;
|
||||
}
|
||||
*e = '\0';
|
||||
return escaped;
|
||||
}
|
||||
|
||||
/* setopt wrapper for enum types */
|
||||
CURLcode tool_setopt_enum(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
const NameValue *nvlist, long lval)
|
||||
{
|
||||
CURLcode ret = CURLE_OK;
|
||||
bool skip = FALSE;
|
||||
|
||||
ret = curl_easy_setopt(curl, tag, lval);
|
||||
if(!lval)
|
||||
skip = TRUE;
|
||||
|
||||
if(config->libcurl && !skip && !ret) {
|
||||
/* we only use this for real if --libcurl was used */
|
||||
const NameValue *nv = NULL;
|
||||
for(nv=nvlist; nv->name; nv++) {
|
||||
if(nv->value == lval) break; /* found it */
|
||||
}
|
||||
if(! nv->name) {
|
||||
/* If no definition was found, output an explicit value.
|
||||
* This could happen if new values are defined and used
|
||||
* but the NameValue list is not updated. */
|
||||
CODE2("curl_easy_setopt(hnd, %s, %ldL);", name, lval);
|
||||
}
|
||||
else {
|
||||
CODE2("curl_easy_setopt(hnd, %s, (long)%s);", name, nv->name);
|
||||
}
|
||||
}
|
||||
|
||||
nomem:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* setopt wrapper for flags */
|
||||
CURLcode tool_setopt_flags(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
const NameValue *nvlist, long lval)
|
||||
{
|
||||
CURLcode ret = CURLE_OK;
|
||||
bool skip = FALSE;
|
||||
|
||||
ret = curl_easy_setopt(curl, tag, lval);
|
||||
if(!lval)
|
||||
skip = TRUE;
|
||||
|
||||
if(config->libcurl && !skip && !ret) {
|
||||
/* we only use this for real if --libcurl was used */
|
||||
char preamble[80]; /* should accommodate any symbol name */
|
||||
long rest = lval; /* bits not handled yet */
|
||||
const NameValue *nv = NULL;
|
||||
snprintf(preamble, sizeof(preamble),
|
||||
"curl_easy_setopt(hnd, %s, ", name);
|
||||
for(nv=nvlist; nv->name; nv++) {
|
||||
if((nv->value & ~ rest) == 0) {
|
||||
/* all value flags contained in rest */
|
||||
rest &= ~ nv->value; /* remove bits handled here */
|
||||
CODE3("%s(long)%s%s",
|
||||
preamble, nv->name, rest ? " |" : ");");
|
||||
if(!rest)
|
||||
break; /* handled them all */
|
||||
/* replace with all spaces for continuation line */
|
||||
sprintf(preamble, "%*s", strlen(preamble), "");
|
||||
}
|
||||
}
|
||||
/* If any bits have no definition, output an explicit value.
|
||||
* This could happen if new bits are defined and used
|
||||
* but the NameValue list is not updated. */
|
||||
if(rest)
|
||||
CODE2("%s%ldL);", preamble, rest);
|
||||
}
|
||||
|
||||
nomem:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* setopt wrapper for bitmasks */
|
||||
CURLcode tool_setopt_bitmask(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
const NameValueUnsigned *nvlist,
|
||||
long lval)
|
||||
{
|
||||
CURLcode ret = CURLE_OK;
|
||||
bool skip = FALSE;
|
||||
|
||||
ret = curl_easy_setopt(curl, tag, lval);
|
||||
if(!lval)
|
||||
skip = TRUE;
|
||||
|
||||
if(config->libcurl && !skip && !ret) {
|
||||
/* we only use this for real if --libcurl was used */
|
||||
char preamble[80];
|
||||
unsigned long rest = (unsigned long)lval;
|
||||
const NameValueUnsigned *nv = NULL;
|
||||
snprintf(preamble, sizeof(preamble),
|
||||
"curl_easy_setopt(hnd, %s, ", name);
|
||||
for(nv=nvlist; nv->name; nv++) {
|
||||
if((nv->value & ~ rest) == 0) {
|
||||
/* all value flags contained in rest */
|
||||
rest &= ~ nv->value; /* remove bits handled here */
|
||||
CODE3("%s(long)%s%s",
|
||||
preamble, nv->name, rest ? " |" : ");");
|
||||
if(!rest)
|
||||
break; /* handled them all */
|
||||
/* replace with all spaces for continuation line */
|
||||
sprintf(preamble, "%*s", strlen(preamble), "");
|
||||
}
|
||||
}
|
||||
/* If any bits have no definition, output an explicit value.
|
||||
* This could happen if new bits are defined and used
|
||||
* but the NameValue list is not updated. */
|
||||
if(rest)
|
||||
CODE2("%s%luUL);", preamble, rest);
|
||||
}
|
||||
|
||||
nomem:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* setopt wrapper for CURLOPT_HTTPPOST */
|
||||
CURLcode tool_setopt_httppost(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
struct curl_httppost *post)
|
||||
{
|
||||
CURLcode ret = CURLE_OK;
|
||||
char *escaped = NULL;
|
||||
bool skip = FALSE;
|
||||
|
||||
ret = curl_easy_setopt(curl, tag, post);
|
||||
if(!post)
|
||||
skip = TRUE;
|
||||
|
||||
if(config->libcurl && !skip && !ret) {
|
||||
struct curl_httppost *pp, *p;
|
||||
int i;
|
||||
/* May use several httppost lists, if multiple POST actions */
|
||||
i = ++ easysrc_form_count;
|
||||
DECL1("struct curl_httppost *post%d;", i);
|
||||
DATA1("post%d = NULL;", i);
|
||||
CLEAN1("curl_formfree(post%d);", i);
|
||||
CLEAN1("post%d = NULL;", i);
|
||||
if(i == 1)
|
||||
DECL0("struct curl_httppost *postend;");
|
||||
DATA0("postend = NULL;");
|
||||
for(p=post; p; p=p->next) {
|
||||
DATA1("curl_formadd(&post%d, &postend,", i);
|
||||
DATA1(" CURLFORM_COPYNAME, \"%s\",", p->name);
|
||||
for(pp=p; pp; pp=pp->more) {
|
||||
/* May be several files uploaded for one name;
|
||||
* these are linked through the 'more' pointer */
|
||||
Curl_safefree(escaped);
|
||||
escaped = c_escape(pp->contents);
|
||||
if(!escaped) {
|
||||
ret = CURLE_OUT_OF_MEMORY;
|
||||
goto nomem;
|
||||
}
|
||||
if(pp->flags & HTTPPOST_FILENAME) {
|
||||
/* file upload as for -F @filename */
|
||||
DATA1(" CURLFORM_FILE, \"%s\",", escaped);
|
||||
}
|
||||
else if(pp->flags & HTTPPOST_READFILE) {
|
||||
/* content from file as for -F <filename */
|
||||
DATA1(" CURLFORM_FILECONTENT, \"%s\",", escaped);
|
||||
}
|
||||
else
|
||||
DATA1(" CURLFORM_COPYCONTENTS, \"%s\",", escaped);
|
||||
if(pp->showfilename) {
|
||||
Curl_safefree(escaped);
|
||||
escaped = c_escape(pp->showfilename);
|
||||
if(!escaped) {
|
||||
ret = CURLE_OUT_OF_MEMORY;
|
||||
goto nomem;
|
||||
}
|
||||
DATA1(" CURLFORM_FILENAME, \"%s\",", escaped);
|
||||
}
|
||||
if(pp->contenttype) {
|
||||
Curl_safefree(escaped);
|
||||
escaped = c_escape(pp->contenttype);
|
||||
if(!escaped) {
|
||||
ret = CURLE_OUT_OF_MEMORY;
|
||||
goto nomem;
|
||||
}
|
||||
DATA1(" CURLFORM_CONTENTTYPE, \"%s\",", escaped);
|
||||
}
|
||||
}
|
||||
DATA0(" CURLFORM_END);");
|
||||
}
|
||||
CODE2("curl_easy_setopt(hnd, %s, post%d);", name, i);
|
||||
}
|
||||
|
||||
nomem:
|
||||
Curl_safefree(escaped);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* setopt wrapper for curl_slist options */
|
||||
CURLcode tool_setopt_slist(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
struct curl_slist *list)
|
||||
{
|
||||
CURLcode ret = CURLE_OK;
|
||||
char *escaped = NULL;
|
||||
bool skip = FALSE;
|
||||
|
||||
ret = curl_easy_setopt(curl, tag, list);
|
||||
if(!list)
|
||||
skip = TRUE;
|
||||
|
||||
if(config->libcurl && !skip && !ret) {
|
||||
struct curl_slist *s;
|
||||
int i;
|
||||
/* May need several slist variables, so invent name */
|
||||
i = ++ easysrc_slist_count;
|
||||
DECL1("struct curl_slist *slist%d;", i);
|
||||
DATA1("slist%d = NULL;", i);
|
||||
CLEAN1("curl_slist_free_all(slist%d);", i);
|
||||
CLEAN1("slist%d = NULL;", i);
|
||||
for(s=list; s; s=s->next) {
|
||||
Curl_safefree(escaped);
|
||||
escaped = c_escape(s->data);
|
||||
if(!escaped) {
|
||||
ret = CURLE_OUT_OF_MEMORY;
|
||||
goto nomem;
|
||||
}
|
||||
DATA3("slist%d = curl_slist_append(slist%d, \"%s\");", i, i, escaped);
|
||||
}
|
||||
CODE2("curl_easy_setopt(hnd, %s, slist%d);", name, i);
|
||||
}
|
||||
|
||||
nomem:
|
||||
Curl_safefree(escaped);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* generic setopt wrapper for all other options.
|
||||
* Some type information is encoded in the tag value. */
|
||||
CURLcode tool_setopt(CURL *curl, bool str, struct Configurable *config,
|
||||
const char *name, CURLoption tag, ...)
|
||||
{
|
||||
va_list arg;
|
||||
char buf[256];
|
||||
const char *value = NULL;
|
||||
bool remark = FALSE;
|
||||
bool skip = FALSE;
|
||||
bool escape = FALSE;
|
||||
char *escaped = NULL;
|
||||
CURLcode ret = CURLE_OK;
|
||||
|
||||
va_start(arg, tag);
|
||||
|
||||
if(tag < CURLOPTTYPE_OBJECTPOINT) {
|
||||
/* Value is expected to be a long */
|
||||
long lval = va_arg(arg, long);
|
||||
long defval = 0L;
|
||||
const NameValue *nv = NULL;
|
||||
for(nv=setopt_nv_CURLNONZERODEFAULTS; nv->name; nv++) {
|
||||
if(!strcmp(name, nv->name)) {
|
||||
defval = nv->value;
|
||||
break; /* found it */
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(buf, sizeof(buf), "%ldL", lval);
|
||||
value = buf;
|
||||
ret = curl_easy_setopt(curl, tag, lval);
|
||||
if(lval == defval)
|
||||
skip = TRUE;
|
||||
}
|
||||
else if(tag < CURLOPTTYPE_OFF_T) {
|
||||
/* Value is some sort of object pointer */
|
||||
void *pval = va_arg(arg, void *);
|
||||
|
||||
/* function pointers are never printable */
|
||||
if(tag >= CURLOPTTYPE_FUNCTIONPOINT) {
|
||||
if(pval) {
|
||||
value = "functionpointer";
|
||||
remark = TRUE;
|
||||
}
|
||||
else
|
||||
skip = TRUE;
|
||||
}
|
||||
|
||||
else if(pval && str) {
|
||||
value = (char *)pval;
|
||||
escape = TRUE;
|
||||
}
|
||||
else if(pval) {
|
||||
value = "objectpointer";
|
||||
remark = TRUE;
|
||||
}
|
||||
else
|
||||
skip = TRUE;
|
||||
|
||||
ret = curl_easy_setopt(curl, tag, pval);
|
||||
|
||||
}
|
||||
else {
|
||||
/* Value is expected to be curl_off_t */
|
||||
curl_off_t oval = va_arg(arg, curl_off_t);
|
||||
snprintf(buf, sizeof(buf),
|
||||
"(curl_off_t)%" CURL_FORMAT_CURL_OFF_T, oval);
|
||||
value = buf;
|
||||
ret = curl_easy_setopt(curl, tag, oval);
|
||||
|
||||
if(!oval)
|
||||
skip = TRUE;
|
||||
}
|
||||
|
||||
va_end(arg);
|
||||
|
||||
if(config->libcurl && !skip && !ret) {
|
||||
/* we only use this for real if --libcurl was used */
|
||||
|
||||
if(remark)
|
||||
REM2("%s set to a %s", name, value);
|
||||
else {
|
||||
if(escape) {
|
||||
escaped = c_escape(value);
|
||||
if(!escaped) {
|
||||
ret = CURLE_OUT_OF_MEMORY;
|
||||
goto nomem;
|
||||
}
|
||||
CODE2("curl_easy_setopt(hnd, %s, \"%s\");", name, escaped);
|
||||
}
|
||||
else
|
||||
CODE2("curl_easy_setopt(hnd, %s, %s);", name, value);
|
||||
}
|
||||
}
|
||||
|
||||
nomem:
|
||||
Curl_safefree(escaped);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* CURL_DISABLE_LIBCURL_OPTION */
|
||||
@@ -0,0 +1,144 @@
|
||||
#ifndef HEADER_CURL_TOOL_SETOPT_H
|
||||
#define HEADER_CURL_TOOL_SETOPT_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
/*
|
||||
* Macros used in operate()
|
||||
*/
|
||||
|
||||
#define SETOPT_CHECK(v) do { \
|
||||
res = (v); \
|
||||
if(res) \
|
||||
goto show_error; \
|
||||
} WHILE_FALSE
|
||||
|
||||
#ifndef CURL_DISABLE_LIBCURL_OPTION
|
||||
|
||||
/* Associate symbolic names with option values */
|
||||
typedef struct {
|
||||
const char *name;
|
||||
long value;
|
||||
} NameValue;
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
unsigned long value;
|
||||
} NameValueUnsigned;
|
||||
|
||||
extern const NameValue setopt_nv_CURLPROXY[];
|
||||
extern const NameValue setopt_nv_CURL_HTTP_VERSION[];
|
||||
extern const NameValue setopt_nv_CURL_SSLVERSION[];
|
||||
extern const NameValue setopt_nv_CURL_TIMECOND[];
|
||||
extern const NameValue setopt_nv_CURLFTPSSL_CCC[];
|
||||
extern const NameValue setopt_nv_CURLPROTO[];
|
||||
extern const NameValueUnsigned setopt_nv_CURLAUTH[];
|
||||
|
||||
/* Map options to NameValue sets */
|
||||
#define setopt_nv_CURLOPT_HTTP_VERSION setopt_nv_CURL_HTTP_VERSION
|
||||
#define setopt_nv_CURLOPT_HTTPAUTH setopt_nv_CURLAUTH
|
||||
#define setopt_nv_CURLOPT_SSLVERSION setopt_nv_CURL_SSLVERSION
|
||||
#define setopt_nv_CURLOPT_TIMECONDITION setopt_nv_CURL_TIMECOND
|
||||
#define setopt_nv_CURLOPT_FTP_SSL_CCC setopt_nv_CURLFTPSSL_CCC
|
||||
#define setopt_nv_CURLOPT_PROTOCOLS setopt_nv_CURLPROTO
|
||||
#define setopt_nv_CURLOPT_REDIR_PROTOCOLS setopt_nv_CURLPROTO
|
||||
#define setopt_nv_CURLOPT_PROXYTYPE setopt_nv_CURLPROXY
|
||||
#define setopt_nv_CURLOPT_PROXYAUTH setopt_nv_CURLAUTH
|
||||
|
||||
/* Intercept setopt calls for --libcurl */
|
||||
|
||||
CURLcode tool_setopt_enum(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
const NameValue *nv, long lval);
|
||||
CURLcode tool_setopt_flags(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
const NameValue *nv, long lval);
|
||||
CURLcode tool_setopt_bitmask(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
const NameValueUnsigned *nv, long lval);
|
||||
CURLcode tool_setopt_httppost(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
struct curl_httppost *httppost);
|
||||
CURLcode tool_setopt_slist(CURL *curl, struct Configurable *config,
|
||||
const char *name, CURLoption tag,
|
||||
struct curl_slist *list);
|
||||
CURLcode tool_setopt(CURL *curl, bool str, struct Configurable *config,
|
||||
const char *name, CURLoption tag, ...);
|
||||
|
||||
#define my_setopt(x,y,z) \
|
||||
SETOPT_CHECK(tool_setopt(x, FALSE, config, #y, y, z))
|
||||
|
||||
#define my_setopt_str(x,y,z) \
|
||||
SETOPT_CHECK(tool_setopt(x, TRUE, config, #y, y, z))
|
||||
|
||||
#define my_setopt_enum(x,y,z) \
|
||||
SETOPT_CHECK(tool_setopt_enum(x, config, #y, y, setopt_nv_ ## y, z))
|
||||
|
||||
#define my_setopt_flags(x,y,z) \
|
||||
SETOPT_CHECK(tool_setopt_flags(x, config, #y, y, setopt_nv_ ## y, z))
|
||||
|
||||
#define my_setopt_bitmask(x,y,z) \
|
||||
SETOPT_CHECK(tool_setopt_bitmask(x, config, #y, y, setopt_nv_ ## y, z))
|
||||
|
||||
#define my_setopt_httppost(x,y,z) \
|
||||
SETOPT_CHECK(tool_setopt_httppost(x, config, #y, y, z))
|
||||
|
||||
#define my_setopt_slist(x,y,z) \
|
||||
SETOPT_CHECK(tool_setopt_slist(x, config, #y, y, z))
|
||||
|
||||
#define res_setopt(x,y,z) tool_setopt(x, FALSE, config, #y, y, z)
|
||||
|
||||
#define res_setopt_str(x,y,z) tool_setopt(x, TRUE, config, #y, y, z)
|
||||
|
||||
#else /* CURL_DISABLE_LIBCURL_OPTION */
|
||||
|
||||
/* No --libcurl, so pass options directly to library */
|
||||
|
||||
#define my_setopt(x,y,z) \
|
||||
SETOPT_CHECK(curl_easy_setopt(x, y, z))
|
||||
|
||||
#define my_setopt_str(x,y,z) \
|
||||
SETOPT_CHECK(curl_easy_setopt(x, y, z))
|
||||
|
||||
#define my_setopt_enum(x,y,z) \
|
||||
SETOPT_CHECK(curl_easy_setopt(x, y, z))
|
||||
|
||||
#define my_setopt_flags(x,y,z) \
|
||||
SETOPT_CHECK(curl_easy_setopt(x, y, z))
|
||||
|
||||
#define my_setopt_bitmask(x,y,z) \
|
||||
SETOPT_CHECK(curl_easy_setopt(x, y, z))
|
||||
|
||||
#define my_setopt_httppost(x,y,z) \
|
||||
SETOPT_CHECK(curl_easy_setopt(x, y, z))
|
||||
|
||||
#define my_setopt_slist(x,y,z) \
|
||||
SETOPT_CHECK(curl_easy_setopt(x, y, z))
|
||||
|
||||
#define res_setopt(x,y,z) curl_easy_setopt(x,y,z)
|
||||
|
||||
#define res_setopt_str(x,y,z) curl_easy_setopt(x,y,z)
|
||||
|
||||
#endif /* CURL_DISABLE_LIBCURL_OPTION */
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_SETOPT_H */
|
||||
@@ -0,0 +1,75 @@
|
||||
#ifndef HEADER_CURL_TOOL_SETUP_H
|
||||
#define HEADER_CURL_TOOL_SETUP_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
#define CURL_NO_OLDIES
|
||||
|
||||
/*
|
||||
* curl_setup.h may define preprocessor macros such as _FILE_OFFSET_BITS and
|
||||
* _LARGE_FILES in order to support files larger than 2 GB. On platforms
|
||||
* where this happens it is mandatory that these macros are defined before
|
||||
* any system header file is included, otherwise file handling function
|
||||
* prototypes will be misdeclared and curl tool may not build properly;
|
||||
* therefore we must include curl_setup.h before curl.h when building curl.
|
||||
*/
|
||||
|
||||
#include "curl_setup.h" /* from the lib directory */
|
||||
|
||||
/*
|
||||
* curl tool certainly uses libcurl's external interface.
|
||||
*/
|
||||
|
||||
#include <curl/curl.h> /* external interface */
|
||||
|
||||
/*
|
||||
* Platform specific stuff.
|
||||
*/
|
||||
|
||||
#if defined(macintosh) && defined(__MRC__)
|
||||
# define main(x,y) curl_main(x,y)
|
||||
#endif
|
||||
|
||||
#ifdef TPF
|
||||
# undef select
|
||||
/* change which select is used for the curl command line tool */
|
||||
# define select(a,b,c,d,e) tpf_select_bsd(a,b,c,d,e)
|
||||
/* and turn off the progress meter */
|
||||
# define CONF_DEFAULT (0|CONF_NOPROGRESS)
|
||||
#endif
|
||||
|
||||
#ifndef OS
|
||||
# define OS "unknown"
|
||||
#endif
|
||||
|
||||
#ifndef UNPRINTABLE_CHAR
|
||||
/* define what to use for unprintable characters */
|
||||
# define UNPRINTABLE_CHAR '.'
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRDUP
|
||||
# include "strdup.h"
|
||||
# define strdup(ptr) curlx_strdup(ptr)
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_SETUP_H */
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
# include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_POLL_H
|
||||
# include <sys/poll.h>
|
||||
#elif defined(HAVE_POLL_H)
|
||||
# include <poll.h>
|
||||
#endif
|
||||
|
||||
#ifdef MSDOS
|
||||
# include <dos.h>
|
||||
#endif
|
||||
|
||||
#include "tool_sleep.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
void tool_go_sleep(long ms)
|
||||
{
|
||||
#if defined(MSDOS)
|
||||
delay(ms);
|
||||
#elif defined(WIN32)
|
||||
Sleep(ms);
|
||||
#elif defined(HAVE_POLL_FINE)
|
||||
poll((void *)0, 0, (int)ms);
|
||||
#else
|
||||
struct timeval timeout;
|
||||
timeout.tv_sec = ms / 1000L;
|
||||
ms = ms % 1000L;
|
||||
timeout.tv_usec = ms * 1000L;
|
||||
select(0, NULL, NULL, NULL, &timeout);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef HEADER_CURL_TOOL_SLEEP_H
|
||||
#define HEADER_CURL_TOOL_SLEEP_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
void tool_go_sleep(long ms);
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_SLEEP_H */
|
||||
|
||||
+203
-156
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -18,29 +18,20 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: urlglob.c,v 1.53 2008-10-14 09:12:44 bagder Exp $
|
||||
***************************************************************************/
|
||||
|
||||
/* client-local setup.h */
|
||||
#include "setup.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <curl/curl.h>
|
||||
#include "tool_setup.h"
|
||||
|
||||
#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
|
||||
#include <curl/mprintf.h>
|
||||
|
||||
#include "urlglob.h"
|
||||
#include "tool_urlglob.h"
|
||||
#include "tool_vms.h"
|
||||
|
||||
#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG)
|
||||
#include "memdebug.h"
|
||||
#endif
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
typedef enum {
|
||||
GLOB_OK,
|
||||
GLOB_NO_MEM,
|
||||
GLOB_ERROR
|
||||
} GlobCode;
|
||||
|
||||
@@ -61,22 +52,24 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
|
||||
/* processes a set expression with the point behind the opening '{'
|
||||
','-separated elements are collected until the next closing '}'
|
||||
*/
|
||||
URLPattern *pat;
|
||||
GlobCode res;
|
||||
bool done = FALSE;
|
||||
char* buf = glob->glob_buffer;
|
||||
URLPattern *pat;
|
||||
|
||||
pat = (URLPattern*)&glob->pattern[glob->size / 2];
|
||||
pat = &glob->pattern[glob->size / 2];
|
||||
/* patterns 0,1,2,... correspond to size=1,3,5,... */
|
||||
pat->type = UPTSet;
|
||||
pat->content.Set.size = 0;
|
||||
pat->content.Set.ptr_s = 0;
|
||||
/* FIXME: Here's a nasty zero size malloc */
|
||||
pat->content.Set.elements = (char**)malloc(0);
|
||||
++glob->size;
|
||||
pat->content.Set.elements = NULL;
|
||||
|
||||
while (!done) {
|
||||
bool skip;
|
||||
if(++glob->size > (GLOB_PATTERN_NUM*2)) {
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg), "too many globs used\n");
|
||||
return GLOB_ERROR;
|
||||
}
|
||||
|
||||
while(!done) {
|
||||
switch (*pattern) {
|
||||
case '\0': /* URL ended while set was still open */
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg),
|
||||
@@ -92,24 +85,55 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
|
||||
case ',':
|
||||
case '}': /* set element completed */
|
||||
*buf = '\0';
|
||||
pat->content.Set.elements =
|
||||
realloc(pat->content.Set.elements,
|
||||
(pat->content.Set.size + 1) * sizeof(char*));
|
||||
if (!pat->content.Set.elements) {
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory");
|
||||
return GLOB_ERROR;
|
||||
if(pat->content.Set.elements) {
|
||||
char **new_arr = realloc(pat->content.Set.elements,
|
||||
(pat->content.Set.size + 1) * sizeof(char*));
|
||||
if(!new_arr) {
|
||||
short elem;
|
||||
for(elem = 0; elem < pat->content.Set.size; elem++)
|
||||
Curl_safefree(pat->content.Set.elements[elem]);
|
||||
Curl_safefree(pat->content.Set.elements);
|
||||
pat->content.Set.ptr_s = 0;
|
||||
pat->content.Set.size = 0;
|
||||
}
|
||||
pat->content.Set.elements = new_arr;
|
||||
}
|
||||
else
|
||||
pat->content.Set.elements = malloc(sizeof(char*));
|
||||
if(!pat->content.Set.elements) {
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory\n");
|
||||
return GLOB_NO_MEM;
|
||||
}
|
||||
pat->content.Set.elements[pat->content.Set.size] =
|
||||
strdup(glob->glob_buffer);
|
||||
if(!pat->content.Set.elements[pat->content.Set.size]) {
|
||||
short elem;
|
||||
for(elem = 0; elem < pat->content.Set.size; elem++)
|
||||
Curl_safefree(pat->content.Set.elements[elem]);
|
||||
Curl_safefree(pat->content.Set.elements);
|
||||
pat->content.Set.ptr_s = 0;
|
||||
pat->content.Set.size = 0;
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory\n");
|
||||
return GLOB_NO_MEM;
|
||||
}
|
||||
++pat->content.Set.size;
|
||||
|
||||
if (*pattern == '}') {
|
||||
if(*pattern == '}') {
|
||||
/* entire set pattern completed */
|
||||
int wordamount;
|
||||
|
||||
/* always check for a literal (may be "") between patterns */
|
||||
if(GLOB_ERROR == glob_word(glob, ++pattern, ++pos, &wordamount))
|
||||
wordamount=1;
|
||||
res = glob_word(glob, ++pattern, ++pos, &wordamount);
|
||||
if(res) {
|
||||
short elem;
|
||||
for(elem = 0; elem < pat->content.Set.size; elem++)
|
||||
Curl_safefree(pat->content.Set.elements[elem]);
|
||||
Curl_safefree(pat->content.Set.elements);
|
||||
pat->content.Set.ptr_s = 0;
|
||||
pat->content.Set.size = 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
*amount = pat->content.Set.size * wordamount;
|
||||
|
||||
done = TRUE;
|
||||
@@ -127,24 +151,7 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
|
||||
return GLOB_ERROR;
|
||||
|
||||
case '\\': /* escaped character, skip '\' */
|
||||
switch(pattern[1]) {
|
||||
case '[':
|
||||
case ']':
|
||||
case '{':
|
||||
case '}':
|
||||
case ',':
|
||||
skip = TRUE;
|
||||
break;
|
||||
default:
|
||||
skip = FALSE;
|
||||
break;
|
||||
}
|
||||
if(skip) {
|
||||
if (*(buf+1) == '\0') { /* but no escaping of '\0'! */
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg),
|
||||
"illegal pattern at pos %zu\n", pos);
|
||||
return GLOB_ERROR;
|
||||
}
|
||||
if(pattern[1]) {
|
||||
++pattern;
|
||||
++pos;
|
||||
}
|
||||
@@ -168,23 +175,30 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
|
||||
*/
|
||||
URLPattern *pat;
|
||||
char *c;
|
||||
int wordamount=1;
|
||||
char sep;
|
||||
char sep2;
|
||||
int step;
|
||||
int rc;
|
||||
GlobCode res;
|
||||
int wordamount = 1;
|
||||
|
||||
pat = (URLPattern*)&glob->pattern[glob->size / 2];
|
||||
pat = &glob->pattern[glob->size / 2];
|
||||
/* patterns 0,1,2,... correspond to size=1,3,5,... */
|
||||
++glob->size;
|
||||
if(++glob->size > (GLOB_PATTERN_NUM*2)) {
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg), "too many globs used\n");
|
||||
return GLOB_ERROR;
|
||||
}
|
||||
|
||||
if (ISALPHA(*pattern)) { /* character range detected */
|
||||
if(ISALPHA(*pattern)) {
|
||||
/* character range detected */
|
||||
char min_c;
|
||||
char max_c;
|
||||
|
||||
pat->type = UPTCharRange;
|
||||
|
||||
rc = sscanf(pattern, "%c-%c%c%d%c", &min_c, &max_c, &sep, &step, &sep2);
|
||||
if ((rc < 3) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a'))) {
|
||||
|
||||
if((rc < 3) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a'))) {
|
||||
/* the pattern is not well-formed */
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg),
|
||||
"error: bad range specification after pos %zu\n", pos);
|
||||
@@ -201,12 +215,13 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
|
||||
|
||||
/* if there was a ":[num]" thing, use that as step or else use 1 */
|
||||
pat->content.CharRange.step =
|
||||
((sep == ':') && (rc == 5) && (sep2 == ']'))?step:1;
|
||||
((sep == ':') && (rc == 5) && (sep2 == ']')) ? step : 1;
|
||||
|
||||
pat->content.CharRange.ptr_c = pat->content.CharRange.min_c = min_c;
|
||||
pat->content.CharRange.max_c = max_c;
|
||||
}
|
||||
else if (ISDIGIT(*pattern)) { /* numeric range detected */
|
||||
else if(ISDIGIT(*pattern)) {
|
||||
/* numeric range detected */
|
||||
int min_n;
|
||||
int max_n;
|
||||
|
||||
@@ -215,28 +230,28 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
|
||||
|
||||
rc = sscanf(pattern, "%d-%d%c%d%c", &min_n, &max_n, &sep, &step, &sep2);
|
||||
|
||||
if ((rc < 2) || (min_n > max_n)) {
|
||||
if((rc < 2) || (min_n > max_n)) {
|
||||
/* the pattern is not well-formed */
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg),
|
||||
"error: bad range specification after pos %zu\n", pos);
|
||||
return GLOB_ERROR;
|
||||
}
|
||||
pat->content.NumRange.ptr_n = pat->content.NumRange.min_n = min_n;
|
||||
pat->content.NumRange.ptr_n = pat->content.NumRange.min_n = min_n;
|
||||
pat->content.NumRange.max_n = max_n;
|
||||
|
||||
/* if there was a ":[num]" thing, use that as step or else use 1 */
|
||||
pat->content.NumRange.step =
|
||||
((sep == ':') && (rc == 5) && (sep2 == ']'))?step:1;
|
||||
((sep == ':') && (rc == 5) && (sep2 == ']')) ? step : 1;
|
||||
|
||||
if (*pattern == '0') { /* leading zero specified */
|
||||
if(*pattern == '0') {
|
||||
/* leading zero specified */
|
||||
c = pattern;
|
||||
while (ISDIGIT(*c)) {
|
||||
while(ISDIGIT(*c)) {
|
||||
c++;
|
||||
++pat->content.NumRange.padlength; /* padding length is set for all
|
||||
instances of this pattern */
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg),
|
||||
@@ -254,18 +269,22 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
|
||||
|
||||
/* always check for a literal (may be "") between patterns */
|
||||
|
||||
if(GLOB_ERROR == glob_word(glob, c, pos + (c - pattern), &wordamount))
|
||||
res = glob_word(glob, c, pos + (c - pattern), &wordamount);
|
||||
if(res == GLOB_ERROR) {
|
||||
wordamount = 1;
|
||||
res = GLOB_OK;
|
||||
}
|
||||
|
||||
if(pat->type == UPTCharRange)
|
||||
*amount = (pat->content.CharRange.max_c -
|
||||
pat->content.CharRange.min_c + 1) *
|
||||
wordamount;
|
||||
else
|
||||
*amount = (pat->content.NumRange.max_n -
|
||||
pat->content.NumRange.min_n + 1) * wordamount;
|
||||
if(!res) {
|
||||
if(pat->type == UPTCharRange)
|
||||
*amount = wordamount * (pat->content.CharRange.max_c -
|
||||
pat->content.CharRange.min_c + 1);
|
||||
else
|
||||
*amount = wordamount * (pat->content.NumRange.max_n -
|
||||
pat->content.NumRange.min_n + 1);
|
||||
}
|
||||
|
||||
return GLOB_OK;
|
||||
return res; /* GLOB_OK or GLOB_NO_MEM */
|
||||
}
|
||||
|
||||
static GlobCode glob_word(URLGlob *glob, char *pattern,
|
||||
@@ -280,35 +299,39 @@ static GlobCode glob_word(URLGlob *glob, char *pattern,
|
||||
|
||||
*amount = 1; /* default is one single string */
|
||||
|
||||
while (*pattern != '\0' && *pattern != '{' && *pattern != '[') {
|
||||
if (*pattern == '}' || *pattern == ']')
|
||||
while(*pattern != '\0' && *pattern != '{' && *pattern != '[') {
|
||||
if(*pattern == '}' || *pattern == ']') {
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg),
|
||||
"unmatched close brace/bracket at pos %zu\n", pos);
|
||||
return GLOB_ERROR;
|
||||
}
|
||||
|
||||
/* only allow \ to escape known "special letters" */
|
||||
if (*pattern == '\\' &&
|
||||
if(*pattern == '\\' &&
|
||||
(*(pattern+1) == '{' || *(pattern+1) == '[' ||
|
||||
*(pattern+1) == '}' || *(pattern+1) == ']') ) {
|
||||
|
||||
/* escape character, skip '\' */
|
||||
++pattern;
|
||||
++pos;
|
||||
if (*pattern == '\0') /* but no escaping of '\0'! */
|
||||
return GLOB_ERROR;
|
||||
}
|
||||
*buf++ = *pattern++; /* copy character to literal */
|
||||
*buf++ = *pattern++; /* copy character to literal */
|
||||
++pos;
|
||||
}
|
||||
*buf = '\0';
|
||||
litindex = glob->size / 2;
|
||||
/* literals 0,1,2,... correspond to size=0,2,4,... */
|
||||
glob->literal[litindex] = strdup(glob->glob_buffer);
|
||||
if(!glob->literal[litindex])
|
||||
return GLOB_ERROR;
|
||||
if(!glob->literal[litindex]) {
|
||||
snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory\n");
|
||||
return GLOB_NO_MEM;
|
||||
}
|
||||
++glob->size;
|
||||
|
||||
switch (*pattern) {
|
||||
case '\0':
|
||||
break; /* singular URL processed */
|
||||
/* singular URL processed */
|
||||
break;
|
||||
|
||||
case '{':
|
||||
/* process set pattern */
|
||||
@@ -317,15 +340,14 @@ static GlobCode glob_word(URLGlob *glob, char *pattern,
|
||||
|
||||
case '[':
|
||||
/* process range pattern */
|
||||
res= glob_range(glob, ++pattern, ++pos, amount);
|
||||
res = glob_range(glob, ++pattern, ++pos, amount);
|
||||
break;
|
||||
}
|
||||
|
||||
if(GLOB_OK != res)
|
||||
/* free that strdup'ed string again */
|
||||
free(glob->literal[litindex]);
|
||||
if(res)
|
||||
Curl_safefree(glob->literal[litindex]);
|
||||
|
||||
return res; /* something got wrong */
|
||||
return res;
|
||||
}
|
||||
|
||||
int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error)
|
||||
@@ -336,35 +358,40 @@ int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error)
|
||||
*/
|
||||
URLGlob *glob_expand;
|
||||
int amount;
|
||||
char *glob_buffer = malloc(strlen(url)+1);
|
||||
char *glob_buffer;
|
||||
GlobCode res;
|
||||
|
||||
*glob = NULL;
|
||||
if(NULL == glob_buffer)
|
||||
|
||||
glob_buffer = malloc(strlen(url) + 1);
|
||||
if(!glob_buffer)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
glob_expand = calloc(sizeof(URLGlob), 1);
|
||||
if(NULL == glob_expand) {
|
||||
free(glob_buffer);
|
||||
glob_expand = calloc(1, sizeof(URLGlob));
|
||||
if(!glob_expand) {
|
||||
Curl_safefree(glob_buffer);
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
glob_expand->size = 0;
|
||||
glob_expand->urllen = strlen(url);
|
||||
glob_expand->glob_buffer = glob_buffer;
|
||||
glob_expand->beenhere=0;
|
||||
if(GLOB_OK == glob_word(glob_expand, url, 1, &amount))
|
||||
glob_expand->beenhere = 0;
|
||||
|
||||
res = glob_word(glob_expand, url, 1, &amount);
|
||||
if(!res)
|
||||
*urlnum = amount;
|
||||
else {
|
||||
if(error && glob_expand->errormsg[0]) {
|
||||
/* send error description to the error-stream */
|
||||
fprintf(error, "curl: (%d) [globbing] %s\n",
|
||||
CURLE_URL_MALFORMAT, glob_expand->errormsg);
|
||||
fprintf(error, "curl: (%d) [globbing] %s",
|
||||
(res == GLOB_NO_MEM) ? CURLE_OUT_OF_MEMORY : CURLE_URL_MALFORMAT,
|
||||
glob_expand->errormsg);
|
||||
}
|
||||
/* it failed, we cleanup */
|
||||
free(glob_buffer);
|
||||
free(glob_expand);
|
||||
glob_expand = NULL;
|
||||
Curl_safefree(glob_buffer);
|
||||
Curl_safefree(glob_expand);
|
||||
*urlnum = 1;
|
||||
return CURLE_URL_MALFORMAT;
|
||||
return (res == GLOB_NO_MEM) ? CURLE_OUT_OF_MEMORY : CURLE_URL_MALFORMAT;
|
||||
}
|
||||
|
||||
*glob = glob_expand;
|
||||
@@ -376,48 +403,52 @@ void glob_cleanup(URLGlob* glob)
|
||||
size_t i;
|
||||
int elem;
|
||||
|
||||
for (i = glob->size - 1; i < glob->size; --i) {
|
||||
if (!(i & 1)) { /* even indexes contain literals */
|
||||
free(glob->literal[i/2]);
|
||||
for(i = glob->size - 1; i < glob->size; --i) {
|
||||
if(!(i & 1)) { /* even indexes contain literals */
|
||||
Curl_safefree(glob->literal[i/2]);
|
||||
}
|
||||
else { /* odd indexes contain sets or ranges */
|
||||
if (glob->pattern[i/2].type == UPTSet) {
|
||||
for (elem = glob->pattern[i/2].content.Set.size - 1;
|
||||
if((glob->pattern[i/2].type == UPTSet) &&
|
||||
(glob->pattern[i/2].content.Set.elements)) {
|
||||
for(elem = glob->pattern[i/2].content.Set.size - 1;
|
||||
elem >= 0;
|
||||
--elem) {
|
||||
free(glob->pattern[i/2].content.Set.elements[elem]);
|
||||
Curl_safefree(glob->pattern[i/2].content.Set.elements[elem]);
|
||||
}
|
||||
free(glob->pattern[i/2].content.Set.elements);
|
||||
Curl_safefree(glob->pattern[i/2].content.Set.elements);
|
||||
}
|
||||
}
|
||||
}
|
||||
free(glob->glob_buffer);
|
||||
free(glob);
|
||||
Curl_safefree(glob->glob_buffer);
|
||||
Curl_safefree(glob);
|
||||
}
|
||||
|
||||
char *glob_next_url(URLGlob *glob)
|
||||
int glob_next_url(char **globbed, URLGlob *glob)
|
||||
{
|
||||
char *buf = glob->glob_buffer;
|
||||
URLPattern *pat;
|
||||
char *lit;
|
||||
size_t i;
|
||||
size_t j;
|
||||
size_t buflen = glob->urllen+1;
|
||||
size_t len;
|
||||
size_t buflen = glob->urllen + 1;
|
||||
char *buf = glob->glob_buffer;
|
||||
|
||||
if (!glob->beenhere)
|
||||
*globbed = NULL;
|
||||
|
||||
if(!glob->beenhere)
|
||||
glob->beenhere = 1;
|
||||
else {
|
||||
bool carry = TRUE;
|
||||
|
||||
/* implement a counter over the index ranges of all patterns,
|
||||
starting with the rightmost pattern */
|
||||
for (i = glob->size / 2 - 1; carry && i < glob->size; --i) {
|
||||
for(i = glob->size / 2 - 1; carry && (i < glob->size); --i) {
|
||||
carry = FALSE;
|
||||
pat = &glob->pattern[i];
|
||||
switch (pat->type) {
|
||||
case UPTSet:
|
||||
if (++pat->content.Set.ptr_s == pat->content.Set.size) {
|
||||
if((pat->content.Set.elements) &&
|
||||
(++pat->content.Set.ptr_s == pat->content.Set.size)) {
|
||||
pat->content.Set.ptr_s = 0;
|
||||
carry = TRUE;
|
||||
}
|
||||
@@ -425,29 +456,31 @@ char *glob_next_url(URLGlob *glob)
|
||||
case UPTCharRange:
|
||||
pat->content.CharRange.ptr_c = (char)(pat->content.CharRange.step +
|
||||
(int)((unsigned char)pat->content.CharRange.ptr_c));
|
||||
if (pat->content.CharRange.ptr_c > pat->content.CharRange.max_c) {
|
||||
if(pat->content.CharRange.ptr_c > pat->content.CharRange.max_c) {
|
||||
pat->content.CharRange.ptr_c = pat->content.CharRange.min_c;
|
||||
carry = TRUE;
|
||||
}
|
||||
break;
|
||||
case UPTNumRange:
|
||||
pat->content.NumRange.ptr_n += pat->content.NumRange.step;
|
||||
if (pat->content.NumRange.ptr_n > pat->content.NumRange.max_n) {
|
||||
if(pat->content.NumRange.ptr_n > pat->content.NumRange.max_n) {
|
||||
pat->content.NumRange.ptr_n = pat->content.NumRange.min_n;
|
||||
carry = TRUE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("internal error: invalid pattern type (%d)\n", (int)pat->type);
|
||||
exit (CURLE_FAILED_INIT);
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
}
|
||||
if (carry) /* first pattern ptr has run into overflow, done! */
|
||||
return NULL;
|
||||
if(carry) { /* first pattern ptr has run into overflow, done! */
|
||||
/* TODO: verify if this should actally return CURLE_OK. */
|
||||
return CURLE_OK; /* CURLE_OK to match previous behavior */
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < glob->size; ++j) {
|
||||
if (!(j&1)) { /* every other term (j even) is a literal */
|
||||
for(j = 0; j < glob->size; ++j) {
|
||||
if(!(j&1)) { /* every other term (j even) is a literal */
|
||||
lit = glob->literal[j/2];
|
||||
len = snprintf(buf, buflen, "%s", lit);
|
||||
buf += len;
|
||||
@@ -457,11 +490,13 @@ char *glob_next_url(URLGlob *glob)
|
||||
pat = &glob->pattern[j/2];
|
||||
switch(pat->type) {
|
||||
case UPTSet:
|
||||
len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
|
||||
snprintf(buf, buflen, "%s",
|
||||
pat->content.Set.elements[pat->content.Set.ptr_s]);
|
||||
buf += len;
|
||||
buflen -= len;
|
||||
if(pat->content.Set.elements) {
|
||||
len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
|
||||
snprintf(buf, buflen, "%s",
|
||||
pat->content.Set.elements[pat->content.Set.ptr_s]);
|
||||
buf += len;
|
||||
buflen -= len;
|
||||
}
|
||||
break;
|
||||
case UPTCharRange:
|
||||
*buf++ = pat->content.CharRange.ptr_c;
|
||||
@@ -475,52 +510,62 @@ char *glob_next_url(URLGlob *glob)
|
||||
break;
|
||||
default:
|
||||
printf("internal error: invalid pattern type (%d)\n", (int)pat->type);
|
||||
exit (CURLE_FAILED_INIT);
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
}
|
||||
}
|
||||
*buf = '\0';
|
||||
return strdup(glob->glob_buffer);
|
||||
|
||||
*globbed = strdup(glob->glob_buffer);
|
||||
if(!*globbed)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
char *glob_match_url(char *filename, URLGlob *glob)
|
||||
int glob_match_url(char **result, char *filename, URLGlob *glob)
|
||||
{
|
||||
char *target;
|
||||
size_t allocsize;
|
||||
size_t stringlen=0;
|
||||
char numbuf[18];
|
||||
char *appendthis = NULL;
|
||||
size_t appendlen = 0;
|
||||
size_t stringlen = 0;
|
||||
|
||||
*result = NULL;
|
||||
|
||||
/* We cannot use the glob_buffer for storage here since the filename may
|
||||
* be longer than the URL we use. We allocate a good start size, then
|
||||
* we need to realloc in case of need.
|
||||
*/
|
||||
allocsize=strlen(filename)+1; /* make it at least one byte to store the
|
||||
trailing zero */
|
||||
allocsize = strlen(filename) + 1; /* make it at least one byte to store the
|
||||
trailing zero */
|
||||
target = malloc(allocsize);
|
||||
if(NULL == target)
|
||||
return NULL; /* major failure */
|
||||
if(!target)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
while (*filename) {
|
||||
if (*filename == '#' && ISDIGIT(filename[1])) {
|
||||
while(*filename) {
|
||||
if(*filename == '#' && ISDIGIT(filename[1])) {
|
||||
unsigned long i;
|
||||
char *ptr = filename;
|
||||
unsigned long num = strtoul(&filename[1], &filename, 10);
|
||||
i = num-1;
|
||||
i = num - 1UL;
|
||||
|
||||
if (num && (i <= glob->size / 2)) {
|
||||
if(num && (i <= glob->size / 2)) {
|
||||
URLPattern pat = glob->pattern[i];
|
||||
switch (pat.type) {
|
||||
case UPTSet:
|
||||
appendthis = pat.content.Set.elements[pat.content.Set.ptr_s];
|
||||
appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]);
|
||||
if(pat.content.Set.elements) {
|
||||
appendthis = pat.content.Set.elements[pat.content.Set.ptr_s];
|
||||
appendlen =
|
||||
strlen(pat.content.Set.elements[pat.content.Set.ptr_s]);
|
||||
}
|
||||
break;
|
||||
case UPTCharRange:
|
||||
numbuf[0]=pat.content.CharRange.ptr_c;
|
||||
numbuf[1]=0;
|
||||
appendthis=numbuf;
|
||||
appendlen=1;
|
||||
numbuf[0] = pat.content.CharRange.ptr_c;
|
||||
numbuf[1] = 0;
|
||||
appendthis = numbuf;
|
||||
appendlen = 1;
|
||||
break;
|
||||
case UPTNumRange:
|
||||
snprintf(numbuf, sizeof(numbuf), "%0*d",
|
||||
@@ -532,36 +577,38 @@ char *glob_match_url(char *filename, URLGlob *glob)
|
||||
default:
|
||||
printf("internal error: invalid pattern type (%d)\n",
|
||||
(int)pat.type);
|
||||
free(target);
|
||||
return NULL;
|
||||
Curl_safefree(target);
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* #[num] out of range, use the #[num] in the output */
|
||||
filename = ptr;
|
||||
appendthis=filename++;
|
||||
appendlen=1;
|
||||
appendthis = filename++;
|
||||
appendlen = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
appendthis=filename++;
|
||||
appendlen=1;
|
||||
appendthis = filename++;
|
||||
appendlen = 1;
|
||||
}
|
||||
if(appendlen + stringlen >= allocsize) {
|
||||
char *newstr;
|
||||
/* we append a single byte to allow for the trailing byte to be appended
|
||||
at the end of this function outside the while() loop */
|
||||
allocsize = (appendlen + stringlen)*2;
|
||||
newstr=realloc(target, allocsize + 1);
|
||||
if(NULL ==newstr) {
|
||||
free(target);
|
||||
return NULL;
|
||||
allocsize = (appendlen + stringlen) * 2;
|
||||
newstr = realloc(target, allocsize + 1);
|
||||
if(!newstr) {
|
||||
Curl_safefree(target);
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
target=newstr;
|
||||
target = newstr;
|
||||
}
|
||||
memcpy(&target[stringlen], appendthis, appendlen);
|
||||
stringlen += appendlen;
|
||||
}
|
||||
target[stringlen]= '\0';
|
||||
return target;
|
||||
*result = target;
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
+19
-12
@@ -1,5 +1,5 @@
|
||||
#ifndef __URLGLOB_H
|
||||
#define __URLGLOB_H
|
||||
#ifndef HEADER_CURL_TOOL_URLGLOB_H
|
||||
#define HEADER_CURL_TOOL_URLGLOB_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
@@ -7,7 +7,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -20,10 +20,11 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: urlglob.h,v 1.17 2005/11/10 22:11:02 bagder Exp $
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
typedef enum {
|
||||
UPTSet=1,
|
||||
UPTSet = 1,
|
||||
UPTCharRange,
|
||||
UPTNumRange
|
||||
} URLPatternType;
|
||||
@@ -37,12 +38,14 @@ typedef struct {
|
||||
short ptr_s;
|
||||
} Set;
|
||||
struct {
|
||||
char min_c, max_c;
|
||||
char min_c;
|
||||
char max_c;
|
||||
char ptr_c;
|
||||
int step;
|
||||
} CharRange;
|
||||
struct {
|
||||
int min_n, max_n;
|
||||
int min_n;
|
||||
int max_n;
|
||||
short padlength;
|
||||
int ptr_n;
|
||||
int step;
|
||||
@@ -50,9 +53,12 @@ typedef struct {
|
||||
} content;
|
||||
} URLPattern;
|
||||
|
||||
/* the total number of globs supported */
|
||||
#define GLOB_PATTERN_NUM 9
|
||||
|
||||
typedef struct {
|
||||
char* literal[10];
|
||||
URLPattern pattern[9];
|
||||
char *literal[10];
|
||||
URLPattern pattern[GLOB_PATTERN_NUM+1];
|
||||
size_t size;
|
||||
size_t urllen;
|
||||
char *glob_buffer;
|
||||
@@ -61,8 +67,9 @@ typedef struct {
|
||||
} URLGlob;
|
||||
|
||||
int glob_url(URLGlob**, char*, int *, FILE *);
|
||||
char* glob_next_url(URLGlob*);
|
||||
char* glob_match_url(char*, URLGlob *);
|
||||
int glob_next_url(char **, URLGlob *);
|
||||
int glob_match_url(char **, char*, URLGlob *);
|
||||
void glob_cleanup(URLGlob* glob);
|
||||
|
||||
#endif
|
||||
#endif /* HEADER_CURL_TOOL_URLGLOB_H */
|
||||
|
||||
+17
-14
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -18,16 +18,16 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: curlutil.c,v 1.7 2008-07-10 07:16:45 yangtse Exp $
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "setup.h"
|
||||
#include "tool_util.h"
|
||||
|
||||
#include "curlutil.h"
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
#if defined(WIN32) && !defined(MSDOS)
|
||||
|
||||
struct timeval cutil_tvnow(void)
|
||||
struct timeval tool_tvnow(void)
|
||||
{
|
||||
/*
|
||||
** GetTickCount() is available on _all_ Windows versions from W95 up
|
||||
@@ -43,7 +43,7 @@ struct timeval cutil_tvnow(void)
|
||||
|
||||
#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
|
||||
|
||||
struct timeval cutil_tvnow(void)
|
||||
struct timeval tool_tvnow(void)
|
||||
{
|
||||
/*
|
||||
** clock_gettime() is granted to be increased monotonically when the
|
||||
@@ -77,7 +77,7 @@ struct timeval cutil_tvnow(void)
|
||||
|
||||
#elif defined(HAVE_GETTIMEOFDAY)
|
||||
|
||||
struct timeval cutil_tvnow(void)
|
||||
struct timeval tool_tvnow(void)
|
||||
{
|
||||
/*
|
||||
** gettimeofday() is not granted to be increased monotonically, due to
|
||||
@@ -91,7 +91,7 @@ struct timeval cutil_tvnow(void)
|
||||
|
||||
#else
|
||||
|
||||
struct timeval cutil_tvnow(void)
|
||||
struct timeval tool_tvnow(void)
|
||||
{
|
||||
/*
|
||||
** time() returns the value of time in seconds since the Epoch.
|
||||
@@ -110,25 +110,28 @@ struct timeval cutil_tvnow(void)
|
||||
*
|
||||
* Returns: the time difference in number of milliseconds.
|
||||
*/
|
||||
long cutil_tvdiff(struct timeval newer, struct timeval older)
|
||||
long tool_tvdiff(struct timeval newer, struct timeval older)
|
||||
{
|
||||
return (newer.tv_sec-older.tv_sec)*1000+
|
||||
(newer.tv_usec-older.tv_usec)/1000;
|
||||
}
|
||||
|
||||
/*
|
||||
* Same as cutil_tvdiff but with full usec resolution.
|
||||
* Same as tool_tvdiff but with full usec resolution.
|
||||
*
|
||||
* Returns: the time difference in seconds with subsecond resolution.
|
||||
*/
|
||||
double cutil_tvdiff_secs(struct timeval newer, struct timeval older)
|
||||
double tool_tvdiff_secs(struct timeval newer, struct timeval older)
|
||||
{
|
||||
return (double)(newer.tv_sec-older.tv_sec)+
|
||||
(double)(newer.tv_usec-older.tv_usec)/1000000.0;
|
||||
if(newer.tv_sec != older.tv_sec)
|
||||
return (double)(newer.tv_sec-older.tv_sec)+
|
||||
(double)(newer.tv_usec-older.tv_usec)/1000000.0;
|
||||
else
|
||||
return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
|
||||
}
|
||||
|
||||
/* return the number of seconds in the given input timeval struct */
|
||||
long cutil_tvlong(struct timeval t1)
|
||||
long tool_tvlong(struct timeval t1)
|
||||
{
|
||||
return t1.tv_sec;
|
||||
}
|
||||
+19
-13
@@ -1,5 +1,5 @@
|
||||
#ifndef __CURL_SRC_UTIL_H
|
||||
#define __CURL_SRC_UTIL_H
|
||||
#ifndef HEADER_CURL_TOOL_UTIL_H
|
||||
#define HEADER_CURL_TOOL_UTIL_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
@@ -7,7 +7,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -20,13 +20,10 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: curlutil.h,v 1.1 2007-02-20 12:13:15 yangtse Exp $
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#include "setup.h"
|
||||
|
||||
|
||||
struct timeval cutil_tvnow(void);
|
||||
struct timeval tool_tvnow(void);
|
||||
|
||||
/*
|
||||
* Make sure that the first argument (t1) is the more recent time and t2 is
|
||||
@@ -34,17 +31,26 @@ struct timeval cutil_tvnow(void);
|
||||
*
|
||||
* Returns: the time difference in number of milliseconds.
|
||||
*/
|
||||
long cutil_tvdiff(struct timeval t1, struct timeval t2);
|
||||
long tool_tvdiff(struct timeval t1, struct timeval t2);
|
||||
|
||||
/*
|
||||
* Same as cutil_tvdiff but with full usec resolution.
|
||||
* Same as tool_tvdiff but with full usec resolution.
|
||||
*
|
||||
* Returns: the time difference in seconds with subsecond resolution.
|
||||
*/
|
||||
double cutil_tvdiff_secs(struct timeval t1, struct timeval t2);
|
||||
double tool_tvdiff_secs(struct timeval t1, struct timeval t2);
|
||||
|
||||
long cutil_tvlong(struct timeval t1);
|
||||
long tool_tvlong(struct timeval t1);
|
||||
|
||||
#undef tvnow
|
||||
#undef tvdiff
|
||||
#undef tvdiff_secs
|
||||
#undef tvlong
|
||||
|
||||
#endif /* __CURL_SRC_UTIL_H */
|
||||
#define tvnow() tool_tvnow()
|
||||
#define tvdiff(a,b) tool_tvdiff((a), (b))
|
||||
#define tvdiff_secs(a,b) tool_tvdiff_secs((a), (b))
|
||||
#define tvlong(a) tool_tvlong((a))
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_UTIL_H */
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef HEADER_CURL_TOOL_VERSION_H
|
||||
#define HEADER_CURL_TOOL_VERSION_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include <curl/curlver.h>
|
||||
|
||||
#define CURL_NAME "curl"
|
||||
#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
|
||||
#define CURL_VERSION "7.29.0"
|
||||
#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
|
||||
#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
|
||||
#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
|
||||
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_VERSION_H */
|
||||
@@ -0,0 +1,219 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef __VMS
|
||||
|
||||
#if defined(__DECC) && !defined(__VAX) && \
|
||||
defined(__CRTL_VER) && (__CRTL_VER >= 70301000)
|
||||
#include <unixlib.h>
|
||||
#endif
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
#include "curlx.h"
|
||||
|
||||
#include "curlmsg_vms.h"
|
||||
#include "tool_vms.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
void decc$__posix_exit(int __status);
|
||||
void decc$exit(int __status);
|
||||
|
||||
static int vms_shell = -1;
|
||||
|
||||
/* VMS has a DCL shell and and also has Unix shells ported to it.
|
||||
* When curl is running under a Unix shell, we want it to be as much
|
||||
* like Unix as possible.
|
||||
*/
|
||||
int is_vms_shell(void)
|
||||
{
|
||||
char *shell;
|
||||
|
||||
/* Have we checked the shell yet? */
|
||||
if(vms_shell >= 0)
|
||||
return vms_shell;
|
||||
|
||||
shell = getenv("SHELL");
|
||||
|
||||
/* No shell, means DCL */
|
||||
if(shell == NULL) {
|
||||
vms_shell = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Have to make sure some one did not set shell to DCL */
|
||||
if(strcmp(shell, "DCL") == 0) {
|
||||
vms_shell = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
vms_shell = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* VMS has two exit() routines. When running under a Unix style shell, then
|
||||
* Unix style and the __posix_exit() routine is used.
|
||||
*
|
||||
* When running under the DCL shell, then the VMS encoded codes and decc$exit()
|
||||
* is used.
|
||||
*
|
||||
* We can not use exit() or return a code from main() because the actual
|
||||
* routine called depends on both the compiler version, compile options, and
|
||||
* feature macro settings, and one of the exit routines is hidden at compile
|
||||
* time.
|
||||
*
|
||||
* Since we want Curl to work properly under the VMS DCL shell and Unix
|
||||
* shells under VMS, this routine should compile correctly regardless of
|
||||
* the settings.
|
||||
*/
|
||||
|
||||
void vms_special_exit(int code, int vms_show)
|
||||
{
|
||||
int vms_code;
|
||||
|
||||
/* The Posix exit mode is only available after VMS 7.0 */
|
||||
#if __CRTL_VER >= 70000000
|
||||
if(is_vms_shell() == 0) {
|
||||
decc$__posix_exit(code);
|
||||
}
|
||||
#endif
|
||||
|
||||
if(code > CURL_LAST) { /* If CURL_LAST exceeded then */
|
||||
vms_code = CURL_LAST; /* curlmsg.h is out of sync. */
|
||||
}
|
||||
else {
|
||||
vms_code = vms_cond[code] | vms_show;
|
||||
}
|
||||
decc$exit(vms_code);
|
||||
}
|
||||
|
||||
#if defined(__DECC) && !defined(__VAX) && \
|
||||
defined(__CRTL_VER) && (__CRTL_VER >= 70301000)
|
||||
|
||||
/*
|
||||
* 2004-09-19 SMS.
|
||||
*
|
||||
* decc_init()
|
||||
*
|
||||
* On non-VAX systems, use LIB$INITIALIZE to set a collection of C
|
||||
* RTL features without using the DECC$* logical name method, nor
|
||||
* requiring the user to define the corresponding logical names.
|
||||
*/
|
||||
|
||||
/* Structure to hold a DECC$* feature name and its desired value. */
|
||||
typedef struct {
|
||||
char *name;
|
||||
int value;
|
||||
} decc_feat_t;
|
||||
|
||||
/* Array of DECC$* feature names and their desired values. */
|
||||
static decc_feat_t decc_feat_array[] = {
|
||||
/* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */
|
||||
{ "DECC$ARGV_PARSE_STYLE", 1 },
|
||||
/* Preserve case for file names on ODS5 disks. */
|
||||
{ "DECC$EFS_CASE_PRESERVE", 1 },
|
||||
/* Enable multiple dots (and most characters) in ODS5 file names,
|
||||
while preserving VMS-ness of ";version". */
|
||||
{ "DECC$EFS_CHARSET", 1 },
|
||||
/* List terminator. */
|
||||
{ (char *)NULL, 0 }
|
||||
};
|
||||
|
||||
/* Flag to sense if decc_init() was called. */
|
||||
static int decc_init_done = -1;
|
||||
|
||||
/* LIB$INITIALIZE initialization function. */
|
||||
static void decc_init(void)
|
||||
{
|
||||
int feat_index;
|
||||
int feat_value;
|
||||
int feat_value_max;
|
||||
int feat_value_min;
|
||||
int i;
|
||||
int sts;
|
||||
|
||||
/* Set the global flag to indicate that LIB$INITIALIZE worked. */
|
||||
decc_init_done = 1;
|
||||
|
||||
/* Loop through all items in the decc_feat_array[]. */
|
||||
for(i = 0; decc_feat_array[i].name != NULL; i++) {
|
||||
|
||||
/* Get the feature index. */
|
||||
feat_index = decc$feature_get_index( decc_feat_array[i].name);
|
||||
|
||||
if(feat_index >= 0) {
|
||||
/* Valid item. Collect its properties. */
|
||||
feat_value = decc$feature_get_value( feat_index, 1);
|
||||
feat_value_min = decc$feature_get_value( feat_index, 2);
|
||||
feat_value_max = decc$feature_get_value( feat_index, 3);
|
||||
|
||||
if((decc_feat_array[i].value >= feat_value_min) &&
|
||||
(decc_feat_array[i].value <= feat_value_max)) {
|
||||
/* Valid value. Set it if necessary. */
|
||||
if(feat_value != decc_feat_array[i].value) {
|
||||
sts = decc$feature_set_value( feat_index, 1,
|
||||
decc_feat_array[i].value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Invalid DECC feature value. */
|
||||
printf(" INVALID DECC FEATURE VALUE, %d: %d <= %s <= %d.\n",
|
||||
feat_value,
|
||||
feat_value_min, decc_feat_array[i].name, feat_value_max);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Invalid DECC feature name. */
|
||||
printf(" UNKNOWN DECC FEATURE: %s.\n", decc_feat_array[i].name);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */
|
||||
|
||||
#pragma nostandard
|
||||
|
||||
/* Establish the LIB$INITIALIZE PSECTs, with proper alignment and
|
||||
other attributes. Note that "nopic" is significant only on VAX. */
|
||||
#pragma extern_model save
|
||||
#pragma extern_model strict_refdef "LIB$INITIALIZ" 2, nopic, nowrt
|
||||
const int spare[8] = {0};
|
||||
#pragma extern_model strict_refdef "LIB$INITIALIZE" 2, nopic, nowrt
|
||||
void (*const x_decc_init)() = decc_init;
|
||||
#pragma extern_model restore
|
||||
|
||||
/* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */
|
||||
#pragma extern_model save
|
||||
int LIB$INITIALIZE(void);
|
||||
#pragma extern_model strict_refdef
|
||||
int dmy_lib$initialize = (int) LIB$INITIALIZE;
|
||||
#pragma extern_model restore
|
||||
|
||||
#pragma standard
|
||||
|
||||
#endif /* __DECC && !__VAX && __CRTL_VER && __CRTL_VER >= 70301000 */
|
||||
|
||||
#endif /* __VMS */
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef HEADER_CURL_TOOL_VMS_H
|
||||
#define HEADER_CURL_TOOL_VMS_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef __VMS
|
||||
|
||||
/*
|
||||
* Forward-declaration of global variable vms_show defined
|
||||
* in tool_main.c, used in main() as parameter for function
|
||||
* vms_special_exit() to allow proper curl tool exiting.
|
||||
*/
|
||||
extern int vms_show;
|
||||
|
||||
int is_vms_shell(void);
|
||||
void vms_special_exit(int code, int vms_show);
|
||||
|
||||
#undef exit
|
||||
#define exit(__code) vms_special_exit((__code), (0))
|
||||
|
||||
#define VMS_STS(c,f,e,s) (((c&0xF)<<28)|((f&0xFFF)<<16)|((e&0x1FFF)<3)|(s&7))
|
||||
#define VMSSTS_HIDE VMS_STS(1,0,0,0)
|
||||
|
||||
#endif /* __VMS */
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_VMS_H */
|
||||
|
||||
+12
-15
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@@ -18,23 +18,22 @@
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
* $Id: writeenv.c,v 1.11 2008-11-03 15:51:40 giva Exp $
|
||||
***************************************************************************/
|
||||
|
||||
#include "setup.h"
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef USE_ENVIRONMENT
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include "writeenv.h"
|
||||
|
||||
#ifdef __riscos__
|
||||
#include <kernel.h>
|
||||
# include <kernel.h>
|
||||
#endif
|
||||
|
||||
#define _MPRINTF_REPLACE /* use our functions only */
|
||||
#include <curl/mprintf.h>
|
||||
|
||||
#include "tool_writeenv.h"
|
||||
|
||||
#include "memdebug.h" /* keep this as LAST include */
|
||||
|
||||
static const struct
|
||||
{
|
||||
const char * name;
|
||||
@@ -69,9 +68,7 @@ static void internalSetEnv(const char * name, char * value)
|
||||
#ifdef __riscos__
|
||||
_kernel_setenv(name, value);
|
||||
#elif defined (CURLDEBUG)
|
||||
extern FILE *curl_debuglogfile;
|
||||
if (curl_debuglogfile)
|
||||
fprintf (curl_debuglogfile, "ENV %s = %s\n", name, value);
|
||||
curl_memlog("ENV %s = %s\n", name, value);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
@@ -83,17 +80,17 @@ void ourWriteEnv(CURL *curl)
|
||||
long longinfo;
|
||||
double doubleinfo;
|
||||
|
||||
for (i=0; variables[i].name; i++) {
|
||||
for(i=0; variables[i].name; i++) {
|
||||
switch (variables[i].type) {
|
||||
case writeenv_STRING:
|
||||
if (curl_easy_getinfo(curl, variables[i].id, &string) == CURLE_OK)
|
||||
if(curl_easy_getinfo(curl, variables[i].id, &string) == CURLE_OK)
|
||||
internalSetEnv(variables[i].name, string);
|
||||
else
|
||||
internalSetEnv(variables[i].name, NULL);
|
||||
break;
|
||||
|
||||
case writeenv_LONG:
|
||||
if (curl_easy_getinfo(curl, variables[i].id, &longinfo) == CURLE_OK) {
|
||||
if(curl_easy_getinfo(curl, variables[i].id, &longinfo) == CURLE_OK) {
|
||||
curl_msprintf(numtext, "%5ld", longinfo);
|
||||
internalSetEnv(variables[i].name, numtext);
|
||||
}
|
||||
@@ -101,7 +98,7 @@ void ourWriteEnv(CURL *curl)
|
||||
internalSetEnv(variables[i].name, NULL);
|
||||
break;
|
||||
case writeenv_DOUBLE:
|
||||
if (curl_easy_getinfo(curl, variables[i].id, &doubleinfo) == CURLE_OK) {
|
||||
if(curl_easy_getinfo(curl, variables[i].id, &doubleinfo) == CURLE_OK) {
|
||||
curl_msprintf(numtext, "%6.2f", doubleinfo);
|
||||
internalSetEnv(variables[i].name, numtext);
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef HEADER_CURL_TOOL_WRITEENV_H
|
||||
#define HEADER_CURL_TOOL_WRITEENV_H
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#include "tool_setup.h"
|
||||
|
||||
#ifdef USE_ENVIRONMENT
|
||||
|
||||
void ourWriteEnv(CURL *curl);
|
||||
|
||||
#else
|
||||
# define ourWriteEnv(x) Curl_nop_stmt
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_TOOL_WRITEENV_H */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user