diff options
Diffstat (limited to 'Utilities/cmtar')
38 files changed, 0 insertions, 8329 deletions
diff --git a/Utilities/cmtar/CMakeLists.txt b/Utilities/cmtar/CMakeLists.txt deleted file mode 100644 index 8b03a17..0000000 --- a/Utilities/cmtar/CMakeLists.txt +++ /dev/null @@ -1,396 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.4) -IF(COMMAND CMAKE_POLICY) - CMAKE_POLICY(SET CMP0003 NEW) -ENDIF(COMMAND CMAKE_POLICY) - -PROJECT(LIBTAR C) - -INCLUDE_REGULAR_EXPRESSION("^.*$") - -# We need ansi c-flags, especially on HP -SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}") -SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS}) - -# Disable warnings on Borland to avoid changing 3rd party code. -IF(BORLAND) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-") -ENDIF(BORLAND) - -# If we are on AIX, do the _ALL_SOURCE magic -IF(${CMAKE_SYSTEM_NAME} MATCHES AIX) - SET(_ALL_SOURCE 1) -ENDIF(${CMAKE_SYSTEM_NAME} MATCHES AIX) - -# Include all the necessary files for macros -#SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake") -# Include all the necessary files for macros -INCLUDE (CheckIncludeFiles) -INCLUDE (CheckFunctionExists) -INCLUDE (CheckTypeSize) -INCLUDE (CheckSymbolExists) -INCLUDE (TestBigEndian) - -MACRO(MANGLE_VARIABLE_NAME str var prefix) - STRING(TOUPPER "${str}" mangle_variable_name_var) - STRING(REGEX REPLACE "[/. ]" "_" mangle_variable_name_var "${mangle_variable_name_var}") - SET(${var} "${prefix}${mangle_variable_name_var}") -ENDMACRO(MANGLE_VARIABLE_NAME str var) - -# Check if header file exists and add it to the list. -MACRO(CHECK_INCLUDE_FILE_CONCAT FILE) - MANGLE_VARIABLE_NAME("${FILE}" "CHECK_INCLUDE_FILE_CONCAT_VAR" "HAVE_") - CHECK_INCLUDE_FILES("${HEADER_INCLUDES};${FILE}" ${CHECK_INCLUDE_FILE_CONCAT_VAR}) - IF(${CHECK_INCLUDE_FILE_CONCAT_VAR}) - SET(HEADER_INCLUDES ${HEADER_INCLUDES} ${FILE}) - ENDIF(${CHECK_INCLUDE_FILE_CONCAT_VAR}) -ENDMACRO(CHECK_INCLUDE_FILE_CONCAT) - -MACRO(CHECK_FUNCTION_EXISTS_EX FUNC) - MANGLE_VARIABLE_NAME("${FUNC}" "CHECK_FUNCTION_EXISTS_EX_VAR" "HAVE_") - CHECK_FUNCTION_EXISTS("${FUNC}" "${CHECK_FUNCTION_EXISTS_EX_VAR}") -ENDMACRO(CHECK_FUNCTION_EXISTS_EX) - -MACRO(CHECK_SYMBOL_EXISTS_EX SYM) - MANGLE_VARIABLE_NAME("${SYM}" "CHECK_SYMBOL_EXISTS_EX_VAR" "HAVE_") - CHECK_SYMBOL_EXISTS("${SYM}" "${HEADER_INCLUDES}" "${CHECK_SYMBOL_EXISTS_EX_VAR}") -ENDMACRO(CHECK_SYMBOL_EXISTS_EX) - -#MACRO(CHECK_TYPE_SIZE_EX type defualt_size) -# MANGLE_VARIABLE_NAME("${type}" "check_type_size_var" "") -# CHECK_TYPE_SIZE("${type}" "SIZEOF_${check_type_size_var}") -# IF(HAVE_${check_type_size_var}) -# SET("HAVE_${check_type_size_var}" 1) -# ELSE(HAVE_${check_type_size_var}) -# ENDIF(HAVE_${check_type_size_var}) -#ENDMACRO(CHECK_TYPE_SIZE_EX) - - - -INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") - -#check for stdc headers -CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) - -#check for other headers used by the program -FOREACH(file - "ctype.h" - "fnmatch.h" - "inttypes.h" - "io.h" - "libgen.h" - "memory.h" - "sys/mkdev.h" - "stdint.h" - "stdlib.h" - "stdio.h" - "string.h" - "strings.h" - "sys/param.h" - "sys/types.h" - "sys/stat.h" - "unistd.h" - "glob.h" - "dirent.h" - "sys/sysmacros.h" - ) - CHECK_INCLUDE_FILE_CONCAT("${file}") -ENDFOREACH(file) - -#check for the functions used by the program -FOREACH(func - basename - dirname - fnmatch - lchown - snprintf - strlcpy - strmode - strsep - strdup - strftime - vsnprintf - glob - major - minor - makedev - ) - CHECK_SYMBOL_EXISTS_EX("${func}") -ENDFOREACH(func) - -# on Syllable lchown() is there, but always returns "Not implemented" -IF("${CMAKE_SYSTEM_NAME}" MATCHES syllable) - SET(HAVE_LCHOWN 0) -ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES syllable) - -CHECK_TYPE_SIZE("dev_t" SIZEOF_DEV_T) -IF(HAVE_SIZEOF_DEV_T) - SET (HAVE_DEV_T 1) -ELSE(HAVE_SIZEOF_DEV_T) - SET (HAVE_DEV_T 0) - SET (dev_t "unsigned long") -ENDIF(HAVE_SIZEOF_DEV_T) - -CHECK_TYPE_SIZE("major_t" SIZEOF_MAJOR_T) -IF(HAVE_SIZEOF_MAJOR_T) - SET (HAVE_MAJOR_T 1) -ELSE(HAVE_SIZEOF_MAJOR_T) - SET (HAVE_MAJOR_T 0) - SET (major_t "unsigned int") -ENDIF(HAVE_SIZEOF_MAJOR_T) - -CHECK_TYPE_SIZE("minor_t" SIZEOF_MINOR_T) -IF(HAVE_SIZEOF_MINOR_T) - SET (HAVE_MINOR_T 1) -ELSE(HAVE_SIZEOF_MINOR_T) - SET (HAVE_MINOR_T 0) - SET (minor_t "unsigned int") -ENDIF(HAVE_SIZEOF_MINOR_T) - -CHECK_TYPE_SIZE("nlink_t" SIZEOF_NLINK_T) -IF(HAVE_SIZEOF_NLINK_T) - SET (HAVE_NLINK_T 1) -ELSE(HAVE_SIZEOF_NLINK_T) - SET (HAVE_NLINK_T 0) - SET (nlink_t "unsigned short") -ENDIF(HAVE_SIZEOF_NLINK_T) - -CHECK_TYPE_SIZE("uint64_t" SIZEOF_UINT64_T) -IF(HAVE_SIZEOF_UINT64_T) - SET (HAVE_UINT64_T 1) -ELSE(HAVE_SIZEOF_UINT64_T) - SET (HAVE_UINT64_T 0) - SET (uint64_t "long long") -ENDIF(HAVE_SIZEOF_UINT64_T) - -CHECK_TYPE_SIZE("gid_t" SIZEOF_GID_T) -IF(HAVE_SIZEOF_GID_T) - SET (HAVE_GID_T 1) -ELSE(HAVE_SIZEOF_GID_T) - SET (HAVE_GID_T 0) - SET (gid_t "int") -ENDIF(HAVE_SIZEOF_GID_T) - -CHECK_TYPE_SIZE("mode_t" SIZEOF_MODE_T) -IF(HAVE_SIZEOF_MODE_T) - SET (HAVE_MODE_T 1) -ELSE(HAVE_SIZEOF_MODE_T) - SET (HAVE_MODE_T 0) - SET (mode_t "int") -ENDIF(HAVE_SIZEOF_MODE_T) - -CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T) -IF(HAVE_SIZEOF_OFF_T) - SET (HAVE_OFF_T 1) -ELSE(HAVE_SIZEOF_OFF_T) - SET (HAVE_OFF_T 0) - SET (off_t "long") -ENDIF(HAVE_SIZEOF_OFF_T) -CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T) -IF(HAVE_SIZEOF_SIZE_T) - SET (HAVE_SIZE_T 1) -ELSE(HAVE_SIZEOF_SIZE_T) - SET (HAVE_SIZE_T 0) - SET (size_t "unsigned") -ENDIF(HAVE_SIZEOF_SIZE_T) - -CHECK_TYPE_SIZE("ssize_t" SIZEOF_SSIZE_T) -IF(HAVE_SIZEOF_SSIZE_T) - SET (HAVE_SSIZE_T 1) -ELSE(HAVE_SIZEOF_SSIZE_T) - SET (HAVE_SSIZE_T 0) - CHECK_TYPE_SIZE("long" SIZEOF_LONG) - CHECK_TYPE_SIZE("__int64" SIZEOF___INT64) - IF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T) - SET(ssize_t "long") - ENDIF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T) - IF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T) - SET(ssize_t "__int64") - ENDIF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T) -ENDIF(HAVE_SIZEOF_SSIZE_T) - -CHECK_TYPE_SIZE("uid_t" SIZEOF_UID_T) -IF(HAVE_SIZEOF_UID_T) - SET (HAVE_UID_T 1) -ELSE(HAVE_SIZEOF_UID_T) - SET (HAVE_UID_T 0) - SET (uid_t "int") -ENDIF(HAVE_SIZEOF_UID_T) - -#SET (HAVE_BASENAME 0) -SET (HAVE_CTYPE_H 1) # all our platforms have <ctype.h> -#SET (HAVE_DEV_T 1) -#SET (HAVE_DIRNAME 0) -#SET (HAVE_FNMATCH 1) -#SET (HAVE_FNMATCH_H 1) -#SET (HAVE_INTTYPES_H 1) -#SET (HAVE_LCHOWN 1) -#SET (HAVE_LIBGEN_H 1) -SET (HAVE_LIBZ 1) -#SET (HAVE_MAJOR_T 0) -#SET (HAVE_MEMORY_H 1) -#SET (HAVE_MINOR_T 0) -#SET (HAVE_NLINK_T 1) -#SET (HAVE_SNPRINTF 1) -#SET (HAVE_STDINT_H 1) -#SET (HAVE_STDLIB_H 1) -#SET (HAVE_STRDUP 1) -#SET (HAVE_STRFTIME 1) -#SET (HAVE_STRINGS_H 1) -#SET (HAVE_STRING_H 1) -#SET (HAVE_STRLCPY 0) -#SET (HAVE_STRMODE 0) -#SET (HAVE_STRSEP 1) -#SET (HAVE_SYS_STAT_H 1) -#SET (HAVE_SYS_TYPES_H 1) -#SET (HAVE_UINT64_T 1) -#SET (HAVE_UNISTD_H 1) -SET (MAJOR_IN_MKDEV 0) -SET (MAJOR_IN_SYSMACROS 0) - -# for most systems makedev is two args on qnx it is three -# try run is nothing but trouble so just hard code it -SET (MAKEDEV_THREE_ARGS 0) -IF(QNXNTO) - SET(MAKEDEV_THREE_ARGS 1) -ENDIF(QNXNTO) -#SET (NEED_BASENAME 0) -#SET (NEED_DIRNAME 0) -#SET (NEED_FNMATCH 1) -IF(UNIX) - SET (NEED_MAKEDEV 1) -ENDIF(UNIX) -#SET (NEED_SNPRINTF 0) -#SET (NEED_STRDUP 0) -#SET (NEED_STRLCPY 0) -#SET (NEED_STRMODE 1) -#SET (NEED_STRSEP 0) -SET (PACKAGE_BUGREPORT "") -SET (PACKAGE_NAME "\"libtar\"") -SET (PACKAGE_STRING "\"libtar 1.2.11\"") -SET (PACKAGE_TARNAME "\"libtar\"") -SET (PACKAGE_VERSION "\"1.2.11\"") -#SET (STDC_HEADERS 1) -SET (const 0) -#SET (dev_t 0) -#SET (gid_t 0) -#SET (major_t "unsigned int") -#SET (minor_t "unsigned int") -#SET (mode_t 0) -#SET (nlink_t 0) -#SET (off_t 0) -#SET (size_t 0) -#SET (uid_t 0) -#SET (uint64_t 0) -SET (LISTHASH_PREFIX "libtar") - -CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/listhash.h.in - ${LIBTAR_BINARY_DIR}/libtar/libtar_listhash.h @ONLY IMMEDIATE) -CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/list.c.in - ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c @ONLY IMMEDIATE) -CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/hash.c.in - ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c @ONLY IMMEDIATE) - -FOREACH(hfile libtar.h tar.h compat/compat.h) - GET_FILENAME_COMPONENT(outname "${hfile}" NAME) - CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile} - ${LIBTAR_BINARY_DIR}/libtar/${outname} @ONLY IMMEDIATE) -ENDFOREACH(hfile) - -FOREACH(hfile internal.h filesystem.h) - GET_FILENAME_COMPONENT(outname "${hfile}" NAME) - CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile} - ${LIBTAR_BINARY_DIR}/libtarint/${outname} @ONLY IMMEDIATE) -ENDFOREACH(hfile) - -SET(libtar_SRC - append.c - block.c - decode.c - encode.c - extract.c - handle.c - ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c - ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c - output.c - util.c - wrapper.c - internal.h - ${LIBTAR_BINARY_DIR}/libtar/config.h - config.h.in - tar.h - libtar.h - compat/compat.h - -# compat/strlcpy.c -# compat/basename.c -# compat/dirname.c -# compat/strmode.c -# compat/strsep.c -) -IF(NOT HAVE_DIRENT_H) - SET(libtar_SRC - ${libtar_SRC} - filesystem.c filesystem.h) -ENDIF(NOT HAVE_DIRENT_H) - -IF(NOT HAVE_STRLCPY) -SET(libtar_SRC ${libtar_SRC} compat/strlcpy.c) -SET(NEED_STRLCPY 1) -ENDIF(NOT HAVE_STRLCPY) - -IF(NOT HAVE_STRMODE) -SET(libtar_SRC ${libtar_SRC} compat/strmode.c) -SET(NEED_STRMODE 1) -ENDIF(NOT HAVE_STRMODE) - -IF(WIN32) -IF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF) -SET(libtar_SRC ${libtar_SRC} compat/snprintf.c) -SET(NEED_SNPRINTF 1) -ENDIF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF) -ENDIF(WIN32) - -IF(NOT HAVE_DIRNAME) -SET(libtar_SRC ${libtar_SRC} compat/dirname.c) -SET(NEED_DIRNAME 1) -ENDIF(NOT HAVE_DIRNAME) - - -IF(NOT HAVE_STRSEP) -SET(libtar_SRC ${libtar_SRC} compat/strsep.c) -SET(NEED_STRSEP 1) -ENDIF(NOT HAVE_STRSEP) - - -IF(NOT HAVE_BASENAME) -SET(libtar_SRC ${libtar_SRC} compat/basename.c) -SET(NEED_BASENAME 1) -ENDIF(NOT HAVE_BASENAME) - -IF(NOT HAVE_FNMATCH) -SET(libtar_SRC ${libtar_SRC} compat/fnmatch.c) -SET(NEED_FNMATCH 1) -ENDIF(NOT HAVE_FNMATCH) - -#IF(NOT HAVE_GLOB) -#SET(libtar_SRC ${libtar_SRC} compat/glob.c) -#SET(NEED_GLOB 1) -#ENDIF(NOT HAVE_GLOB) - -# Setup zlib. -IF(NOT CMTAR_ZLIB_LIBRARIES) - MESSAGE(FATAL_ERROR "Parent project must set CMTAR_ZLIB_LIBRARIES.") -ENDIF(NOT CMTAR_ZLIB_LIBRARIES) -IF(NOT CMTAR_ZLIB_HEADER) - MESSAGE(FATAL_ERROR "Parent project must set CMTAR_ZLIB_HEADER.") -ENDIF(NOT CMTAR_ZLIB_HEADER) -INCLUDE_DIRECTORIES(${CMTAR_ZLIB_INCLUDE_DIRS}) - -CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/config.h.in - ${LIBTAR_BINARY_DIR}/libtar/config.h) - -ADD_LIBRARY(cmtar STATIC ${libtar_SRC}) -ADD_EXECUTABLE(tartest libtar.c) -TARGET_LINK_LIBRARIES(tartest cmtar ${CMTAR_ZLIB_LIBRARIES}) - -INSTALL(FILES COPYRIGHT DESTINATION ${CMake_DOC_DEST}/cmtar) diff --git a/Utilities/cmtar/COPYRIGHT b/Utilities/cmtar/COPYRIGHT deleted file mode 100644 index 2471ec0..0000000 --- a/Utilities/cmtar/COPYRIGHT +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 1998-2003 University of Illinois Board of Trustees -Copyright (c) 1998-2003 Mark D. Roth -All rights reserved. - -Developed by: Campus Information Technologies and Educational Services, - University of Illinois at Urbana-Champaign - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -``Software''), to deal with the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimers. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimers in the - documentation and/or other materials provided with the distribution. - -* Neither the names of Campus Information Technologies and Educational - Services, University of Illinois at Urbana-Champaign, nor the names - of its contributors may be used to endorse or promote products derived - from this Software without specific prior written permission. - -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. - diff --git a/Utilities/cmtar/append.c b/Utilities/cmtar/append.c deleted file mode 100644 index 14c7362..0000000 --- a/Utilities/cmtar/append.c +++ /dev/null @@ -1,297 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** append.c - libtar code to append files to a tar archive -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> -#include <errno.h> -#include <fcntl.h> -#if defined(_WIN32) && !defined(__CYGWIN__) -# include <libtar/compat.h> -#else -# ifdef HAVE_SYS_PARAM_H -# include <sys/param.h> -# endif -#endif -#include <libtar/compat.h> -#include <sys/types.h> - -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <string.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif - -#ifdef HAVE_IO_H -# include <io.h> -#endif - -struct tar_dev -{ - dev_t td_dev; - libtar_hash_t *td_h; -}; -typedef struct tar_dev tar_dev_t; - -struct tar_ino -{ - ino_t ti_ino; - char ti_name[TAR_MAXPATHLEN]; -}; -typedef struct tar_ino tar_ino_t; - - -/* free memory associated with a tar_dev_t */ -void -tar_dev_free(tar_dev_t *tdp) -{ - libtar_hash_free(tdp->td_h, free); - free(tdp); -} - - -/* appends a file to the tar archive */ -int -tar_append_file(TAR *t, char *realname, char *savename) -{ - struct stat s; - libtar_hashptr_t hp; - tar_dev_t *td; - tar_ino_t *ti; -#if !defined(_WIN32) || defined(__CYGWIN__) - int i; -#else - size_t plen; -#endif - char path[TAR_MAXPATHLEN]; - -#ifdef DEBUG - printf("==> tar_append_file(TAR=0x%lx (\"%s\"), realname=\"%s\", " - "savename=\"%s\")\n", t, t->pathname, realname, - (savename ? savename : "[NULL]")); -#endif - -#if defined(_WIN32) && !defined(__CYGWIN__) - strncpy(path, realname, sizeof(path)-1); - path[sizeof(path)-1] = 0; - plen = strlen(path); - if (path[plen-1] == '/' ) - { - path[plen-1] = 0; - } - if (stat(path, &s) != 0) -#else - if (lstat(realname, &s) != 0) -#endif - { -#ifdef DEBUG - perror("lstat()"); -#endif - return -1; - } - - /* set header block */ -#ifdef DEBUG - puts(" tar_append_file(): setting header block..."); -#endif - memset(&(t->th_buf), 0, sizeof(struct tar_header)); - th_set_from_stat(t, &s); - - /* set the header path */ -#ifdef DEBUG - puts(" tar_append_file(): setting header path..."); -#endif - th_set_path(t, (savename ? savename : realname)); - - /* check if it's a hardlink */ -#ifdef DEBUG - puts(" tar_append_file(): checking inode cache for hardlink..."); -#endif - libtar_hashptr_reset(&hp); - if (libtar_hash_getkey(t->h, &hp, &(s.st_dev), - (libtar_matchfunc_t)dev_match) != 0) - td = (tar_dev_t *)libtar_hashptr_data(&hp); - else - { -#ifdef DEBUG - printf("+++ adding hash for device (0x%lx, 0x%lx)...\n", - major(s.st_dev), minor(s.st_dev)); -#endif - td = (tar_dev_t *)calloc(1, sizeof(tar_dev_t)); - td->td_dev = s.st_dev; - td->td_h = libtar_hash_new(256, (libtar_hashfunc_t)ino_hash); - if (td->td_h == NULL) - return -1; - if (libtar_hash_add(t->h, td) == -1) - return -1; - } - libtar_hashptr_reset(&hp); -#if !defined(_WIN32) || defined(__CYGWIN__) - if (libtar_hash_getkey(td->td_h, &hp, &(s.st_ino), - (libtar_matchfunc_t)ino_match) != 0) - { - ti = (tar_ino_t *)libtar_hashptr_data(&hp); -#ifdef DEBUG - printf(" tar_append_file(): encoding hard link \"%s\" " - "to \"%s\"...\n", realname, ti->ti_name); -#endif - t->th_buf.typeflag = LNKTYPE; - th_set_link(t, ti->ti_name); - } - else -#endif - { -#ifdef DEBUG - printf("+++ adding entry: device (0x%lx,0x%lx), inode %ld " - "(\"%s\")...\n", major(s.st_dev), minor(s.st_dev), - s.st_ino, realname); -#endif - ti = (tar_ino_t *)calloc(1, sizeof(tar_ino_t)); - if (ti == NULL) - return -1; - ti->ti_ino = s.st_ino; - snprintf(ti->ti_name, sizeof(ti->ti_name), "%s", - savename ? savename : realname); - libtar_hash_add(td->td_h, ti); - } - -#if !defined(_WIN32) || defined(__CYGWIN__) - /* check if it's a symlink */ - if (TH_ISSYM(t)) - { -#if defined(_WIN32) && !defined(__CYGWIN__) - i = -1; -#else - i = readlink(realname, path, sizeof(path)); -#endif - if (i == -1) - return -1; - if (i >= TAR_MAXPATHLEN) - i = TAR_MAXPATHLEN - 1; - path[i] = '\0'; -#ifdef DEBUG - printf(" tar_append_file(): encoding symlink \"%s\" -> " - "\"%s\"...\n", realname, path); -#endif - th_set_link(t, path); - } -#endif - - /* print file info */ - if (t->options & TAR_VERBOSE) - th_print_long_ls(t); - -#ifdef DEBUG - puts(" tar_append_file(): writing header"); -#endif - /* write header */ - if (th_write(t) != 0) - { -#ifdef DEBUG - printf("t->fd = %d\n", t->fd); -#endif - return -1; - } -#ifdef DEBUG - puts(" tar_append_file(): back from th_write()"); -#endif - - /* if it's a regular file, write the contents as well */ - if (TH_ISREG(t) && tar_append_regfile(t, realname) != 0) - return -1; - - return 0; -} - - -/* write EOF indicator */ -int -tar_append_eof(TAR *t) -{ - ssize_t i, j; - char block[T_BLOCKSIZE]; - - memset(&block, 0, T_BLOCKSIZE); - for (j = 0; j < 2; j++) - { - i = tar_block_write(t, &block); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - } - - return 0; -} - - -/* add file contents to a tarchive */ -int -tar_append_regfile(TAR *t, char *realname) -{ - char block[T_BLOCKSIZE]; - int filefd; - ssize_t i, j; - size_t size; - -#if defined( _WIN32 ) || defined(__CYGWIN__) - filefd = open(realname, O_RDONLY | O_BINARY); -#else - filefd = open(realname, O_RDONLY); -#endif - if (filefd == -1) - { -#ifdef DEBUG - perror("open()"); -#endif - return -1; - } - - size = th_get_size(t); - for (i = size; i > T_BLOCKSIZE; i -= T_BLOCKSIZE) - { - j = read(filefd, &block, T_BLOCKSIZE); - if (j != T_BLOCKSIZE) - { - if (j != -1) - { - fprintf(stderr, "Unexpected size of read data: %d <> %d for file: %s\n", - (int)j, T_BLOCKSIZE, realname); - errno = EINVAL; - } - return -1; - } - if (tar_block_write(t, &block) == -1) - return -1; - } - - if (i > 0) - { - j = (size_t)read(filefd, &block, (unsigned int)i); - if (j == -1) - return -1; - memset(&(block[i]), 0, T_BLOCKSIZE - i); - if (tar_block_write(t, &block) == -1) - return -1; - } - - close(filefd); - - return 0; -} - - diff --git a/Utilities/cmtar/block.c b/Utilities/cmtar/block.c deleted file mode 100644 index 430eb20..0000000 --- a/Utilities/cmtar/block.c +++ /dev/null @@ -1,384 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** block.c - libtar code to handle tar archive header blocks -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <errno.h> - -#ifdef STDC_HEADERS -# include <string.h> -# include <stdlib.h> -#endif - - -#define BIT_ISSET(bitmask, bit) ((bitmask) & (bit)) - - -/* read a header block */ -static int -th_read_internal(TAR *t) -{ - ssize_t i; - int num_zero_blocks = 0; - -#ifdef DEBUG - printf("==> th_read_internal(TAR=\"%s\")\n", t->pathname); -#endif - - while ((i = tar_block_read(t, &(t->th_buf))) == T_BLOCKSIZE) - { - /* two all-zero blocks mark EOF */ - if (t->th_buf.name[0] == '\0') - { - num_zero_blocks++; - if (!BIT_ISSET(t->options, TAR_IGNORE_EOT) - && num_zero_blocks >= 2) - return 0; /* EOF */ - else - continue; - } - - /* verify magic and version */ - if (BIT_ISSET(t->options, TAR_CHECK_MAGIC) - && strncmp(t->th_buf.magic, TMAGIC, TMAGLEN - 1) != 0) - { -#ifdef DEBUG - puts("!!! unknown magic value in tar header"); -#endif - return -2; - } - - if (BIT_ISSET(t->options, TAR_CHECK_VERSION) - && strncmp(t->th_buf.version, TVERSION, TVERSLEN) != 0) - { -#ifdef DEBUG - puts("!!! unknown version value in tar header"); -#endif - return -2; - } - - /* check chksum */ - if (!BIT_ISSET(t->options, TAR_IGNORE_CRC) - && !th_crc_ok(t)) - { -#ifdef DEBUG - puts("!!! tar header checksum error"); -#endif - return -2; - } - - break; - } - -#ifdef DEBUG - printf("<== th_read_internal(): returning %d\n", i); -#endif - return (int)i; -} - - -/* wrapper function for th_read_internal() to handle GNU extensions */ -int -th_read(TAR *t) -{ - ssize_t i, j; - size_t sz; - char *ptr; - -#ifdef DEBUG - printf("==> th_read(t=0x%lx)\n", t); -#endif - - if (t->th_buf.gnu_longname != NULL) - free(t->th_buf.gnu_longname); - if (t->th_buf.gnu_longlink != NULL) - free(t->th_buf.gnu_longlink); - memset(&(t->th_buf), 0, sizeof(struct tar_header)); - - i = th_read_internal(t); - if (i == 0) - return 1; - else if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - - /* check for GNU long link extention */ - if (TH_ISLONGLINK(t)) - { - sz = th_get_size(t); - j = (sz / T_BLOCKSIZE) + (sz % T_BLOCKSIZE ? 1 : 0); -#ifdef DEBUG - printf(" th_read(): GNU long linkname detected " - "(%ld bytes, %d blocks)\n", sz, j); -#endif - t->th_buf.gnu_longlink = (char *)malloc(j * T_BLOCKSIZE); - if (t->th_buf.gnu_longlink == NULL) - return -1; - - for (ptr = t->th_buf.gnu_longlink; j > 0; - j--, ptr += T_BLOCKSIZE) - { -#ifdef DEBUG - printf(" th_read(): reading long linkname " - "(%d blocks left, ptr == %ld)\n", j, ptr); -#endif - i = tar_block_read(t, ptr); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } -#ifdef DEBUG - printf(" th_read(): read block == \"%s\"\n", ptr); -#endif - } -#ifdef DEBUG - printf(" th_read(): t->th_buf.gnu_longlink == \"%s\"\n", - t->th_buf.gnu_longlink); -#endif - - i = th_read_internal(t); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - } - - /* check for GNU long name extention */ - if (TH_ISLONGNAME(t)) - { - sz = th_get_size(t); - j = (sz / T_BLOCKSIZE) + (sz % T_BLOCKSIZE ? 1 : 0); -#ifdef DEBUG - printf(" th_read(): GNU long filename detected " - "(%ld bytes, %d blocks)\n", sz, j); -#endif - t->th_buf.gnu_longname = (char *)malloc(j * T_BLOCKSIZE); - if (t->th_buf.gnu_longname == NULL) - return -1; - - for (ptr = t->th_buf.gnu_longname; j > 0; - j--, ptr += T_BLOCKSIZE) - { -#ifdef DEBUG - printf(" th_read(): reading long filename " - "(%d blocks left, ptr == %ld)\n", j, ptr); -#endif - i = tar_block_read(t, ptr); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } -#ifdef DEBUG - printf(" th_read(): read block == \"%s\"\n", ptr); -#endif - } -#ifdef DEBUG - printf(" th_read(): t->th_buf.gnu_longname == \"%s\"\n", - t->th_buf.gnu_longname); -#endif - - i = th_read_internal(t); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - } - -#if 0 - /* - ** work-around for old archive files with broken typeflag fields - ** NOTE: I fixed this in the TH_IS*() macros instead - */ - - /* - ** (directories are signified with a trailing '/') - */ - if (t->th_buf.typeflag == AREGTYPE - && t->th_buf.name[strlen(t->th_buf.name) - 1] == '/') - t->th_buf.typeflag = DIRTYPE; - - /* - ** fallback to using mode bits - */ - if (t->th_buf.typeflag == AREGTYPE) - { - mode = (mode_t)oct_to_int(t->th_buf.mode); - - if (S_ISREG(mode)) - t->th_buf.typeflag = REGTYPE; - else if (S_ISDIR(mode)) - t->th_buf.typeflag = DIRTYPE; - else if (S_ISFIFO(mode)) - t->th_buf.typeflag = FIFOTYPE; - else if (S_ISCHR(mode)) - t->th_buf.typeflag = CHRTYPE; - else if (S_ISBLK(mode)) - t->th_buf.typeflag = BLKTYPE; - else if (S_ISLNK(mode)) - t->th_buf.typeflag = SYMTYPE; - } -#endif - - return 0; -} - - -/* write a header block */ -int -th_write(TAR *t) -{ - ssize_t i, j; - char type2; - size_t sz, sz2; - char *ptr; - char buf[T_BLOCKSIZE]; - -#ifdef DEBUG - printf("==> th_write(TAR=\"%s\")\n", t->pathname); - th_print(t); -#endif - - if ((t->options & TAR_GNU) && t->th_buf.gnu_longlink != NULL) - { -#ifdef DEBUG - printf("th_write(): using gnu_longlink (\"%s\")\n", - t->th_buf.gnu_longlink); -#endif - /* save old size and type */ - type2 = t->th_buf.typeflag; - sz2 = th_get_size(t); - - /* write out initial header block with fake size and type */ - t->th_buf.typeflag = GNU_LONGLINK_TYPE; - sz = strlen(t->th_buf.gnu_longlink); - th_set_size(t, sz); - th_finish(t); - i = tar_block_write(t, &(t->th_buf)); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - - /* write out extra blocks containing long name */ - for (j = (sz / T_BLOCKSIZE) + (sz % T_BLOCKSIZE ? 1 : 0), - ptr = t->th_buf.gnu_longlink; j > 1; - j--, ptr += T_BLOCKSIZE) - { - i = tar_block_write(t, ptr); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - } - memset(buf, 0, T_BLOCKSIZE); - strncpy(buf, ptr, T_BLOCKSIZE); - i = tar_block_write(t, &buf); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - - /* reset type and size to original values */ - t->th_buf.typeflag = type2; - th_set_size(t, sz2); - } - - if ((t->options & TAR_GNU) && t->th_buf.gnu_longname != NULL) - { -#ifdef DEBUG - printf("th_write(): using gnu_longname (\"%s\")\n", - t->th_buf.gnu_longname); -#endif - /* save old size and type */ - type2 = t->th_buf.typeflag; - sz2 = th_get_size(t); - - /* write out initial header block with fake size and type */ - t->th_buf.typeflag = GNU_LONGNAME_TYPE; - sz = strlen(t->th_buf.gnu_longname); - th_set_size(t, sz); - th_finish(t); - i = tar_block_write(t, &(t->th_buf)); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - - /* write out extra blocks containing long name */ - for (j = (sz / T_BLOCKSIZE) + (sz % T_BLOCKSIZE ? 1 : 0), - ptr = t->th_buf.gnu_longname; j > 1; - j--, ptr += T_BLOCKSIZE) - { - i = tar_block_write(t, ptr); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - } - memset(buf, 0, T_BLOCKSIZE); - strncpy(buf, ptr, T_BLOCKSIZE); - i = tar_block_write(t, &buf); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - - /* reset type and size to original values */ - t->th_buf.typeflag = type2; - th_set_size(t, sz2); - } - - th_finish(t); - -#ifdef DEBUG - /* print tar header */ - th_print(t); -#endif - - i = tar_block_write(t, &(t->th_buf)); - if (i != T_BLOCKSIZE) - { - if (i != -1) - errno = EINVAL; - return -1; - } - -#ifdef DEBUG - puts("th_write(): returning 0"); -#endif - return 0; -} - - diff --git a/Utilities/cmtar/compat/README b/Utilities/cmtar/compat/README deleted file mode 100644 index fd23ced..0000000 --- a/Utilities/cmtar/compat/README +++ /dev/null @@ -1,12 +0,0 @@ -Compatibility Suite -------------------- - -This directory contains a compatibility suite that provides alternate -implementations of various library functions which are not available or -not usable on some platforms. - -The original copyright information for each function is included in -the source files. I've modified the files slightly for integration -into this suite, but the functionality has not been modified from -the original source. - diff --git a/Utilities/cmtar/compat/basename.c b/Utilities/cmtar/compat/basename.c deleted file mode 100644 index f44d414..0000000 --- a/Utilities/cmtar/compat/basename.c +++ /dev/null @@ -1,76 +0,0 @@ -/* $OpenBSD: basename.c,v 1.4 1999/05/30 17:10:30 espie Exp $ */ - -/* - * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef lint -static char rcsid[] = "$OpenBSD: basename.c,v 1.4 1999/05/30 17:10:30 espie Exp $"; -const char* libtar_compat_basename_getrcsid() { return rcsid; } -#endif /* not lint */ - -#include <errno.h> -#include <string.h> -#include <libtar/compat.h> -#include <libtarint/internal.h> - -char * -openbsd_basename(path) - const char *path; -{ - static char bname[TAR_MAXPATHLEN]; - register const char *endp, *startp; - - /* Empty or NULL string gets treated as "." */ - if (path == NULL || *path == '\0') { - (void)strcpy(bname, "."); - return(bname); - } - - /* Strip trailing slashes */ - endp = path + strlen(path) - 1; - while (endp > path && *endp == '/') - endp--; - - /* All slashes becomes "/" */ - if (endp == path && *endp == '/') { - (void)strcpy(bname, "/"); - return(bname); - } - - /* Find the start of the base */ - startp = endp; - while (startp > path && *(startp - 1) != '/') - startp--; - - if (endp - startp + 1 > sizeof(bname)) { - errno = ENAMETOOLONG; - return(NULL); - } - (void)strncpy(bname, startp, endp - startp + 1); - bname[endp - startp + 1] = '\0'; - return(bname); -} diff --git a/Utilities/cmtar/compat/compat.h b/Utilities/cmtar/compat/compat.h deleted file mode 100644 index 2a3206f..0000000 --- a/Utilities/cmtar/compat/compat.h +++ /dev/null @@ -1,332 +0,0 @@ -/* prototypes for borrowed "compatibility" code */ - -#include <libtar/config.h> - -#include <sys/types.h> -#include <sys/stat.h> - -#ifdef STDC_HEADERS -# include <stdarg.h> -# include <stddef.h> -#else -# include <varargs.h> -#endif - -#ifdef HAVE_LIBGEN_H -# include <libgen.h> -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(NEED_BASENAME) && !defined(HAVE_BASENAME) - -# ifdef basename -# undef basename /* fix glibc brokenness */ -# endif - -char *openbsd_basename(const char *); -# define basename openbsd_basename - -#endif /* NEED_BASENAME && ! HAVE_BASENAME */ - - -#if defined(NEED_DIRNAME) && !defined(HAVE_DIRNAME) - -char *openbsd_dirname(const char *); -# define dirname openbsd_dirname - -#endif /* NEED_DIRNAME && ! HAVE_DIRNAME */ - - -#ifdef NEED_FNMATCH -# ifndef HAVE_FNMATCH - -# define FNM_NOMATCH 1 /* Match failed. */ - -# define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */ -# define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */ -# define FNM_PERIOD 0x04 /* Period must be matched by period. */ - -# define FNM_LEADING_DIR 0x08 /* Ignore /<tail> after Imatch. */ -# define FNM_CASEFOLD 0x10 /* Case insensitive search. */ -# define FNM_IGNORECASE FNM_CASEFOLD -# define FNM_FILE_NAME FNM_PATHNAME - -int openbsd_fnmatch(const char *, const char *, int); -# define fnmatch openbsd_fnmatch - -# else /* HAVE_FNMATCH */ - -# ifdef HAVE_FNMATCH_H -# include <fnmatch.h> -# endif - -# endif /* ! HAVE_FNMATCH */ -#endif /* NEED_FNMATCH */ - - -#ifdef NEED_GETHOSTBYNAME_R - -# include <netdb.h> - -# if GETHOSTBYNAME_R_NUM_ARGS != 6 - -int compat_gethostbyname_r(const char *, struct hostent *, - char *, size_t, struct hostent **, int *); - -# define gethostbyname_r compat_gethostbyname_r - -# endif /* GETHOSTBYNAME_R_NUM_ARGS != 6 */ - -#endif /* NEED_GETHOSTBYNAME_R */ - - -#if defined(NEED_GETHOSTNAME) && !defined(HAVE_GETHOSTNAME) - -int gethostname(char *, size_t); - -#endif /* NEED_GETHOSTNAME && ! HAVE_GETHOSTNAME */ - - -#ifdef NEED_GETSERVBYNAME_R - -# include <netdb.h> - -# if GETSERVBYNAME_R_NUM_ARGS != 6 - -int compat_getservbyname_r(const char *, const char *, struct servent *, - char *, size_t, struct servent **); - -# define getservbyname_r compat_getservbyname_r - -# endif /* GETSERVBYNAME_R_NUM_ARGS != 6 */ - -#endif /* NEED_GETSERVBYNAME_R */ - - - -#ifdef NEED_GLOB -# ifndef HAVE_GLOB - -typedef struct { - int gl_pathc; /* Count of total paths so far. */ - int gl_matchc; /* Count of paths matching pattern. */ - int gl_offs; /* Reserved at beginning of gl_pathv. */ - int gl_flags; /* Copy of flags parameter to glob. */ - char **gl_pathv; /* List of paths matching pattern. */ - /* Copy of errfunc parameter to glob. */ - int (*gl_errfunc)(const char *, int); - - /* - * Alternate filesystem access methods for glob; replacement - * versions of closedir(3), readdir(3), opendir(3), stat(2) - * and lstat(2). - */ - void (*gl_closedir)(void *); - struct dirent *(*gl_readdir)(void *); - void *(*gl_opendir)(const char *); - int (*gl_lstat)(const char *, struct stat *); - int (*gl_stat)(const char *, struct stat *); -} glob_t; - -/* Flags */ -# define GLOB_APPEND 0x0001 /* Append to output from previous call. */ -# define GLOB_DOOFFS 0x0002 /* Use gl_offs. */ -# define GLOB_ERR 0x0004 /* Return on error. */ -# define GLOB_MARK 0x0008 /* Append / to matching directories. */ -# define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */ -# define GLOB_NOSORT 0x0020 /* Don't sort. */ - -# define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */ -# define GLOB_BRACE 0x0080 /* Expand braces ala csh. */ -# define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */ -# define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */ -# define GLOB_QUOTE 0x0400 /* Quote special chars with \. */ -# define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */ -# define GLOB_NOESCAPE 0x1000 /* Disable backslash escaping. */ - -/* Error values returned by glob(3) */ -# define GLOB_NOSPACE (-1) /* Malloc call failed. */ -# define GLOB_ABORTED (-2) /* Unignored error. */ -# define GLOB_NOMATCH (-3) /* No match and GLOB_NOCHECK not set. */ -# define GLOB_NOSYS (-4) /* Function not supported. */ -# define GLOB_ABEND GLOB_ABORTED - -int openbsd_glob(const char *, int, int (*)(const char *, int), glob_t *); -void openbsd_globfree(glob_t *); -# define glob openbsd_glob -# define globfree openbsd_globfree - -# else /* HAVE_GLOB */ - -# ifdef HAVE_GLOB_H -# include <glob.h> -# endif - -# endif /* ! HAVE_GLOB */ -#endif /* NEED_GLOB */ - - -#if defined(NEED_INET_ATON) && !defined(HAVE_INET_ATON) - -int inet_aton(const char *, struct in_addr *); - -#endif /* NEED_INET_ATON && ! HAVE_INET_ATON */ - - -#ifdef NEED_MAKEDEV - -# ifdef MAJOR_IN_MKDEV -# include <sys/mkdev.h> -# else -# ifdef MAJOR_IN_SYSMACROS -# include <sys/sysmacros.h> -# endif -# endif - -/* -** On most systems makedev() has two args. -** Some weird systems, like QNX6, have makedev() functions that expect -** an extra first argument for "node", which can be 0 for a local -** machine. -*/ - -# ifdef MAKEDEV_THREE_ARGS -# define compat_makedev(maj, min) makedev(0, maj, min) -# else -# define compat_makedev makedev -# endif - -#endif /* NEED_MAKEDEV */ - -#ifdef _MSC_VER /* compile snprintf only onwin32 */ -#if !defined(HAVE_SNPRINTF) -int mutt_snprintf(char *, size_t, const char *, ...); -# define snprintf mutt_snprintf -#endif - -#if !defined(HAVE_VSNPRINTF) -int mutt_vsnprintf(char *, size_t, const char *, va_list); -# define vsnprintf mutt_vsnprintf -#endif /* NEED_SNPRINTF && ! HAVE_SNPRINTF */ -#endif - -#if defined(NEED_STRLCAT) && !defined(HAVE_STRLCAT) - -size_t strlcat(char *, const char *, size_t); - -#endif /* NEED_STRLCAT && ! HAVE_STRLCAT */ - - -#if defined(NEED_STRLCPY) && !defined(HAVE_STRLCPY) - -size_t strlcpy(char *, const char *, size_t); - -#endif /* NEED_STRLCPY && ! HAVE_STRLCPY */ - - -#if defined(NEED_STRDUP) && !defined(HAVE_STRDUP) - -char *openbsd_strdup(const char *); -# define strdup openbsd_strdup - -#endif /* NEED_STRDUP && ! HAVE_STRDUP */ - - -#if defined(NEED_STRMODE) && !defined(HAVE_STRMODE) - -void strmode(register mode_t, register char *); - -#endif /* NEED_STRMODE && ! HAVE_STRMODE */ - - -#if defined(NEED_STRRSTR) && !defined(HAVE_STRRSTR) - -char *strrstr(char *, char *); - -#endif /* NEED_STRRSTR && ! HAVE_STRRSTR */ - - -#ifdef NEED_STRSEP - -# ifdef HAVE_STRSEP -# define _LINUX_SOURCE_COMPAT /* needed on AIX 4.3.3 */ -# else - -char *strsep(register char **, register const char *); - -# endif - -#endif /* NEED_STRSEP */ - -#ifdef _MSC_VER -#include <stdlib.h> -#define MAXPATHLEN _MAX_PATH -#ifndef O_ACCMODE -# define O_ACCMODE 0x0003 -#endif -#endif - - - - -#ifndef S_ISREG -#ifndef S_IFREG -#ifndef _S_IFREG -#define S_IFREG (-1) -#else -#define S_IFREG _S_IFREG -#endif -#endif -#define S_ISREG(m) (((m)&S_IFREG)==S_IFREG) -#endif - - -#ifndef S_ISDIR -#ifndef S_IFDIR -#ifndef _S_IFDIR -#define S_IFDIR (-1) -#else -#define S_IFDIR _S_IFDIR -#endif -#endif -#define S_ISDIR(m) (((m)&S_IFDIR)==S_IFDIR) -#endif - -#ifndef S_ISBLK -#ifndef S_IFBLK -#ifndef _S_IFBLK -#define S_IFBLK (-1) -#else -#define S_IFBLK _S_IFBLK -#endif -#endif -#define S_ISBLK(m) (((m)&S_IFBLK)==S_IFBLK) -#endif - -#ifndef S_ISFIFO -#ifndef S_IFFIFO -#ifndef _S_IFFIFO -#define S_IFFIFO (-1) -#else -#define S_IFFIFO _S_IFFIFO -#endif -#endif -#define S_ISFIFO(m) (((m)&S_IFFIFO)==S_IFFIFO) -#endif - -#if !defined(TAR_MAXPATHLEN) -# if defined(PATH_MAX) -# define TAR_MAXPATHLEN PATH_MAX -# elif defined(MAXPATHLEN) -# define TAR_MAXPATHLEN MAXPATHLEN -# else -# define TAR_MAXPATHLEN 16384 -# endif -#endif - -#ifdef __cplusplus -} -#endif diff --git a/Utilities/cmtar/compat/dirname.c b/Utilities/cmtar/compat/dirname.c deleted file mode 100644 index aff4cb3..0000000 --- a/Utilities/cmtar/compat/dirname.c +++ /dev/null @@ -1,79 +0,0 @@ -/* $OpenBSD: dirname.c,v 1.4 1999/05/30 17:10:30 espie Exp $ */ - -/* - * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef lint -static char rcsid[] = "$OpenBSD: dirname.c,v 1.4 1999/05/30 17:10:30 espie Exp $"; -const char* libtar_compat_dirname_getrcsid() { return rcsid; } -#endif /* not lint */ - -#include <errno.h> -#include <string.h> -#include <libtar/compat.h> -#include <libtarint/internal.h> - -char * -openbsd_dirname(path) - const char *path; -{ - static char bname[TAR_MAXPATHLEN]; - register const char *endp; - - /* Empty or NULL string gets treated as "." */ - if (path == NULL || *path == '\0') { - (void)strcpy(bname, "."); - return(bname); - } - - /* Strip trailing slashes */ - endp = path + strlen(path) - 1; - while (endp > path && *endp == '/') - endp--; - - /* Find the start of the dir */ - while (endp > path && *endp != '/') - endp--; - - /* Either the dir is "/" or there are no slashes */ - if (endp == path) { - (void)strcpy(bname, *endp == '/' ? "/" : "."); - return(bname); - } else { - do { - endp--; - } while (endp > path && *endp == '/'); - } - - if (endp - path + 1 > sizeof(bname)) { - errno = ENAMETOOLONG; - return(NULL); - } - (void)strncpy(bname, path, endp - path + 1); - bname[endp - path + 1] = '\0'; - return(bname); -} diff --git a/Utilities/cmtar/compat/fnmatch.c b/Utilities/cmtar/compat/fnmatch.c deleted file mode 100644 index bb575b3..0000000 --- a/Utilities/cmtar/compat/fnmatch.c +++ /dev/null @@ -1,229 +0,0 @@ -/* $OpenBSD: fnmatch.c,v 1.6 1998/03/19 00:29:59 millert Exp $ */ - -/* - * Copyright (c) 1989, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Guido van Rossum. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94"; -#else -static char rcsid[] = "$OpenBSD: fnmatch.c,v 1.6 1998/03/19 00:29:59 millert Exp $"; -#endif -#endif /* LIBC_SCCS and not lint */ - -/* - * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6. - * Compares a filename or pathname to a pattern. - */ - -#include <libtar/config.h> - -#include <stdio.h> - -#ifdef STDC_HEADERS -# include <string.h> -#endif - -#ifdef HAVE_CTYPE_H -# include <ctype.h> -#endif - -#include <libtar/compat.h> - - -#define EOS '\0' - -#define RANGE_MATCH 1 -#define RANGE_NOMATCH 0 -#define RANGE_ERROR (-1) - -static int rangematch (const char *, char, int, char **); - -int -fnmatch(pattern, string, flags) - const char *pattern, *string; - int flags; -{ - const char *stringstart; - char *newp; - char c, test; - - for (stringstart = string;;) - switch (c = *pattern++) { - case EOS: - if ((flags & FNM_LEADING_DIR) && *string == '/') - return (0); - return (*string == EOS ? 0 : FNM_NOMATCH); - case '?': - if (*string == EOS) - return (FNM_NOMATCH); - if (*string == '/' && (flags & FNM_PATHNAME)) - return (FNM_NOMATCH); - if (*string == '.' && (flags & FNM_PERIOD) && - (string == stringstart || - ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) - return (FNM_NOMATCH); - ++string; - break; - case '*': - c = *pattern; - /* Collapse multiple stars. */ - while (c == '*') - c = *++pattern; - - if (*string == '.' && (flags & FNM_PERIOD) && - (string == stringstart || - ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) - return (FNM_NOMATCH); - - /* Optimize for pattern with * at end or before /. */ - if (c == EOS) { - if (flags & FNM_PATHNAME) - return ((flags & FNM_LEADING_DIR) || - strchr(string, '/') == NULL ? - 0 : FNM_NOMATCH); - else - return (0); - } else if (c == '/' && (flags & FNM_PATHNAME)) { - if ((string = strchr(string, '/')) == NULL) - return (FNM_NOMATCH); - break; - } - - /* General case, use recursion. */ - while ((test = *string) != EOS) { - if (!fnmatch(pattern, string, flags & ~FNM_PERIOD)) - return (0); - if (test == '/' && (flags & FNM_PATHNAME)) - break; - ++string; - } - return (FNM_NOMATCH); - case '[': - if (*string == EOS) - return (FNM_NOMATCH); - if (*string == '/' && (flags & FNM_PATHNAME)) - return (FNM_NOMATCH); - if (*string == '.' && (flags & FNM_PERIOD) && - (string == stringstart || - ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) - return (FNM_NOMATCH); - - switch (rangematch(pattern, *string, flags, &newp)) { - case RANGE_ERROR: - /* not a good range, treat as normal text */ - goto normal; - case RANGE_MATCH: - pattern = newp; - break; - case RANGE_NOMATCH: - return (FNM_NOMATCH); - } - ++string; - break; - case '\\': - if (!(flags & FNM_NOESCAPE)) { - if ((c = *pattern++) == EOS) { - c = '\\'; - --pattern; - } - } - /* FALLTHROUGH */ - default: - normal: - if (c != *string && !((flags & FNM_CASEFOLD) && - (tolower((unsigned char)c) == - tolower((unsigned char)*string)))) - return (FNM_NOMATCH); - ++string; - break; - } - /* NOTREACHED */ -} - -static int rangematch(const char *pattern, char test, int flags, char **newp) -{ - int negate, ok; - char c, c2; - - /* - * A bracket expression starting with an unquoted circumflex - * character produces unspecified results (IEEE 1003.2-1992, - * 3.13.2). This implementation treats it like '!', for - * consistency with the regular expression syntax. - * J.T. Conklin (conklin@ngai.kaleida.com) - */ - negate = (*pattern == '!' || *pattern == '^'); - if (negate) - ++pattern; - - if (flags & FNM_CASEFOLD) - test = tolower((unsigned char)test); - - /* - * A right bracket shall lose its special meaning and represent - * itself in a bracket expression if it occurs first in the list. - * -- POSIX.2 2.8.3.2 - */ - ok = 0; - c = *pattern++; - do { - if (c == '\\' && !(flags & FNM_NOESCAPE)) - c = *pattern++; - if (c == EOS) - return (RANGE_ERROR); - if (c == '/' && (flags & FNM_PATHNAME)) - return (RANGE_NOMATCH); - if ((flags & FNM_CASEFOLD)) - c = tolower((unsigned char)c); - if (*pattern == '-' - && (c2 = *(pattern+1)) != EOS && c2 != ']') { - pattern += 2; - if (c2 == '\\' && !(flags & FNM_NOESCAPE)) - c2 = *pattern++; - if (c2 == EOS) - return (RANGE_ERROR); - if (flags & FNM_CASEFOLD) - c2 = tolower((unsigned char)c2); - if (c <= test && test <= c2) - ok = 1; - } else if (c == test) - ok = 1; - } while ((c = *pattern++) != ']'); - - *newp = (char *)pattern; - return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH); -} diff --git a/Utilities/cmtar/compat/gethostbyname_r.c b/Utilities/cmtar/compat/gethostbyname_r.c deleted file mode 100644 index 1b88bad..0000000 --- a/Utilities/cmtar/compat/gethostbyname_r.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -** Copyright 2002 University of Illinois Board of Trustees -** Copyright 2002 Mark D. Roth -** All rights reserved. -** -** gethostbyname_r.c - gethostbyname_r() function for compatibility library -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <config.h> - -#include <stdio.h> -#include <sys/types.h> -#include <netdb.h> - - -int -compat_gethostbyname_r(const char *name, struct hostent *hp, - char *buf, size_t buflen, - struct hostent **hpp, int *herr) -{ -#if GETHOSTBYNAME_R_NUM_ARGS == 5 - *hpp = gethostbyname_r(name, hp, buf, buflen, herr); - - if (*hpp == NULL) - return -1; - return 0; -#elif GETHOSTBYNAME_R_NUM_ARGS == 3 - struct hostent_data hdata; - - if (gethostbyname_r(name, hp, &hdata) == -1) - return -1; - *hpp = hp; - return 0; -#endif /* GETHOSTBYNAME_R_NUM_ARGS == 5 */ -} - - diff --git a/Utilities/cmtar/compat/gethostname.c b/Utilities/cmtar/compat/gethostname.c deleted file mode 100644 index 1abaae1..0000000 --- a/Utilities/cmtar/compat/gethostname.c +++ /dev/null @@ -1,36 +0,0 @@ -/* gethostname.c: minimal substitute for missing gethostname() function - * created 2000-Mar-02 jmk - * requires SVR4 uname() and -lc - * - * by Jim Knoble <jmknoble@pobox.com> - * Copyright ? 2000 Jim Knoble - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear in - * supporting documentation. - * - * This software is provided "as is", without warranty of any kind, - * express or implied, including but not limited to the warranties of - * merchantability, fitness for a particular purpose and - * noninfringement. In no event shall the author(s) be liable for any - * claim, damages or other liability, whether in an action of contract, - * tort or otherwise, arising from, out of or in connection with the - * software or the use or other dealings in the software. - */ - -#include <string.h> -#include <sys/utsname.h> - -int gethostname(char *name, size_t len) -{ - struct utsname u; - int status = uname(&u); - if (-1 != status) { - strncpy(name, u.nodename, len); - name[len - 1] = '\0'; - } - return(status); -} - diff --git a/Utilities/cmtar/compat/getservbyname_r.c b/Utilities/cmtar/compat/getservbyname_r.c deleted file mode 100644 index 3afedf0..0000000 --- a/Utilities/cmtar/compat/getservbyname_r.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -** Copyright 2002 University of Illinois Board of Trustees -** Copyright 2002 Mark D. Roth -** All rights reserved. -** -** getservbyname_r.c - getservbyname_r() function for compatibility library -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <config.h> - -#include <stdio.h> -#include <sys/types.h> -#include <netdb.h> - - -int -compat_getservbyname_r(const char *name, const char *proto, - struct servent *sp, char *buf, size_t buflen, - struct servent **spp) -{ -#if GETSERVBYNAME_R_NUM_ARGS == 5 - *spp = getservbyname_r(name, proto, sp, buf, buflen); - - if (*spp == NULL) - return -1; - return 0; -#elif GETSERVBYNAME_R_NUM_ARGS == 4 - struct servent_data sdata; - - if (getservbyname_r(name, proto, sp, &sdata) == -1) - return -1; - *spp = sp; - return 0; -#endif /* GETSERVBYNAME_R_NUM_ARGS == 5 */ -} - - diff --git a/Utilities/cmtar/compat/glob.c b/Utilities/cmtar/compat/glob.c deleted file mode 100644 index 939d76f..0000000 --- a/Utilities/cmtar/compat/glob.c +++ /dev/null @@ -1,874 +0,0 @@ -/* - * Copyright (c) 1989, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Guido van Rossum. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93"; -#else -static char rcsid[] = "$OpenBSD: glob.c,v 1.8 1998/08/14 21:39:30 deraadt Exp $"; -#endif -#endif /* LIBC_SCCS and not lint */ - -/* - * glob(3) -- a superset of the one defined in POSIX 1003.2. - * - * The [!...] convention to negate a range is supported (SysV, Posix, ksh). - * - * Optional extra services, controlled by flags not defined by POSIX: - * - * GLOB_QUOTE: - * Escaping convention: \ inhibits any special meaning the following - * character might have (except \ at end of string is retained). - * GLOB_MAGCHAR: - * Set in gl_flags if pattern contained a globbing character. - * GLOB_NOMAGIC: - * Same as GLOB_NOCHECK, but it will only append pattern if it did - * not contain any magic characters. [Used in csh style globbing] - * GLOB_ALTDIRFUNC: - * Use alternately specified directory access functions. - * GLOB_TILDE: - * expand ~user/foo to the /home/dir/of/user/foo - * GLOB_BRACE: - * expand {1,2}{a,b} to 1a 1b 2a 2b - * gl_matchc: - * Number of matches in the current invocation of glob. - */ - -#include <config.h> - -//#include <sys/param.h> -#include <compat.h> -#include <sys/stat.h> - -//#include <dirent.h> -#include <errno.h> -#include <pwd.h> -#include <stdio.h> - -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <string.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif - -#include <compat.h> - - -#define DOLLAR '$' -#define DOT '.' -#define EOS '\0' -#define LBRACKET '[' -#define NOT '!' -#define QUESTION '?' -#define QUOTE '\\' -#define RANGE '-' -#define RBRACKET ']' -#define SEP '/' -#define STAR '*' -#define TILDE '~' -#define UNDERSCORE '_' -#define LBRACE '{' -#define RBRACE '}' -#define SLASH '/' -#define COMMA ',' - -#ifndef DEBUG - -#define M_QUOTE 0x8000 -#define M_PROTECT 0x4000 -#define M_MASK 0xffff -#define M_ASCII 0x00ff - -typedef u_short Char; - -#else - -#define M_QUOTE 0x80 -#define M_PROTECT 0x40 -#define M_MASK 0xff -#define M_ASCII 0x7f - -typedef char Char; - -#endif - - -#define CHAR(c) ((Char)((c)&M_ASCII)) -#define META(c) ((Char)((c)|M_QUOTE)) -#define M_ALL META('*') -#define M_END META(']') -#define M_NOT META('!') -#define M_ONE META('?') -#define M_RNG META('-') -#define M_SET META('[') -#define ismeta(c) (((c)&M_QUOTE) != 0) - - -static int compare (const void *, const void *); -static void g_Ctoc (const Char *, char *); -static int g_lstat (Char *, struct stat *, glob_t *); -static DIR *g_opendir (Char *, glob_t *); -static Char *g_strchr (Char *, int); -#ifdef notdef -static Char *g_strcat (Char *, const Char *); -#endif -static int g_stat (Char *, struct stat *, glob_t *); -static int glob0 (const Char *, glob_t *); -static int glob1 (Char *, glob_t *); -static int glob2 (Char *, Char *, Char *, glob_t *); -static int glob3 (Char *, Char *, Char *, Char *, glob_t *); -static int globextend (const Char *, glob_t *); -static const Char * globtilde (const Char *, Char *, size_t, glob_t *); -static int globexp1 (const Char *, glob_t *); -static int globexp2 (const Char *, const Char *, glob_t *, int *); -static int match (Char *, Char *, Char *); -#ifdef DEBUG -static void qprintf (const char *, Char *); -#endif - -int -openbsd_glob(pattern, flags, errfunc, pglob) - const char *pattern; - int flags, (*errfunc) __P((const char *, int)); - glob_t *pglob; -{ - const u_char *patnext; - int c; - Char *bufnext, *bufend, patbuf[MAXPATHLEN+1]; - - patnext = (u_char *) pattern; - if (!(flags & GLOB_APPEND)) { - pglob->gl_pathc = 0; - pglob->gl_pathv = NULL; - if (!(flags & GLOB_DOOFFS)) - pglob->gl_offs = 0; - } - pglob->gl_flags = flags & ~GLOB_MAGCHAR; - pglob->gl_errfunc = errfunc; - pglob->gl_matchc = 0; - - bufnext = patbuf; - bufend = bufnext + MAXPATHLEN; - if (flags & GLOB_NOESCAPE) - while (bufnext < bufend && (c = *patnext++) != EOS) - *bufnext++ = c; - else { - /* Protect the quoted characters. */ - while (bufnext < bufend && (c = *patnext++) != EOS) - if (c == QUOTE) { - if ((c = *patnext++) == EOS) { - c = QUOTE; - --patnext; - } - *bufnext++ = c | M_PROTECT; - } - else - *bufnext++ = c; - } - *bufnext = EOS; - - if (flags & GLOB_BRACE) - return globexp1(patbuf, pglob); - else - return glob0(patbuf, pglob); -} - -/* - * Expand recursively a glob {} pattern. When there is no more expansion - * invoke the standard globbing routine to glob the rest of the magic - * characters - */ -static int globexp1(pattern, pglob) - const Char *pattern; - glob_t *pglob; -{ - const Char* ptr = pattern; - int rv; - - /* Protect a single {}, for find(1), like csh */ - if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS) - return glob0(pattern, pglob); - - while ((ptr = (const Char *) g_strchr((Char *) ptr, LBRACE)) != NULL) - if (!globexp2(ptr, pattern, pglob, &rv)) - return rv; - - return glob0(pattern, pglob); -} - - -/* - * Recursive brace globbing helper. Tries to expand a single brace. - * If it succeeds then it invokes globexp1 with the new pattern. - * If it fails then it tries to glob the rest of the pattern and returns. - */ -static int globexp2(ptr, pattern, pglob, rv) - const Char *ptr, *pattern; - glob_t *pglob; - int *rv; -{ - int i; - Char *lm, *ls; - const Char *pe, *pm, *pl; - Char patbuf[MAXPATHLEN + 1]; - - /* copy part up to the brace */ - for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++) - continue; - ls = lm; - - /* Find the balanced brace */ - for (i = 0, pe = ++ptr; *pe; pe++) - if (*pe == LBRACKET) { - /* Ignore everything between [] */ - for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++) - continue; - if (*pe == EOS) { - /* - * We could not find a matching RBRACKET. - * Ignore and just look for RBRACE - */ - pe = pm; - } - } - else if (*pe == LBRACE) - i++; - else if (*pe == RBRACE) { - if (i == 0) - break; - i--; - } - - /* Non matching braces; just glob the pattern */ - if (i != 0 || *pe == EOS) { - *rv = glob0(patbuf, pglob); - return 0; - } - - for (i = 0, pl = pm = ptr; pm <= pe; pm++) - switch (*pm) { - case LBRACKET: - /* Ignore everything between [] */ - for (pl = pm++; *pm != RBRACKET && *pm != EOS; pm++) - continue; - if (*pm == EOS) { - /* - * We could not find a matching RBRACKET. - * Ignore and just look for RBRACE - */ - pm = pl; - } - break; - - case LBRACE: - i++; - break; - - case RBRACE: - if (i) { - i--; - break; - } - /* FALLTHROUGH */ - case COMMA: - if (i && *pm == COMMA) - break; - else { - /* Append the current string */ - for (lm = ls; (pl < pm); *lm++ = *pl++) - continue; - /* - * Append the rest of the pattern after the - * closing brace - */ - for (pl = pe + 1; (*lm++ = *pl++) != EOS;) - continue; - - /* Expand the current pattern */ -#ifdef DEBUG - qprintf("globexp2:", patbuf); -#endif - *rv = globexp1(patbuf, pglob); - - /* move after the comma, to the next string */ - pl = pm + 1; - } - break; - - default: - break; - } - *rv = 0; - return 0; -} - - - -/* - * expand tilde from the passwd file. - */ -static const Char * -globtilde(pattern, patbuf, patbuf_len, pglob) - const Char *pattern; - Char *patbuf; - size_t patbuf_len; - glob_t *pglob; -{ - struct passwd *pwd; - char *h; - const Char *p; - Char *b, *eb; - - if (*pattern != TILDE || !(pglob->gl_flags & GLOB_TILDE)) - return pattern; - - /* Copy up to the end of the string or / */ - eb = &patbuf[patbuf_len - 1]; - for (p = pattern + 1, h = (char *) patbuf; - h < (char *)eb && *p && *p != SLASH; *h++ = *p++) - continue; - - *h = EOS; - - if (((char *) patbuf)[0] == EOS) { - /* - * handle a plain ~ or ~/ by expanding $HOME - * first and then trying the password file - */ -#ifdef HAVE_ISSETUGID - if (issetugid() != 0 || (h = getenv("HOME")) == NULL) { -#endif - if ((pwd = getpwuid(getuid())) == NULL) - return pattern; - else - h = pwd->pw_dir; -#ifdef HAVE_ISSETUGID - } -#endif - } - else { - /* - * Expand a ~user - */ - if ((pwd = getpwnam((char*) patbuf)) == NULL) - return pattern; - else - h = pwd->pw_dir; - } - - /* Copy the home directory */ - for (b = patbuf; b < eb && *h; *b++ = *h++) - continue; - - /* Append the rest of the pattern */ - while (b < eb && (*b++ = *p++) != EOS) - continue; - *b = EOS; - - return patbuf; -} - - -/* - * The main glob() routine: compiles the pattern (optionally processing - * quotes), calls glob1() to do the real pattern matching, and finally - * sorts the list (unless unsorted operation is requested). Returns 0 - * if things went well, nonzero if errors occurred. It is not an error - * to find no matches. - */ -static int -glob0(pattern, pglob) - const Char *pattern; - glob_t *pglob; -{ - const Char *qpatnext; - int c, err, oldpathc; - Char *bufnext, patbuf[MAXPATHLEN+1]; - - qpatnext = globtilde(pattern, patbuf, sizeof(patbuf) / sizeof(Char), - pglob); - oldpathc = pglob->gl_pathc; - bufnext = patbuf; - - /* We don't need to check for buffer overflow any more. */ - while ((c = *qpatnext++) != EOS) { - switch (c) { - case LBRACKET: - c = *qpatnext; - if (c == NOT) - ++qpatnext; - if (*qpatnext == EOS || - g_strchr((Char *) qpatnext+1, RBRACKET) == NULL) { - *bufnext++ = LBRACKET; - if (c == NOT) - --qpatnext; - break; - } - *bufnext++ = M_SET; - if (c == NOT) - *bufnext++ = M_NOT; - c = *qpatnext++; - do { - *bufnext++ = CHAR(c); - if (*qpatnext == RANGE && - (c = qpatnext[1]) != RBRACKET) { - *bufnext++ = M_RNG; - *bufnext++ = CHAR(c); - qpatnext += 2; - } - } while ((c = *qpatnext++) != RBRACKET); - pglob->gl_flags |= GLOB_MAGCHAR; - *bufnext++ = M_END; - break; - case QUESTION: - pglob->gl_flags |= GLOB_MAGCHAR; - *bufnext++ = M_ONE; - break; - case STAR: - pglob->gl_flags |= GLOB_MAGCHAR; - /* collapse adjacent stars to one, - * to avoid exponential behavior - */ - if (bufnext == patbuf || bufnext[-1] != M_ALL) - *bufnext++ = M_ALL; - break; - default: - *bufnext++ = CHAR(c); - break; - } - } - *bufnext = EOS; -#ifdef DEBUG - qprintf("glob0:", patbuf); -#endif - - if ((err = glob1(patbuf, pglob)) != 0) - return(err); - - /* - * If there was no match we are going to append the pattern - * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified - * and the pattern did not contain any magic characters - * GLOB_NOMAGIC is there just for compatibility with csh. - */ - if (pglob->gl_pathc == oldpathc) { - if ((pglob->gl_flags & GLOB_NOCHECK) || - ((pglob->gl_flags & GLOB_NOMAGIC) && - !(pglob->gl_flags & GLOB_MAGCHAR))) - return(globextend(pattern, pglob)); - else - return(GLOB_NOMATCH); - } - if (!(pglob->gl_flags & GLOB_NOSORT)) - qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc, - pglob->gl_pathc - oldpathc, sizeof(char *), compare); - return(0); -} - -static int -compare(p, q) - const void *p, *q; -{ - return(strcmp(*(char **)p, *(char **)q)); -} - -static int -glob1(pattern, pglob) - Char *pattern; - glob_t *pglob; -{ - Char pathbuf[MAXPATHLEN+1]; - - /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */ - if (*pattern == EOS) - return(0); - return(glob2(pathbuf, pathbuf, pattern, pglob)); -} - -/* - * The functions glob2 and glob3 are mutually recursive; there is one level - * of recursion for each segment in the pattern that contains one or more - * meta characters. - */ -static int -glob2(pathbuf, pathend, pattern, pglob) - Char *pathbuf, *pathend, *pattern; - glob_t *pglob; -{ - struct stat sb; - Char *p, *q; - int anymeta; - - /* - * Loop over pattern segments until end of pattern or until - * segment with meta character found. - */ - for (anymeta = 0;;) { - if (*pattern == EOS) { /* End of pattern? */ - *pathend = EOS; - if (g_lstat(pathbuf, &sb, pglob)) - return(0); - - if (((pglob->gl_flags & GLOB_MARK) && - pathend[-1] != SEP) && (S_ISDIR(sb.st_mode) - || (S_ISLNK(sb.st_mode) && - (g_stat(pathbuf, &sb, pglob) == 0) && - S_ISDIR(sb.st_mode)))) { - *pathend++ = SEP; - *pathend = EOS; - } - ++pglob->gl_matchc; - return(globextend(pathbuf, pglob)); - } - - /* Find end of next segment, copy tentatively to pathend. */ - q = pathend; - p = pattern; - while (*p != EOS && *p != SEP) { - if (ismeta(*p)) - anymeta = 1; - *q++ = *p++; - } - - if (!anymeta) { /* No expansion, do next segment. */ - pathend = q; - pattern = p; - while (*pattern == SEP) - *pathend++ = *pattern++; - } else /* Need expansion, recurse. */ - return(glob3(pathbuf, pathend, pattern, p, pglob)); - } - /* NOTREACHED */ -} - -static int -glob3(pathbuf, pathend, pattern, restpattern, pglob) - Char *pathbuf, *pathend, *pattern, *restpattern; - glob_t *pglob; -{ - register struct dirent *dp; - DIR *dirp; - int err; - char buf[MAXPATHLEN]; - - /* - * The readdirfunc declaration can't be prototyped, because it is - * assigned, below, to two functions which are prototyped in glob.h - * and dirent.h as taking pointers to differently typed opaque - * structures. - */ - struct dirent *(*readdirfunc)(); - - *pathend = EOS; - errno = 0; - - if ((dirp = g_opendir(pathbuf, pglob)) == NULL) { - /* TODO: don't call for ENOENT or ENOTDIR? */ - if (pglob->gl_errfunc) { - g_Ctoc(pathbuf, buf); - if (pglob->gl_errfunc(buf, errno) || - pglob->gl_flags & GLOB_ERR) - return (GLOB_ABORTED); - } - return(0); - } - - err = 0; - - /* Search directory for matching names. */ - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - readdirfunc = pglob->gl_readdir; - else - readdirfunc = readdir; - while ((dp = (*readdirfunc)(dirp))) { - register u_char *sc; - register Char *dc; - - /* Initial DOT must be matched literally. */ - if (dp->d_name[0] == DOT && *pattern != DOT) - continue; - for (sc = (u_char *) dp->d_name, dc = pathend; - (*dc++ = *sc++) != EOS;) - continue; - if (!match(pathend, pattern, restpattern)) { - *pathend = EOS; - continue; - } - err = glob2(pathbuf, --dc, restpattern, pglob); - if (err) - break; - } - - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - (*pglob->gl_closedir)(dirp); - else - closedir(dirp); - return(err); -} - - -/* - * Extend the gl_pathv member of a glob_t structure to accomodate a new item, - * add the new item, and update gl_pathc. - * - * This assumes the BSD realloc, which only copies the block when its size - * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic - * behavior. - * - * Return 0 if new item added, error code if memory couldn't be allocated. - * - * Invariant of the glob_t structure: - * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and - * gl_pathv points to (gl_offs + gl_pathc + 1) items. - */ -static int -globextend(path, pglob) - const Char *path; - glob_t *pglob; -{ - register char **pathv; - register int i; - u_int newsize; - char *copy; - const Char *p; - - newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs); - pathv = pglob->gl_pathv ? - realloc((char *)pglob->gl_pathv, newsize) : - malloc(newsize); - if (pathv == NULL) { - if (pglob->gl_pathv) - free(pglob->gl_pathv); - return(GLOB_NOSPACE); - } - - if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { - /* first time around -- clear initial gl_offs items */ - pathv += pglob->gl_offs; - for (i = pglob->gl_offs; --i >= 0; ) - *--pathv = NULL; - } - pglob->gl_pathv = pathv; - - for (p = path; *p++;) - continue; - if ((copy = malloc(p - path)) != NULL) { - g_Ctoc(path, copy); - pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; - } - pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; - return(copy == NULL ? GLOB_NOSPACE : 0); -} - - -/* - * pattern matching function for filenames. Each occurrence of the * - * pattern causes a recursion level. - */ -static int -match(name, pat, patend) - register Char *name, *pat, *patend; -{ - int ok, negate_range; - Char c, k; - - while (pat < patend) { - c = *pat++; - switch (c & M_MASK) { - case M_ALL: - if (pat == patend) - return(1); - do - if (match(name, pat, patend)) - return(1); - while (*name++ != EOS); - return(0); - case M_ONE: - if (*name++ == EOS) - return(0); - break; - case M_SET: - ok = 0; - if ((k = *name++) == EOS) - return(0); - if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS) - ++pat; - while (((c = *pat++) & M_MASK) != M_END) - if ((*pat & M_MASK) == M_RNG) { - if (c <= k && k <= pat[1]) - ok = 1; - pat += 2; - } else if (c == k) - ok = 1; - if (ok == negate_range) - return(0); - break; - default: - if (*name++ != c) - return(0); - break; - } - } - return(*name == EOS); -} - -/* Free allocated data belonging to a glob_t structure. */ -void -openbsd_globfree(pglob) - glob_t *pglob; -{ - register int i; - register char **pp; - - if (pglob->gl_pathv != NULL) { - pp = pglob->gl_pathv + pglob->gl_offs; - for (i = pglob->gl_pathc; i--; ++pp) - if (*pp) - free(*pp); - free(pglob->gl_pathv); - } -} - -static DIR * -g_opendir(str, pglob) - register Char *str; - glob_t *pglob; -{ - char buf[MAXPATHLEN]; - - if (!*str) - strcpy(buf, "."); - else - g_Ctoc(str, buf); - - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - return((*pglob->gl_opendir)(buf)); - - return(opendir(buf)); -} - -static int -g_lstat(fn, sb, pglob) - register Char *fn; - struct stat *sb; - glob_t *pglob; -{ - char buf[MAXPATHLEN]; - - g_Ctoc(fn, buf); - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - return((*pglob->gl_lstat)(buf, sb)); - return(lstat(buf, sb)); -} - -static int -g_stat(fn, sb, pglob) - register Char *fn; - struct stat *sb; - glob_t *pglob; -{ - char buf[MAXPATHLEN]; - - g_Ctoc(fn, buf); - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - return((*pglob->gl_stat)(buf, sb)); - return(stat(buf, sb)); -} - -static Char * -g_strchr(str, ch) - Char *str; - int ch; -{ - do { - if (*str == ch) - return (str); - } while (*str++); - return (NULL); -} - -#ifdef notdef -static Char * -g_strcat(dst, src) - Char *dst; - const Char* src; -{ - Char *sdst = dst; - - while (*dst++) - continue; - --dst; - while((*dst++ = *src++) != EOS) - continue; - - return (sdst); -} -#endif - -static void -g_Ctoc(str, buf) - register const Char *str; - char *buf; -{ - register char *dc; - - for (dc = buf; (*dc++ = *str++) != EOS;) - continue; -} - -#ifdef DEBUG -static void -qprintf(str, s) - const char *str; - register Char *s; -{ - register Char *p; - - (void)printf("%s:\n", str); - for (p = s; *p; p++) - (void)printf("%c", CHAR(*p)); - (void)printf("\n"); - for (p = s; *p; p++) - (void)printf("%c", *p & M_PROTECT ? '"' : ' '); - (void)printf("\n"); - for (p = s; *p; p++) - (void)printf("%c", ismeta(*p) ? '_' : ' '); - (void)printf("\n"); -} -#endif diff --git a/Utilities/cmtar/compat/inet_aton.c b/Utilities/cmtar/compat/inet_aton.c deleted file mode 100644 index cc1e507..0000000 --- a/Utilities/cmtar/compat/inet_aton.c +++ /dev/null @@ -1,27 +0,0 @@ -/* -** Copyright 2002 University of Illinois Board of Trustees -** Copyright 2002 Mark D. Roth -** All rights reserved. -** -** inet_aton.c - inet_aton() function for compatibility library -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> - - -int -inet_aton(const char *cp, struct in_addr *inp) -{ - inp->s_addr = inet_addr(cp); - if (inp->s_addr == -1) - return 0; - return 1; -} - - diff --git a/Utilities/cmtar/compat/snprintf.c b/Utilities/cmtar/compat/snprintf.c deleted file mode 100644 index 599ccfe..0000000 --- a/Utilities/cmtar/compat/snprintf.c +++ /dev/null @@ -1,797 +0,0 @@ -/************************************************************** - * Original: - * Patrick Powell Tue Apr 11 09:48:21 PDT 1995 - * A bombproof version of doprnt (dopr) included. - * Sigh. This sort of thing is always nasty do deal with. Note that - * the version here does not include floating point... - * - * snprintf() is used instead of sprintf() as it does limit checks - * for string length. This covers a nasty loophole. - * - * The other functions are there to prevent NULL pointers from - * causing nast effects. - * - * More Recently: - * Brandon Long <blong@fiction.net> 9/15/96 for mutt 0.43 - * This was ugly. It is still ugly. I opted out of floating point - * numbers, but the formatter understands just about everything - * from the normal C string format, at least as far as I can tell from - * the Solaris 2.5 printf(3S) man page. - * - * Brandon Long <blong@fiction.net> 10/22/97 for mutt 0.87.1 - * Ok, added some minimal floating point support, which means this - * probably requires libm on most operating systems. Don't yet - * support the exponent (e,E) and sigfig (g,G). Also, fmtint() - * was pretty badly broken, it just wasn't being exercised in ways - * which showed it, so that's been fixed. Also, formated the code - * to mutt conventions, and removed dead code left over from the - * original. Also, there is now a builtin-test, just compile with: - * gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm - * and run snprintf for results. - * - * Thomas Roessler <roessler@guug.de> 01/27/98 for mutt 0.89i - * The PGP code was using unsigned hexadecimal formats. - * Unfortunately, unsigned formats simply didn't work. - * - * Michael Elkins <me@cs.hmc.edu> 03/05/98 for mutt 0.90.8 - * The original code assumed that both snprintf() and vsnprintf() were - * missing. Some systems only have snprintf() but not vsnprintf(), so - * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF. - * - **************************************************************/ - -#include <libtar/config.h> - -#if defined(__INTEL_COMPILER) -# pragma warning disable 177 /* function declared but not referenced */ -#endif - -#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) - -#include <stdio.h> -#include <string.h> -# include <ctype.h> -#include <sys/types.h> - -/* Define this as a fall through, HAVE_STDARG_H is probably already set */ - -#define HAVE_VARARGS_H - -/* varargs declarations: */ - -#if defined(HAVE_STDARG_H) -# include <stdarg.h> -# define HAVE_STDARGS /* let's hope that works everywhere (mj) */ -# define VA_LOCAL_DECL va_list ap -# define VA_START(f) va_start(ap, f) -# define VA_SHIFT(v,t) ; /* no-op for ANSI */ -# define VA_END va_end(ap) -#else -# if defined(HAVE_VARARGS_H) -# include <varargs.h> -# undef HAVE_STDARGS -# define VA_LOCAL_DECL va_list ap -# define VA_START(f) va_start(ap) /* f is ignored! */ -# define VA_SHIFT(v,t) v = va_arg(ap,t) -# define VA_END va_end(ap) -# else -/*XX ** NO VARARGS ** XX*/ -# endif -#endif - -/*int snprintf (char *str, size_t count, const char *fmt, ...);*/ -/*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/ - -static void dopr (char *buffer, size_t maxlen, const char *format, - va_list args); -static void fmtstr (char *buffer, size_t *currlen, size_t maxlen, - char *value, int flags, int min, int max); -static void fmtint (char *buffer, size_t *currlen, size_t maxlen, - long value, int base, int min, int max, int flags); -static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, - long double fvalue, int min, int max, int flags); -static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c ); - -/* - * dopr(): poor man's version of doprintf - */ - -/* format read states */ -#define DP_S_DEFAULT 0 -#define DP_S_FLAGS 1 -#define DP_S_MIN 2 -#define DP_S_DOT 3 -#define DP_S_MAX 4 -#define DP_S_MOD 5 -#define DP_S_CONV 6 -#define DP_S_DONE 7 - -/* format flags - Bits */ -#define DP_F_MINUS (1 << 0) -#define DP_F_PLUS (1 << 1) -#define DP_F_SPACE (1 << 2) -#define DP_F_NUM (1 << 3) -#define DP_F_ZERO (1 << 4) -#define DP_F_UP (1 << 5) -#define DP_F_UNSIGNED (1 << 6) - -/* Conversion Flags */ -#define DP_C_SHORT 1 -#define DP_C_LONG 2 -#define DP_C_LDOUBLE 3 - -#define char_to_int(p) (p - '0') -#define MAX(p,q) ((p >= q) ? p : q) - -static void dopr (char *buffer, size_t maxlen, const char *format, va_list args) -{ - char ch; - long value; - long double fvalue; - char *strvalue; - int min; - int max; - int state; - int flags; - int cflags; - size_t currlen; - - state = DP_S_DEFAULT; - currlen = flags = cflags = min = 0; - max = -1; - ch = *format++; - - while (state != DP_S_DONE) - { - if ((ch == '\0') || (currlen >= maxlen)) - state = DP_S_DONE; - - switch(state) - { - case DP_S_DEFAULT: - if (ch == '%') - state = DP_S_FLAGS; - else - dopr_outch (buffer, &currlen, maxlen, ch); - ch = *format++; - break; - case DP_S_FLAGS: - switch (ch) - { - case '-': - flags |= DP_F_MINUS; - ch = *format++; - break; - case '+': - flags |= DP_F_PLUS; - ch = *format++; - break; - case ' ': - flags |= DP_F_SPACE; - ch = *format++; - break; - case '#': - flags |= DP_F_NUM; - ch = *format++; - break; - case '0': - flags |= DP_F_ZERO; - ch = *format++; - break; - default: - state = DP_S_MIN; - break; - } - break; - case DP_S_MIN: - if (isdigit((unsigned char)ch)) - { - min = 10*min + char_to_int (ch); - ch = *format++; - } - else if (ch == '*') - { - min = va_arg (args, int); - ch = *format++; - state = DP_S_DOT; - } - else - state = DP_S_DOT; - break; - case DP_S_DOT: - if (ch == '.') - { - state = DP_S_MAX; - ch = *format++; - } - else - state = DP_S_MOD; - break; - case DP_S_MAX: - if (isdigit((unsigned char)ch)) - { - if (max < 0) - max = 0; - max = 10*max + char_to_int (ch); - ch = *format++; - } - else if (ch == '*') - { - max = va_arg (args, int); - ch = *format++; - state = DP_S_MOD; - } - else - state = DP_S_MOD; - break; - case DP_S_MOD: - /* Currently, we don't support Long Long, bummer */ - switch (ch) - { - case 'h': - cflags = DP_C_SHORT; - ch = *format++; - break; - case 'l': - cflags = DP_C_LONG; - ch = *format++; - break; - case 'L': - cflags = DP_C_LDOUBLE; - ch = *format++; - break; - default: - break; - } - state = DP_S_CONV; - break; - case DP_S_CONV: - switch (ch) - { - case 'd': - case 'i': - if (cflags == DP_C_SHORT) - value = va_arg (args, short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, long int); - else - value = va_arg (args, int); - fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); - break; - case 'o': - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_SHORT) - value = va_arg (args, unsigned short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, unsigned long int); - else - value = va_arg (args, unsigned int); - fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags); - break; - case 'u': - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_SHORT) - value = va_arg (args, unsigned short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, unsigned long int); - else - value = va_arg (args, unsigned int); - fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); - break; - case 'X': - flags |= DP_F_UP; - case 'x': - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_SHORT) - value = va_arg (args, unsigned short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, unsigned long int); - else - value = va_arg (args, unsigned int); - fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags); - break; - case 'f': - if (cflags == DP_C_LDOUBLE) - fvalue = va_arg (args, long double); - else - fvalue = va_arg (args, double); - /* um, floating point? */ - fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); - break; - case 'E': - flags |= DP_F_UP; - case 'e': - if (cflags == DP_C_LDOUBLE) - fvalue = va_arg (args, long double); - else - fvalue = va_arg (args, double); - break; - case 'G': - flags |= DP_F_UP; - case 'g': - if (cflags == DP_C_LDOUBLE) - fvalue = va_arg (args, long double); - else - fvalue = va_arg (args, double); - break; - case 'c': - dopr_outch (buffer, &currlen, maxlen, (char)(va_arg (args, int))); - break; - case 's': - strvalue = va_arg (args, char *); - if (max < 0) - max = (int)maxlen; /* ie, no max */ - fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max); - break; - case 'p': - strvalue = va_arg (args, void *); - fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags); - break; - case 'n': - if (cflags == DP_C_SHORT) - { - short int *num; - num = va_arg (args, short int *); - *num = (int)currlen; - } - else if (cflags == DP_C_LONG) - { - long int *num; - num = va_arg (args, long int *); - *num = (int)currlen; - } - else - { - int *num; - num = va_arg (args, int *); - *num = (int)currlen; - } - break; - case '%': - dopr_outch (buffer, &currlen, maxlen, ch); - break; - case 'w': - /* not supported yet, treat as next char */ - ch = *format++; - break; - default: - /* Unknown, skip */ - break; - } - ch = *format++; - state = DP_S_DEFAULT; - flags = cflags = min = 0; - max = -1; - break; - case DP_S_DONE: - break; - default: - /* hmm? */ - break; /* some picky compilers need this */ - } - } - if (currlen < maxlen - 1) - buffer[currlen] = '\0'; - else - buffer[maxlen - 1] = '\0'; -} - -static void fmtstr (char *buffer, size_t *currlen, size_t maxlen, - char *value, int flags, int min, int max) -{ - int padlen, strln; /* amount to pad */ - int cnt = 0; - - if (value == 0) - { - value = "<NULL>"; - } - - for (strln = 0; value[strln]; ++strln); /* strlen */ - padlen = min - strln; - if (padlen < 0) - padlen = 0; - if (flags & DP_F_MINUS) - padlen = -padlen; /* Left Justify */ - - while ((padlen > 0) && (cnt < max)) - { - dopr_outch (buffer, currlen, maxlen, ' '); - --padlen; - ++cnt; - } - while (*value && (cnt < max)) - { - dopr_outch (buffer, currlen, maxlen, *value++); - ++cnt; - } - while ((padlen < 0) && (cnt < max)) - { - dopr_outch (buffer, currlen, maxlen, ' '); - ++padlen; - ++cnt; - } -} - -/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ - -static void fmtint (char *buffer, size_t *currlen, size_t maxlen, - long value, int base, int min, int max, int flags) -{ - int signvalue = 0; - unsigned long uvalue; - char convert[20]; - int place = 0; - int spadlen = 0; /* amount to space pad */ - int zpadlen = 0; /* amount to zero pad */ - int caps = 0; - - if (max < 0) - max = 0; - - uvalue = value; - - if(!(flags & DP_F_UNSIGNED)) - { - if( value < 0 ) { - signvalue = '-'; - uvalue = -value; - } - else - if (flags & DP_F_PLUS) /* Do a sign (+/i) */ - signvalue = '+'; - else - if (flags & DP_F_SPACE) - signvalue = ' '; - } - - if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ - - do { - convert[place++] = - (caps? "0123456789ABCDEF":"0123456789abcdef") - [uvalue % (unsigned)base ]; - uvalue = (uvalue / (unsigned)base ); - } while(uvalue && (place < 20)); - if (place == 20) place--; - convert[place] = 0; - - zpadlen = max - place; - spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); - if (zpadlen < 0) zpadlen = 0; - if (spadlen < 0) spadlen = 0; - if (flags & DP_F_ZERO) - { - zpadlen = MAX(zpadlen, spadlen); - spadlen = 0; - } - if (flags & DP_F_MINUS) - spadlen = -spadlen; /* Left Justifty */ - -#ifdef DEBUG_SNPRINTF - dprint (1, (debugfile, "zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", - zpadlen, spadlen, min, max, place)); -#endif - - /* Spaces */ - while (spadlen > 0) - { - dopr_outch (buffer, currlen, maxlen, ' '); - --spadlen; - } - - /* Sign */ - if (signvalue) - dopr_outch (buffer, currlen, maxlen, (char)signvalue); - - /* Zeros */ - if (zpadlen > 0) - { - while (zpadlen > 0) - { - dopr_outch (buffer, currlen, maxlen, '0'); - --zpadlen; - } - } - - /* Digits */ - while (place > 0) - dopr_outch (buffer, currlen, maxlen, convert[--place]); - - /* Left Justified spaces */ - while (spadlen < 0) { - dopr_outch (buffer, currlen, maxlen, ' '); - ++spadlen; - } -} - -static long double abs_val (long double value) -{ - long double result = value; - - if (value < 0) - result = -value; - - return result; -} - -static long double pow10 (int exp) -{ - long double result = 1; - - while (exp) - { - result *= 10; - exp--; - } - - return result; -} - -static long round (long double value) -{ - long intpart; - - intpart = (long)value; - value = value - intpart; - if (value >= 0.5) - intpart++; - - return intpart; -} - -static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, - long double fvalue, int min, int max, int flags) -{ - int signvalue = 0; - long double ufvalue; - char iconvert[20]; - char fconvert[20]; - int iplace = 0; - int fplace = 0; - int padlen = 0; /* amount to pad */ - int zpadlen = 0; - int caps = 0; - long intpart; - long fracpart; - - /* - * AIX manpage says the default is 0, but Solaris says the default - * is 6, and sprintf on AIX defaults to 6 - */ - if (max < 0) - max = 6; - - ufvalue = abs_val (fvalue); - - if (fvalue < 0) - signvalue = '-'; - else - if (flags & DP_F_PLUS) /* Do a sign (+/i) */ - signvalue = '+'; - else - if (flags & DP_F_SPACE) - signvalue = ' '; - -#if 0 - if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ -#endif - - intpart = (long)ufvalue; - - /* - * Sorry, we only support 9 digits past the decimal because of our - * conversion method - */ - if (max > 9) - max = 9; - - /* We "cheat" by converting the fractional part to integer by - * multiplying by a factor of 10 - */ - fracpart = round ((pow10 (max)) * (ufvalue - intpart)); - - if (fracpart >= pow10 (max)) - { - intpart++; - fracpart -= (long)(pow10 (max)); - } - -#ifdef DEBUG_SNPRINTF - dprint (1, (debugfile, "fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart)); -#endif - - /* Convert integer part */ - do { - iconvert[iplace++] = - (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10]; - intpart = (intpart / 10); - } while(intpart && (iplace < 20)); - if (iplace == 20) iplace--; - iconvert[iplace] = 0; - - /* Convert fractional part */ - do { - fconvert[fplace++] = - (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10]; - fracpart = (fracpart / 10); - } while(fracpart && (fplace < 20)); - if (fplace == 20) fplace--; - fconvert[fplace] = 0; - - /* -1 for decimal point, another -1 if we are printing a sign */ - padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); - zpadlen = max - fplace; - if (zpadlen < 0) - zpadlen = 0; - if (padlen < 0) - padlen = 0; - if (flags & DP_F_MINUS) - padlen = -padlen; /* Left Justifty */ - - if ((flags & DP_F_ZERO) && (padlen > 0)) - { - if (signvalue) - { - dopr_outch (buffer, currlen, maxlen, (char)signvalue); - --padlen; - signvalue = 0; - } - while (padlen > 0) - { - dopr_outch (buffer, currlen, maxlen, '0'); - --padlen; - } - } - while (padlen > 0) - { - dopr_outch (buffer, currlen, maxlen, ' '); - --padlen; - } - if (signvalue) - dopr_outch (buffer, currlen, maxlen, (char)signvalue); - - while (iplace > 0) - dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]); - - /* - * Decimal point. This should probably use locale to find the correct - * char to print out. - */ - dopr_outch (buffer, currlen, maxlen, '.'); - - while (fplace > 0) - dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]); - - while (zpadlen > 0) - { - dopr_outch (buffer, currlen, maxlen, '0'); - --zpadlen; - } - - while (padlen < 0) - { - dopr_outch (buffer, currlen, maxlen, ' '); - ++padlen; - } -} - -static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c) -{ - if (*currlen < maxlen) - buffer[(*currlen)++] = c; -} -#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */ - -#ifndef HAVE_VSNPRINTF -int mutt_vsnprintf (char *str, size_t count, const char *fmt, va_list args) -{ - str[0] = 0; - dopr(str, count, fmt, args); - return(strlen(str)); -} -#endif /* !HAVE_VSNPRINTF */ - -#ifndef HAVE_SNPRINTF -/* VARARGS3 */ -#ifdef HAVE_STDARGS -int mutt_snprintf (char *str,size_t count,const char *fmt,...) -#else -int mutt_snprintf (va_alist) va_dcl -#endif -{ -#ifndef HAVE_STDARGS - char *str; - size_t count; - char *fmt; -#endif - VA_LOCAL_DECL; - - VA_START (fmt); - VA_SHIFT (str, char *); - VA_SHIFT (count, size_t ); - VA_SHIFT (fmt, char *); -#ifdef HAVE_VSNPRINTF - (void) vsnprintf(str, count, fmt, ap); -#else - (void) mutt_vsnprintf(str, count, fmt, ap); -#endif - VA_END; - return((int)strlen(str)); -} - -#ifdef TEST_SNPRINTF -#ifndef LONG_STRING -#define LONG_STRING 1024 -#endif -int main (void) -{ - char buf1[LONG_STRING]; - char buf2[LONG_STRING]; - char *fp_fmt[] = { - "%-1.5f", - "%1.5f", - "%123.9f", - "%10.5f", - "% 10.5f", - "%+22.9f", - "%+4.9f", - "%01.3f", - "%4f", - "%3.1f", - "%3.2f", - NULL - }; - double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, - 0.9996, 1.996, 4.136, 0}; - char *int_fmt[] = { - "%-1.5d", - "%1.5d", - "%123.9d", - "%5.5d", - "%10.5d", - "% 10.5d", - "%+22.33d", - "%01.3d", - "%4d", - NULL - }; - long int_nums[] = { -1, 134, 91340, 341, 0203, 0}; - int x, y; - int fail = 0; - int num = 0; - - printf ("Testing snprintf format codes against system sprintf...\n"); - - for (x = 0; fp_fmt[x] != NULL ; x++) - for (y = 0; fp_nums[y] != 0 ; y++) - { - mutt_snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]); - sprintf (buf2, fp_fmt[x], fp_nums[y]); - if (strcmp (buf1, buf2)) - { - printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - fp_fmt[x], buf1, buf2); - fail++; - } - num++; - } - - for (x = 0; int_fmt[x] != NULL ; x++) - for (y = 0; int_nums[y] != 0 ; y++) - { - mutt_snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]); - sprintf (buf2, int_fmt[x], int_nums[y]); - if (strcmp (buf1, buf2)) - { - printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - int_fmt[x], buf1, buf2); - fail++; - } - num++; - } - printf ("%d tests failed out of %d.\n", fail, num); -} -#endif /* SNPRINTF_TEST */ - -#endif /* !HAVE_SNPRINTF */ diff --git a/Utilities/cmtar/compat/strdup.c b/Utilities/cmtar/compat/strdup.c deleted file mode 100644 index 9dabf37..0000000 --- a/Utilities/cmtar/compat/strdup.c +++ /dev/null @@ -1,62 +0,0 @@ -/* $OpenBSD: strdup.c,v 1.3 1997/08/20 04:18:52 millert Exp $ */ - -/* - * Copyright (c) 1988, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)strdup.c 8.1 (Berkeley) 6/4/93"; -#else -static char *rcsid = "$OpenBSD: strdup.c,v 1.3 1997/08/20 04:18:52 millert Exp $"; -#endif -#endif /* LIBC_SCCS and not lint */ - -#include <sys/types.h> - -#include <stddef.h> -#include <stdlib.h> -#include <string.h> - -char * -openbsd_strdup(str) - const char *str; -{ - size_t siz; - char *copy; - - siz = strlen(str) + 1; - if ((copy = malloc(siz)) == NULL) - return(NULL); - (void)memcpy(copy, str, siz); - return(copy); -} diff --git a/Utilities/cmtar/compat/strlcat.c b/Utilities/cmtar/compat/strlcat.c deleted file mode 100644 index e8945c1..0000000 --- a/Utilities/cmtar/compat/strlcat.c +++ /dev/null @@ -1,72 +0,0 @@ -/* $OpenBSD: strlcat.c,v 1.5 2001/01/13 16:17:24 millert Exp $ */ - -/* - * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: strlcat.c,v 1.5 2001/01/13 16:17:24 millert Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include <sys/types.h> -#include <string.h> - -/* - * Appends src to string dst of size siz (unlike strncat, siz is the - * full size of dst, not space left). At most siz-1 characters - * will be copied. Always NUL terminates (unless siz <= strlen(dst)). - * Returns strlen(initial dst) + strlen(src); if retval >= siz, - * truncation occurred. - */ -size_t strlcat(dst, src, siz) - char *dst; - const char *src; - size_t siz; -{ - register char *d = dst; - register const char *s = src; - register size_t n = siz; - size_t dlen; - - /* Find the end of dst and adjust bytes left but don't go past end */ - while (n-- != 0 && *d != '\0') - d++; - dlen = d - dst; - n = siz - dlen; - - if (n == 0) - return(dlen + strlen(s)); - while (*s != '\0') { - if (n != 1) { - *d++ = *s; - n--; - } - s++; - } - *d = '\0'; - - return(dlen + (s - src)); /* count does not include NUL */ -} diff --git a/Utilities/cmtar/compat/strlcpy.c b/Utilities/cmtar/compat/strlcpy.c deleted file mode 100644 index ee46557..0000000 --- a/Utilities/cmtar/compat/strlcpy.c +++ /dev/null @@ -1,67 +0,0 @@ -/* $OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $ */ - -/* - * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include <sys/types.h> -#include <string.h> - -size_t strlcpy(char *dst, const char *src, size_t siz); - -/* - * Copy src to string dst of size siz. At most siz-1 characters - * will be copied. Always NUL terminates (unless siz == 0). - * Returns strlen(src); if retval >= siz, truncation occurred. - */ -size_t strlcpy(char *dst, const char *src, size_t siz) -{ - register char *d = dst; - register const char *s = src; - register size_t n = siz; - - /* Copy as many bytes as will fit */ - if (n != 0 && --n != 0) { - do { - if ((*d++ = *s++) == 0) - break; - } while (--n != 0); - } - - /* Not enough room in dst, add NUL and traverse rest of src */ - if (n == 0) { - if (siz != 0) - *d = '\0'; /* NUL-terminate dst */ - while (*s++) - ; - } - - return(s - src - 1); /* count does not include NUL */ -} diff --git a/Utilities/cmtar/compat/strmode.c b/Utilities/cmtar/compat/strmode.c deleted file mode 100644 index 832b0e7..0000000 --- a/Utilities/cmtar/compat/strmode.c +++ /dev/null @@ -1,185 +0,0 @@ -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: strmode.c,v 1.3 1997/06/13 13:57:20 deraadt Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <string.h> -#include <libtar/compat.h> - -void -strmode(mode, p) - register mode_t mode; - register char *p; -{ - /* print type */ - switch (mode & S_IFMT) { - case S_IFDIR: /* directory */ - *p++ = 'd'; - break; - case S_IFCHR: /* character special */ - *p++ = 'c'; - break; - case S_IFBLK: /* block special */ - *p++ = 'b'; - break; - case S_IFREG: /* regular */ - *p++ = '-'; - break; -#ifdef S_IFLNK - case S_IFLNK: /* symbolic link */ - *p++ = 'l'; - break; -#endif -#ifdef S_IFSOCK - case S_IFSOCK: /* socket */ - *p++ = 's'; - break; -#endif -#ifdef S_IFIFO - case S_IFIFO: /* fifo */ - *p++ = 'p'; - break; -#endif -#ifdef S_IFWHT - case S_IFWHT: /* whiteout */ - *p++ = 'w'; - break; -#endif - default: /* unknown */ - *p++ = '?'; - break; - } - /* usr */ -#ifdef S_IRUSR - if (mode & S_IRUSR) - *p++ = 'r'; - else -#endif - *p++ = '-'; - -#ifdef S_IWUSR - if (mode & S_IWUSR) - *p++ = 'w'; - else -#endif - *p++ = '-'; - -#ifndef _MSC_VER -#ifdef S_ISUID - switch (mode & (S_IXUSR | S_ISUID)) { -#else - switch (mode & (S_IXUSR)) { -#endif - case 0: - *p++ = '-'; - break; - case S_IXUSR: - *p++ = 'x'; - break; -#ifdef S_ISUID - case S_ISUID: - *p++ = 'S'; - break; - case S_IXUSR | S_ISUID: - *p++ = 's'; - break; -#endif - } -#endif - /* group */ -#ifdef S_IRGRP - if (mode & S_IRGRP) - *p++ = 'r'; - else -#endif - *p++ = '-'; -#ifdef S_IWGRP - if (mode & S_IWGRP) - *p++ = 'w'; - else -#endif - *p++ = '-'; -#if defined(S_IXGRP) && defined(S_ISGID) - switch (mode & (S_IXGRP | S_ISGID)) { - case 0: - *p++ = '-'; - break; - case S_IXGRP: - *p++ = 'x'; - break; - case S_ISGID: - *p++ = 'S'; - break; - case S_IXGRP | S_ISGID: - *p++ = 's'; - break; - } -#else - *p++ = '-'; -#endif -#ifndef WIN32 - /* other */ - if (mode & S_IROTH) - *p++ = 'r'; - else - *p++ = '-'; - if (mode & S_IWOTH) - *p++ = 'w'; - else - *p++ = '-'; - switch (mode & (S_IXOTH | S_ISVTX)) { - case 0: - *p++ = '-'; - break; - case S_IXOTH: - *p++ = 'x'; - break; - case S_ISVTX: - *p++ = 'T'; - break; - case S_IXOTH | S_ISVTX: - *p++ = 't'; - break; - } -#else - *p++ = '-'; - *p++ = '-'; - *p++ = '-'; -#endif - *p++ = ' '; /* will be a '+' if ACL's implemented */ - *p = '\0'; -} diff --git a/Utilities/cmtar/compat/strrstr.c b/Utilities/cmtar/compat/strrstr.c deleted file mode 100644 index 8b7f299..0000000 --- a/Utilities/cmtar/compat/strrstr.c +++ /dev/null @@ -1,40 +0,0 @@ -/* -** Copyright 1998-2002 University of Illinois Board of Trustees -** Copyright 1998-2002 Mark D. Roth -** All rights reserved. -** -** strrstr.c - strrstr() function for compatibility library -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <stdio.h> -#include <sys/types.h> - -#include <string.h> - - -/* -** find the last occurrance of find in string -*/ -char * -strrstr(char *string, char *find) -{ - size_t stringlen, findlen; - char *cp; - - findlen = strlen(find); - stringlen = strlen(string); - if (findlen > stringlen) - return NULL; - - for (cp = string + stringlen - findlen; cp >= string; cp--) - if (strncmp(cp, find, findlen) == 0) - return cp; - - return NULL; -} - - diff --git a/Utilities/cmtar/compat/strsep.c b/Utilities/cmtar/compat/strsep.c deleted file mode 100644 index 9d036a9..0000000 --- a/Utilities/cmtar/compat/strsep.c +++ /dev/null @@ -1,87 +0,0 @@ -/* $OpenBSD: strsep.c,v 1.3 1997/08/20 04:28:14 millert Exp $ */ - -/*- - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <string.h> -#include <stdio.h> - -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93"; -#else -static char *rcsid = "$OpenBSD: strsep.c,v 1.3 1997/08/20 04:28:14 millert Exp $"; -#endif -#endif /* LIBC_SCCS and not lint */ - -#ifndef HAVE_STRSEP -/* - * Get next token from string *stringp, where tokens are possibly-empty - * strings separated by characters from delim. - * - * Writes NULs into the string at *stringp to end tokens. - * delim need not remain constant from call to call. - * On return, *stringp points past the last NUL written (if there might - * be further tokens), or is NULL (if there are definitely no more tokens). - * - * If *stringp is NULL, strsep returns NULL. - */ -char * -strsep(stringp, delim) - register char **stringp; - register const char *delim; -{ - register char *s; - register const char *spanp; - register int c, sc; - char *tok; - - if ((s = *stringp) == NULL) - return (NULL); - for (tok = s;;) { - c = *s++; - spanp = delim; - do { - if ((sc = *spanp++) == c) { - if (c == 0) - s = NULL; - else - s[-1] = 0; - *stringp = s; - return (tok); - } - } while (sc != 0); - } - /* NOTREACHED */ -} -#endif /* ! HAVE_STRSEP */ diff --git a/Utilities/cmtar/config.h.in b/Utilities/cmtar/config.h.in deleted file mode 100644 index db619b0..0000000 --- a/Utilities/cmtar/config.h.in +++ /dev/null @@ -1,213 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if your system has a working basename */ -#cmakedefine HAVE_BASENAME @HAVE_BASENAME@ - -/* Define if your system has a working major */ -#cmakedefine HAVE_MAJOR @HAVE_MAJOR@ - -/* Define if your system has a working minor */ -#cmakedefine HAVE_MINOR @HAVE_MINOR@ - -/* Define if your system has a working minor */ -#cmakedefine HAVE_MAKEDEV @HAVE_MAKEDEV@ - -/* Define to 1 if you have the <ctype.h> header file. */ -#cmakedefine HAVE_CTYPE_H @HAVE_CTYPE_H@ - -/* Define to 1 if you have the <sys/sysmacros.h> header file. */ -#cmakedefine HAVE_SYS_SYSMACROS_H @HAVE_SYS_SYSMACROS_H@ - -/* Define to 1 if the system has the type `dev_t'. */ -#cmakedefine HAVE_DEV_T @HAVE_DEV_T@ - -/* Define if your system has a working dirname */ -#cmakedefine HAVE_DIRNAME @HAVE_DIRNAME@ - -/* Define to 1 if your system has a working POSIX `fnmatch' function. */ -#cmakedefine HAVE_FNMATCH @HAVE_FNMATCH@ - -/* Define to 1 if you have the <fnmatch.h> header file. */ -#cmakedefine HAVE_FNMATCH_H @HAVE_FNMATCH_H@ - -/* Define to 1 if you have the <inttypes.h> header file. */ -#cmakedefine HAVE_INTTYPES_H @HAVE_INTTYPES_H@ - -/* Define to 1 if you have the <io.h> header file. */ -#cmakedefine HAVE_IO_H @HAVE_IO_H@ - -/* Define to 1 if you have the `lchown' function. */ -#cmakedefine HAVE_LCHOWN @HAVE_LCHOWN@ - -/* Define to 1 if you have the <libgen.h> header file. */ -#cmakedefine HAVE_LIBGEN_H @HAVE_LIBGEN_H@ - -/* Define to 1 if you have the `z' library (-lz). */ -#cmakedefine HAVE_LIBZ @HAVE_LIBZ@ - -/* Define to 1 if the system has the type `major_t'. */ -#cmakedefine HAVE_MAJOR_T @HAVE_MAJOR_T@ - -/* Define to 1 if you have the <memory.h> header file. */ -#cmakedefine HAVE_MEMORY_H @HAVE_MEMORY_H@ - -/* Define to 1 if you have the <dirent.h> header file. */ -#cmakedefine HAVE_DIRENT_H @HAVE_DIRENT_H@ - -/* Define to 1 if you have the <sys/param.h> header file. */ -#cmakedefine HAVE_SYS_PARAM_H @HAVE_SYS_PARAM_H@ - -/* Define to 1 if the system has the type `minor_t'. */ -#cmakedefine HAVE_MINOR_T @HAVE_MINOR_T@ - -/* Define to 1 if the system has the type `nlink_t'. */ -#cmakedefine HAVE_NLINK_T @HAVE_NLINK_T@ - -/* Define if your system has a working snprintf */ -#cmakedefine HAVE_SNPRINTF @HAVE_SNPRINTF@ - -/* Define if your system has a working vsnprintf */ -#cmakedefine HAVE_VSNPRINTF @HAVE_VSNPRINTF@ - -/* Define to 1 if you have the <stdint.h> header file. */ -#cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@ - -/* Define to 1 if you have the <stdlib.h> header file. */ -#cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@ - -/* Define to 1 if you have the <sys/mkdev.h> header file. */ -#cmakedefine HAVE_SYS_MKDEV_H @HAVE_SYS_MKDEV_H@ - -/* Define if you have the strdup function */ -#cmakedefine HAVE_STRDUP @HAVE_STRDUP@ - -/* Define to 1 if you have the `strftime' function. */ -#cmakedefine HAVE_STRFTIME @HAVE_STRFTIME@ - -/* Define to 1 if you have the <strings.h> header file. */ -#cmakedefine HAVE_STRINGS_H @HAVE_STRINGS_H@ - -/* Define to 1 if you have the <string.h> header file. */ -#cmakedefine HAVE_STRING_H @HAVE_STRING_H@ - -/* Define if you have the strlcpy function */ -#cmakedefine HAVE_STRLCPY @HAVE_STRLCPY@ - -/* Define if you have the strmode function */ -#cmakedefine HAVE_STRMODE @HAVE_STRMODE@ - -/* Define if you have the strsep function */ -#cmakedefine HAVE_STRSEP @HAVE_STRSEP@ - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#cmakedefine HAVE_SYS_STAT_H @HAVE_SYS_STAT_H@ - -/* Define to 1 if you have the <sys/types.h> header file. */ -#cmakedefine HAVE_SYS_TYPES_H @HAVE_SYS_TYPES_H@ - -/* Define to 1 if the system has the type `uint64_t'. */ -#cmakedefine HAVE_UINT64_T @HAVE_UINT64_T@ - -/* Define to 1 if you have the <unistd.h> header file. */ -#cmakedefine HAVE_UNISTD_H @HAVE_UNISTD_H@ - -/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>. - */ -#cmakedefine MAJOR_IN_MKDEV @MAJOR_IN_MKDEV@ - -/* Define to 1 if `major', `minor', and `makedev' are declared in - <sysmacros.h>. */ -#cmakedefine MAJOR_IN_SYSMACROS @MAJOR_IN_SYSMACROS@ - -/* Define as 1 if makedev expects three arguments */ -#cmakedefine MAKEDEV_THREE_ARGS @MAKEDEV_THREE_ARGS@ - -/* Define if you want to use the basename function */ -#cmakedefine NEED_BASENAME @NEED_BASENAME@ - -/* Define if you want to use the dirname function */ -#cmakedefine NEED_DIRNAME @NEED_DIRNAME@ - -/* Define if you want to use the fnmatch function */ -#cmakedefine NEED_FNMATCH @NEED_FNMATCH@ - -/* Define if you want to use the makedev function */ -#cmakedefine NEED_MAKEDEV @NEED_MAKEDEV@ - -/* Define if you want to use the snprintf function */ -#cmakedefine NEED_SNPRINTF @NEED_SNPRINTF@ - -/* Define if you want to use the strdup function */ -#cmakedefine NEED_STRDUP @NEED_STRDUP@ - -/* Define if you want to use the strlcpy function */ -#cmakedefine NEED_STRLCPY @NEED_STRLCPY@ - -/* Define if you want to use the strmode function */ -#cmakedefine NEED_STRMODE @NEED_STRMODE@ - -/* Define if you want to use the strsep function */ -#cmakedefine NEED_STRSEP @NEED_STRSEP@ - -/* Define to the address where bug reports for this package should be sent. */ -#cmakedefine PACKAGE_BUGREPORT @PACKAGE_BUGREPORT@ - -/* Define to the full name of this package. */ -#cmakedefine PACKAGE_NAME @PACKAGE_NAME@ - -/* Define to the full name and version of this package. */ -#cmakedefine PACKAGE_STRING @PACKAGE_STRING@ - -/* Define to the one symbol short name of this package. */ -#cmakedefine PACKAGE_TARNAME @PACKAGE_TARNAME@ - -/* Define to the version of this package. */ -#cmakedefine PACKAGE_VERSION @PACKAGE_VERSION@ - -/* Define to 1 if you have the ANSI C header files. */ -#cmakedefine STDC_HEADERS @STDC_HEADERS@ - -/* Define to 1 if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ -#ifndef _ALL_SOURCE -#cmakedefine _ALL_SOURCE @_ALL_SOURCE@ -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -#cmakedefine const @const@ - -/* Define to `unsigned long' if not defined in system header files. */ -#cmakedefine dev_t @dev_t@ - -/* Define to `int' if <sys/types.h> doesn't define. */ -#cmakedefine gid_t @gid_t@ - -/* Define to `unsigned int' if not defined in system header files. */ -#cmakedefine major_t @major_t@ - -/* Define to `unsigned int' if not defined in system header files. */ -#cmakedefine minor_t @minor_t@ - -/* Define to `int' if <sys/types.h> does not define. */ -#cmakedefine mode_t @mode_t@ - -/* Define to `unsigned short' if not defined in system header files. */ -#cmakedefine nlink_t @nlink_t@ - -/* Define to `long' if <sys/types.h> does not define. */ -#cmakedefine off_t @off_t@ - -/* Define to `unsigned' if <sys/types.h> does not define. */ -#cmakedefine size_t @size_t@ - -/* Define to `int' if <sys/types.h> does not define. */ -#cmakedefine ssize_t @ssize_t@ - -/* Define to `int' if <sys/types.h> doesn't define. */ -#cmakedefine uid_t @uid_t@ - -/* Define to `long long' if not defined in system header files. */ -#cmakedefine uint64_t @uint64_t@ - -#define CMTAR_ZLIB_HEADER "@CMTAR_ZLIB_HEADER@" diff --git a/Utilities/cmtar/decode.c b/Utilities/cmtar/decode.c deleted file mode 100644 index b183010..0000000 --- a/Utilities/cmtar/decode.c +++ /dev/null @@ -1,140 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** decode.c - libtar code to decode tar header blocks -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> - -#if defined(_WIN32) && !defined(__CYGWIN__) -# include <libtar/compat.h> -#else -# ifdef HAVE_SYS_PARAM_H -# include <sys/param.h> -# endif -#endif - -#ifndef WIN32 -#include <pwd.h> -#include <grp.h> -#endif - -#ifdef STDC_HEADERS -# include <string.h> -#endif - - -/* determine full path name */ -/* caller must "free" returned pointer when done with it */ -/* th_get_pathname return values come directly from strdup */ -char * -th_get_pathname(TAR *t) -{ - char filename[TAR_MAXPATHLEN]; - - if (t->th_buf.gnu_longname) - return strdup(t->th_buf.gnu_longname); - - if (t->th_buf.prefix[0] != '\0') - { - snprintf(filename, sizeof(filename), "%.155s/%.100s", - t->th_buf.prefix, t->th_buf.name); - return strdup(filename); - } - - snprintf(filename, sizeof(filename), "%.100s", t->th_buf.name); - return strdup(filename); -} - - -uid_t -th_get_uid(TAR *t) -{ - int uid; -#ifndef WIN32 - struct passwd *pw; - - pw = getpwnam(t->th_buf.uname); - if (pw != NULL) - return pw->pw_uid; - - /* if the password entry doesn't exist */ -#endif - sscanf(t->th_buf.uid, "%o", &uid); - return uid; -} - - -gid_t -th_get_gid(TAR *t) -{ - int gid; -#ifndef WIN32 - struct group *gr; - - gr = getgrnam(t->th_buf.gname); - if (gr != NULL) - return gr->gr_gid; - - /* if the group entry doesn't exist */ -#endif - sscanf(t->th_buf.gid, "%o", &gid); - return gid; -} - - -mode_t -th_get_mode(TAR *t) -{ - mode_t mode; - - mode = (mode_t)oct_to_int(t->th_buf.mode); - if (! (mode & S_IFMT)) - { - switch (t->th_buf.typeflag) - { -#ifndef WIN32 - case SYMTYPE: - mode |= S_IFLNK; - break; -#endif - case CHRTYPE: - mode |= S_IFCHR; - break; - case BLKTYPE: - mode |= S_IFBLK; - break; - case DIRTYPE: - mode |= S_IFDIR; - break; -#ifndef WIN32 - case FIFOTYPE: - mode |= S_IFIFO; - break; -#endif - case AREGTYPE: - if (t->th_buf.name[strlen(t->th_buf.name) - 1] == '/') - { - mode |= S_IFDIR; - break; - } - /* FALLTHROUGH */ - case LNKTYPE: - case REGTYPE: - default: - mode |= S_IFREG; - } - } - - return mode; -} - - diff --git a/Utilities/cmtar/encode.c b/Utilities/cmtar/encode.c deleted file mode 100644 index 40b5707..0000000 --- a/Utilities/cmtar/encode.c +++ /dev/null @@ -1,231 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** encode.c - libtar code to encode tar header blocks -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> -#ifndef WIN32 -#include <pwd.h> -#include <grp.h> -#endif -#include <sys/types.h> - -#ifdef STDC_HEADERS -# include <string.h> -# include <stdlib.h> -#endif - - -/* magic, version, and checksum */ -void -th_finish(TAR *t) -{ - int i, sum = 0; - - if (t->options & TAR_GNU) - strncpy(t->th_buf.magic, "ustar ", 8); - else - { - strncpy(t->th_buf.version, TVERSION, TVERSLEN); - strncpy(t->th_buf.magic, TMAGIC, TMAGLEN); - } - - for (i = 0; i < T_BLOCKSIZE; i++) - sum += ((char *)(&(t->th_buf)))[i]; - for (i = 0; i < 8; i++) - sum += (' ' - t->th_buf.chksum[i]); - int_to_oct(sum, t->th_buf.chksum, 8); -} - - -/* map a file mode to a typeflag */ -void -th_set_type(TAR *t, mode_t mode) -{ -#ifdef S_ISLNK - if (S_ISLNK(mode)) - t->th_buf.typeflag = SYMTYPE; -#endif - if (S_ISREG(mode)) - t->th_buf.typeflag = REGTYPE; - if (S_ISDIR(mode)) - t->th_buf.typeflag = DIRTYPE; -#ifdef S_ISCHR - if (S_ISCHR(mode)) - t->th_buf.typeflag = CHRTYPE; -#endif - if (S_ISBLK(mode)) - t->th_buf.typeflag = BLKTYPE; - if (S_ISFIFO(mode) -#ifdef S_ISSOCK - || S_ISSOCK(mode)) -#else - ) -#endif - t->th_buf.typeflag = FIFOTYPE; -} - - -/* encode file path */ -void -th_set_path(TAR *t, char *pathname) -{ - char suffix[2] = ""; - char *tmp; - -#ifdef DEBUG - printf("in th_set_path(th, pathname=\"%s\")\n", pathname); -#endif - - if (t->th_buf.gnu_longname != NULL) - free(t->th_buf.gnu_longname); - t->th_buf.gnu_longname = NULL; - - if (pathname[strlen(pathname) - 1] != '/' && TH_ISDIR(t)) - strcpy(suffix, "/"); - - if (strlen(pathname)+strlen(suffix) >= T_NAMELEN && (t->options & TAR_GNU)) - { - /* GNU-style long name */ - t->th_buf.gnu_longname = strdup(pathname); - strncpy(t->th_buf.name, t->th_buf.gnu_longname, T_NAMELEN); - } - else if (strlen(pathname)+ strlen(suffix) >= T_NAMELEN) - { - /* POSIX-style prefix field */ - tmp = strrchr(pathname, '/'); - if (tmp == NULL) - { - printf("!!! '/' not found in \"%s\"\n", pathname); - return; - } - snprintf(t->th_buf.name, 100, "%s%s", &(tmp[1]), suffix); - snprintf(t->th_buf.prefix, - ((tmp - pathname + 1) < - 155 ? (tmp - pathname + 1) : 155), "%s", pathname); - } - else - /* classic tar format */ - snprintf(t->th_buf.name, 100, "%s%s", pathname, suffix); - -#ifdef DEBUG - puts("returning from th_set_path()..."); -#endif -} - - -/* encode link path */ -void -th_set_link(TAR *t, char *linkname) -{ -#ifdef DEBUG - printf("==> th_set_link(th, linkname=\"%s\")\n", linkname); -#endif - - if (strlen(linkname) > T_NAMELEN && (t->options & TAR_GNU)) - { - /* GNU longlink format */ - t->th_buf.gnu_longlink = strdup(linkname); - strcpy(t->th_buf.linkname, "././@LongLink"); - } - else - { - /* classic tar format */ - strlcpy(t->th_buf.linkname, linkname, - sizeof(t->th_buf.linkname)); - if (t->th_buf.gnu_longlink != NULL) - free(t->th_buf.gnu_longlink); - t->th_buf.gnu_longlink = NULL; - } -} - - -/* encode device info */ -void -th_set_device(TAR *t, dev_t device) -{ -#ifdef DEBUG - printf("th_set_device(): major = %d, minor = %d\n", - major(device), minor(device)); -#endif - int_to_oct(major(device), t->th_buf.devmajor, 8); - int_to_oct(minor(device), t->th_buf.devminor, 8); -} - - -/* encode user info */ -void -th_set_user(TAR *t, uid_t uid) -{ -#ifndef WIN32 - struct passwd *pw; - - pw = getpwuid(uid); - if (pw != NULL) - strlcpy(t->th_buf.uname, pw->pw_name, sizeof(t->th_buf.uname)); -#endif - int_to_oct(uid, t->th_buf.uid, 8); -} - - -/* encode group info */ -void -th_set_group(TAR *t, gid_t gid) -{ -#ifndef WIN32 - struct group *gr; - - gr = getgrgid(gid); - if (gr != NULL) - strlcpy(t->th_buf.gname, gr->gr_name, sizeof(t->th_buf.gname)); -#endif - int_to_oct(gid, t->th_buf.gid, 8); -} - - -/* encode file mode */ -void -th_set_mode(TAR *t, mode_t fmode) -{ -#ifndef WIN32 -#ifndef __BEOS__ - if (S_ISSOCK(fmode)) - { - fmode &= ~S_IFSOCK; - fmode |= S_IFIFO; - } -#endif -#endif - /* Looks like on windows the st_mode is longer than 8 characters. */ - int_to_oct(fmode & 07777777, (t)->th_buf.mode, 8); -} - - -void -th_set_from_stat(TAR *t, struct stat *s) -{ - th_set_type(t, s->st_mode); -#ifndef WIN32 - if (S_ISCHR(s->st_mode) || S_ISBLK(s->st_mode)) - th_set_device(t, s->st_rdev); -#endif - th_set_user(t, s->st_uid); - th_set_group(t, s->st_gid); - th_set_mode(t, s->st_mode); - th_set_mtime(t, s->st_mtime); - if (S_ISREG(s->st_mode)) - th_set_size(t, s->st_size); - else - th_set_size(t, 0); -} - - diff --git a/Utilities/cmtar/extract.c b/Utilities/cmtar/extract.c deleted file mode 100644 index 36599d5..0000000 --- a/Utilities/cmtar/extract.c +++ /dev/null @@ -1,897 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** extract.c - libtar code to extract a file from a tar archive -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> -#include <libtar/compat.h> -#include <sys/types.h> -#include <fcntl.h> -#include <errno.h> - -#if defined(_WIN32) && !defined(__CYGWIN__) -# ifdef _MSC_VER -# include <sys/utime.h> -# else -# include <utime.h> -# endif -# include <io.h> -# include <direct.h> -#else -# include <utime.h> -# ifdef HAVE_SYS_PARAM_H -# include <sys/param.h> -# endif -#endif - -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <string.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif - -#ifdef HAVE_SYS_MKDEV_H -# include <sys/mkdev.h> -#endif - - -struct linkname -{ - char ln_save[TAR_MAXPATHLEN]; - char ln_real[TAR_MAXPATHLEN]; -}; -typedef struct linkname linkname_t; - - -static int -tar_set_file_perms(TAR *t, char *realname) -{ - mode_t mode; - uid_t uid; - gid_t gid; - struct utimbuf ut; - char *filename; - char *pathname = 0; - - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - - mode = th_get_mode(t); - uid = th_get_uid(t); - gid = th_get_gid(t); - ut.modtime = ut.actime = th_get_mtime(t); - - /* change owner/group */ -#ifndef WIN32 - if (geteuid() == 0) -#ifdef HAVE_LCHOWN - if (lchown(filename, uid, gid) == -1) - { -# ifdef DEBUG - fprintf(stderr, "lchown(\"%s\", %d, %d): %s\n", - filename, uid, gid, strerror(errno)); -# endif -#else /* ! HAVE_LCHOWN */ - if (!TH_ISSYM(t) && chown(filename, uid, gid) == -1) - { -# ifdef DEBUG - fprintf(stderr, "chown(\"%s\", %d, %d): %s\n", - filename, uid, gid, strerror(errno)); -# endif -#endif /* HAVE_LCHOWN */ - if (pathname) - { - free(pathname); - } - return -1; - } - - /* change access/modification time */ - if (!TH_ISSYM(t) && utime(filename, &ut) == -1) - { -#ifdef DEBUG - perror("utime()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - /* change permissions */ - if (!TH_ISSYM(t) && chmod(filename, mode & 07777) == -1) - { -#ifdef DEBUG - perror("chmod()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - -#else /* WIN32 */ - (void)filename; - (void)gid; - (void)uid; - (void)mode; -#endif /* WIN32 */ - - if (pathname) - { - free(pathname); - } - return 0; -} - - -/* switchboard */ -int -tar_extract_file(TAR *t, char *realname) -{ - int i; - linkname_t *lnp; - char *pathname; - - if (t->options & TAR_NOOVERWRITE) - { - struct stat s; - -#ifdef WIN32 - if (stat(realname, &s) == 0 || errno != ENOENT) -#else - if (lstat(realname, &s) == 0 || errno != ENOENT) -#endif - { - errno = EEXIST; - return -1; - } - } - - if (TH_ISDIR(t)) - { - i = tar_extract_dir(t, realname); - if (i == 1) - i = 0; - } -#ifndef _WIN32 - else if (TH_ISLNK(t)) - i = tar_extract_hardlink(t, realname); - else if (TH_ISSYM(t)) - i = tar_extract_symlink(t, realname); - else if (TH_ISCHR(t)) - i = tar_extract_chardev(t, realname); - else if (TH_ISBLK(t)) - i = tar_extract_blockdev(t, realname); - else if (TH_ISFIFO(t)) - i = tar_extract_fifo(t, realname); -#endif - else /* if (TH_ISREG(t)) */ - i = tar_extract_regfile(t, realname); - - if (i != 0) - return i; - - i = tar_set_file_perms(t, realname); - if (i != 0) - return i; - - lnp = (linkname_t *)calloc(1, sizeof(linkname_t)); - if (lnp == NULL) - return -1; - pathname = th_get_pathname(t); - strlcpy(lnp->ln_save, pathname, sizeof(lnp->ln_save)); - strlcpy(lnp->ln_real, realname, sizeof(lnp->ln_real)); -#ifdef DEBUG - printf("tar_extract_file(): calling libtar_hash_add(): key=\"%s\", " - "value=\"%s\"\n", pathname, realname); -#endif - if (pathname) - { - free(pathname); - } - if (libtar_hash_add(t->h, lnp) != 0) - return -1; - - return 0; -} - - -/* extract regular file */ -int -tar_extract_regfile(TAR *t, char *realname) -{ - mode_t mode; - size_t size; - uid_t uid; - gid_t gid; - int fdout; - ssize_t i, k; - char buf[T_BLOCKSIZE]; - char *filename; - char *pathname = 0; - -#ifdef DEBUG - printf("==> tar_extract_regfile(t=0x%lx, realname=\"%s\")\n", t, - realname); -#endif - - if (!TH_ISREG(t)) - { - errno = EINVAL; - return -1; - } - - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - mode = th_get_mode(t); - size = th_get_size(t); - uid = th_get_uid(t); - gid = th_get_gid(t); - - /* Make a copy of the string because dirname and mkdirhier may modify the - * string */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - - if (mkdirhier(dirname(buf)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifdef DEBUG - printf(" ==> extracting: %s (mode %04o, uid %d, gid %d, %d bytes)\n", - filename, mode, uid, gid, size); -#endif - fdout = open(filename, O_WRONLY | O_CREAT | O_TRUNC -#ifdef O_BINARY - | O_BINARY -#endif - , 0666); - if (fdout == -1) - { -#ifdef DEBUG - perror("open()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - -#if 0 - /* change the owner. (will only work if run as root) */ - if (fchown(fdout, uid, gid) == -1 && errno != EPERM) - { -#ifdef DEBUG - perror("fchown()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - - /* make sure the mode isn't inheritted from a file we're overwriting */ - if (fchmod(fdout, mode & 07777) == -1) - { -#ifdef DEBUG - perror("fchmod()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } -#endif - - /* extract the file */ - for (i = size; i > 0; i -= T_BLOCKSIZE) - { - k = tar_block_read(t, buf); - if (k != T_BLOCKSIZE) - { - if (k != -1) - errno = EINVAL; - if (pathname) - { - free(pathname); - } - return -1; - } - - /* write block to output file */ - if (write(fdout, buf, - ((i > T_BLOCKSIZE) ? T_BLOCKSIZE : (unsigned int)i)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - } - - /* close output file */ - if (close(fdout) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifdef DEBUG - printf("### done extracting %s\n", filename); -#endif - - (void)filename; - (void)gid; - (void)uid; - (void)mode; - - if (pathname) - { - free(pathname); - } - return 0; -} - - -/* skip regfile */ -int -tar_skip_regfile(TAR *t) -{ - ssize_t i, k; - size_t size; - char buf[T_BLOCKSIZE]; - - if (!TH_ISREG(t)) - { - errno = EINVAL; - return -1; - } - - size = th_get_size(t); - for (i = size; i > 0; i -= T_BLOCKSIZE) - { - k = tar_block_read(t, buf); - if (k != T_BLOCKSIZE) - { - if (k != -1) - errno = EINVAL; - return -1; - } - } - - return 0; -} - - -/* hardlink */ -int -tar_extract_hardlink(TAR * t, char *realname) -{ - char *filename; - char *linktgt; - linkname_t *lnp; - libtar_hashptr_t hp; - char buf[T_BLOCKSIZE]; - char *pathname = 0; - - if (!TH_ISLNK(t)) - { - errno = EINVAL; - return -1; - } - - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - - /* Make a copy of the string because dirname and mkdirhier may modify the - * string */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - - if (mkdirhier(dirname(buf)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - libtar_hashptr_reset(&hp); - if (libtar_hash_getkey(t->h, &hp, th_get_linkname(t), - (libtar_matchfunc_t)libtar_str_match) != 0) - { - lnp = (linkname_t *)libtar_hashptr_data(&hp); - linktgt = lnp->ln_real; - } - else - linktgt = th_get_linkname(t); - -#ifdef DEBUG - printf(" ==> extracting: %s (link to %s)\n", filename, linktgt); -#endif -#ifndef WIN32 - if (link(linktgt, filename) == -1) -#else - (void)linktgt; -#endif - { -#ifdef DEBUG - perror("link()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifndef WIN32 - if (pathname) - { - free(pathname); - } - return 0; -#endif -} - - -/* symlink */ -int -tar_extract_symlink(TAR *t, char *realname) -{ - char *filename; - char buf[T_BLOCKSIZE]; - char *pathname = 0; - -#ifndef _WIN32 - if (!TH_ISSYM(t)) - { - errno = EINVAL; - return -1; - } -#endif - - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - - /* Make a copy of the string because dirname and mkdirhier may modify the - * string */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - - if (mkdirhier(dirname(buf)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - - if (unlink(filename) == -1 && errno != ENOENT) - { - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifdef DEBUG - printf(" ==> extracting: %s (symlink to %s)\n", - filename, th_get_linkname(t)); -#endif -#ifndef WIN32 - if (symlink(th_get_linkname(t), filename) == -1) -#endif - { -#ifdef DEBUG - perror("symlink()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifndef WIN32 - if (pathname) - { - free(pathname); - } - return 0; -#endif -} - - -/* character device */ -int -tar_extract_chardev(TAR *t, char *realname) -{ - mode_t mode; - unsigned long devmaj, devmin; - char *filename; - char buf[T_BLOCKSIZE]; - char *pathname = 0; - -#ifndef _WIN32 - if (!TH_ISCHR(t)) - { - errno = EINVAL; - return -1; - } -#endif - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - mode = th_get_mode(t); - devmaj = th_get_devmajor(t); - devmin = th_get_devminor(t); - - /* Make a copy of the string because dirname and mkdirhier may modify the - * string */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - - if (mkdirhier(dirname(buf)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifdef DEBUG - printf(" ==> extracting: %s (character device %ld,%ld)\n", - filename, devmaj, devmin); -#endif -#if !defined(WIN32) && !defined(__VMS) - if (mknod(filename, mode | S_IFCHR, - compat_makedev(devmaj, devmin)) == -1) -#else - (void)devmin; - (void)devmaj; - (void)mode; -#endif - { -#ifdef DEBUG - perror("mknod()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifndef WIN32 - if (pathname) - { - free(pathname); - } - return 0; -#endif -} - - -/* block device */ -int -tar_extract_blockdev(TAR *t, char *realname) -{ - mode_t mode; - unsigned long devmaj, devmin; - char *filename; - char buf[T_BLOCKSIZE]; - char *pathname = 0; - - if (!TH_ISBLK(t)) - { - errno = EINVAL; - return -1; - } - - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - mode = th_get_mode(t); - devmaj = th_get_devmajor(t); - devmin = th_get_devminor(t); - - /* Make a copy of the string because dirname and mkdirhier may modify the - * string */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - - if (mkdirhier(dirname(buf)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifdef DEBUG - printf(" ==> extracting: %s (block device %ld,%ld)\n", - filename, devmaj, devmin); -#endif -#if !defined(WIN32) && !defined(__VMS) - if (mknod(filename, mode | S_IFBLK, - compat_makedev(devmaj, devmin)) == -1) -#else - (void)devmin; - (void)devmaj; - (void)mode; -#endif - { -#ifdef DEBUG - perror("mknod()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifndef WIN32 - if (pathname) - { - free(pathname); - } - return 0; -#endif -} - - -/* directory */ -int -tar_extract_dir(TAR *t, char *realname) -{ - mode_t mode; - char *filename; - char buf[T_BLOCKSIZE]; - char *pathname = 0; - size_t len = 0; - - if (!TH_ISDIR(t)) - { - errno = EINVAL; - return -1; - } - - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - mode = th_get_mode(t); - - /* Make a copy of the string because dirname and mkdirhier may modify the - * string */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - - if (mkdirhier(dirname(buf)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - - /* Strip trailing '/'...it confuses some Unixes (and BeOS)... */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - len = strlen(buf); - if ((len > 0) && (buf[len-1] == '/')) - { - buf[len-1] = '\0'; - } - -#ifdef DEBUG - printf(" ==> extracting: %s (mode %04o, directory)\n", filename, - mode); -#endif -#ifdef WIN32 - if (mkdir(buf) == -1) -#else - if (mkdir(buf, mode & 07777) == -1) -#endif - { -#ifdef __BORLANDC__ - /* There is a bug in the Borland Run time library which makes MKDIR - return EACCES when it should return EEXIST - if it is some other error besides directory exists - then return false */ - if ( errno == EACCES) - { - errno = EEXIST; - } -#endif - if (errno == EEXIST) - { - if (chmod(filename, mode & 07777) == -1) - { -#ifdef DEBUG - perror("chmod()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - else - { -#ifdef DEBUG - puts(" *** using existing directory"); -#endif - if (pathname) - { - free(pathname); - } - return 1; - } - } - else - { -#ifdef DEBUG - perror("mkdir()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - } - - if (pathname) - { - free(pathname); - } - return 0; -} - - -/* FIFO */ -int -tar_extract_fifo(TAR *t, char *realname) -{ - mode_t mode; - char *filename; - char buf[T_BLOCKSIZE]; - char *pathname = 0; - - if (!TH_ISFIFO(t)) - { - errno = EINVAL; - return -1; - } - - if (realname) - { - filename = realname; - } - else - { - pathname = th_get_pathname(t); - filename = pathname; - } - mode = th_get_mode(t); - - /* Make a copy of the string because dirname and mkdirhier may modify the - * string */ - strncpy(buf, filename, sizeof(buf)-1); - buf[sizeof(buf)-1] = 0; - - if (mkdirhier(dirname(buf)) == -1) - { - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifdef DEBUG - printf(" ==> extracting: %s (fifo)\n", filename); -#endif -#if !defined(WIN32) && !defined(__VMS) - if (mkfifo(filename, mode & 07777) == -1) -#else - (void)mode; -#endif - { -#ifdef DEBUG - perror("mkfifo()"); -#endif - if (pathname) - { - free(pathname); - } - return -1; - } - -#ifndef WIN32 - if (pathname) - { - free(pathname); - } - return 0; -#endif -} diff --git a/Utilities/cmtar/filesystem.c b/Utilities/cmtar/filesystem.c deleted file mode 100644 index 496f81c..0000000 --- a/Utilities/cmtar/filesystem.c +++ /dev/null @@ -1,87 +0,0 @@ - - - -// First microsoft compilers - -#include <windows.h> -#include <io.h> -#include <ctype.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/types.h> - -#include <libtarint/filesystem.h> - - -kwDirectory * kwOpenDir(const char* name) -{ -// struct _KWDIR ssss; - char* buf; - size_t n = strlen(name); - kwDirectory * dir = (kwDirectory *)malloc(sizeof (kwDirectory)); - if(dir==NULL) - { - return NULL; - } - dir->EOD=0; //not the end of directory - if ( name[n - 1] == '/' ) - { - buf = (char*) malloc(n + 1 + 1); -// buf = new char[n + 1 + 1]; - sprintf(buf, "%s*", name); - } - else - { - buf = (char*)malloc(n + 2 + 1); -// buf = new char[n + 2 + 1]; - sprintf(buf, "%s/*", name); - } - - // Now put them into the file array - dir->SrchHandle = _findfirst(buf, &dir->Entry); - free(buf); - - if ( dir->SrchHandle == -1 ) - { - free(dir); - return NULL; - } - return dir; -} - -kwDirEntry * kwReadDir(kwDirectory * dir) -{ - static kwDirEntry entry; - if(!dir || dir->EOD ==1) - { - return NULL; - } - strncpy(entry.d_name,dir->Entry.name,TAR_MAXPATHLEN-1); - if(_findnext(dir->SrchHandle, &dir->Entry) == -1) - { - dir->EOD=1; - } - - // It is both stupid and dangerous to return a pointer to a static like this. - // This can only be called by one caller at a time: i.e., it's not thread safe. - // On the other hand, it mimics the documented behavior of "readdir" which is - // what it's implemented to replace for platforms that do not have readdir. - // Memory leaks are also stupid and dangerous... perhaps this is less so. - // - return &entry; -} - -int kwCloseDir(kwDirectory * dir) -{ - int r=-1; - if(dir) - { - r=_findclose(dir->SrchHandle); - free(dir); - } - if(r==-1) return 0; - return 1; -} diff --git a/Utilities/cmtar/filesystem.h b/Utilities/cmtar/filesystem.h deleted file mode 100644 index cd61ed2..0000000 --- a/Utilities/cmtar/filesystem.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _FILESYSTEM_H_ -#define _FILESYSTEM_H_ - -#include <io.h> -#include <libtarint/internal.h> - -struct _KWDIR -{ -#if _MSC_VER < 1300 - long SrchHandle; -#else - intptr_t SrchHandle; -#endif - struct _finddata_t Entry; // data of current file - int EOD; //end of directory - -}; -typedef struct _KWDIRENTRY -{ - char d_name[TAR_MAXPATHLEN]; -}kwDirEntry; - -typedef struct _KWDIR kwDirectory; -kwDirectory * kwOpenDir(const char* name); -kwDirEntry * kwReadDir(kwDirectory * dir); -int kwCloseDir(kwDirectory * dir); -#else - -#endif //MSC - diff --git a/Utilities/cmtar/handle.c b/Utilities/cmtar/handle.c deleted file mode 100644 index a86bbc5..0000000 --- a/Utilities/cmtar/handle.c +++ /dev/null @@ -1,163 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** handle.c - libtar code for initializing a TAR handle -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> -#include <fcntl.h> -#include <errno.h> - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif - -#ifdef STDC_HEADERS -# include <stdlib.h> -#endif - -#ifdef HAVE_IO_H -#include <io.h> -//Yogi: hack. this should work on windows where there is no O_ACCMODE defined -#ifndef O_ACCMODE -# define O_ACCMODE 0x0003 -#endif -#endif - -const char libtar_version[] = PACKAGE_VERSION; - -struct libtar_fd_file -{ - int fd; -}; - -static struct libtar_fd_file libtar_fd_file_pointer; - -static int libtar_open(void* call_data, const char* pathname, int flags, mode_t mode) -{ - struct libtar_fd_file* lf = (struct libtar_fd_file*)call_data; - lf->fd = open(pathname, flags, mode); - return lf->fd; -} - -static int libtar_close(void* call_data) -{ - struct libtar_fd_file* lf = (struct libtar_fd_file*)call_data; - return close(lf->fd); -} -static ssize_t libtar_read(void* call_data, void* buf, size_t count) -{ - struct libtar_fd_file* lf = (struct libtar_fd_file*)call_data; - return (ssize_t)read(lf->fd, buf, (unsigned int)count); -} -static ssize_t libtar_write(void* call_data, const void* buf, size_t count) -{ - struct libtar_fd_file* lf = (struct libtar_fd_file*)call_data; - return (ssize_t) write(lf->fd, buf, (unsigned int)count); -} - -static tartype_t default_type = { libtar_open, libtar_close, libtar_read, libtar_write, &libtar_fd_file_pointer }; - -static int -tar_init(TAR **t, char *pathname, tartype_t *type, - int oflags, int mode, int options) -{ - (void)mode; - if ((oflags & O_ACCMODE) == O_RDWR) - { - errno = EINVAL; - return -1; - } - - *t = (TAR *)calloc(1, sizeof(TAR)); - if (*t == NULL) - return -1; - - (*t)->pathname = pathname; - (*t)->options = options; - (*t)->type = (type ? type : &default_type); - (*t)->oflags = oflags; - - if ((oflags & O_ACCMODE) == O_RDONLY) - (*t)->h = libtar_hash_new(256, - (libtar_hashfunc_t)path_hashfunc); - else - (*t)->h = libtar_hash_new(16, (libtar_hashfunc_t)dev_hash); - if ((*t)->h == NULL) - { - free(*t); - return -1; - } - - return 0; -} - - -/* open a new tarfile handle */ -int -tar_open(TAR **t, char *pathname, tartype_t *type, - int oflags, int mode, int options) -{ - int res; - if (tar_init(t, pathname, type, oflags, mode, options) == -1) - return -1; - - if ((options & TAR_NOOVERWRITE) && (oflags & O_CREAT)) - oflags |= O_EXCL; - -#ifdef O_BINARY - oflags |= O_BINARY; -#endif - - res = (*((*t)->type->openfunc))((*t)->type->call_data, pathname, oflags, mode); - if (res == -1) - { - free(*t); - return -1; - } - - return 0; -} - - -int -tar_fdopen(TAR **t, int fd, char *pathname, tartype_t *type, - int oflags, int mode, int options) -{ - if (tar_init(t, pathname, type, oflags, mode, options) == -1) - return -1; - - if ( !type ) - { - struct libtar_fd_file* lf = (struct libtar_fd_file*)((*t)->type->call_data); - lf->fd = fd; - } - return 0; -} - -/* close tarfile handle */ -int -tar_close(TAR *t) -{ - int i; - - i = (*(t->type->closefunc))(t->type->call_data); - - if (t->h != NULL) - libtar_hash_free(t->h, ((t->oflags & O_ACCMODE) == O_RDONLY - ? free - : (libtar_freefunc_t)tar_dev_free)); - free(t); - - return i; -} - - diff --git a/Utilities/cmtar/internal.h b/Utilities/cmtar/internal.h deleted file mode 100644 index c1bba63..0000000 --- a/Utilities/cmtar/internal.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -** Copyright 2002-2003 University of Illinois Board of Trustees -** Copyright 2002-2003 Mark D. Roth -** All rights reserved. -** -** internal.h - internal header file for libtar -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtar/config.h> -#include <libtar/compat.h> - -#include <libtar/libtar.h> - -#ifdef HAVE_SYS_SYSMACROS_H -#include <sys/sysmacros.h> -#endif - -#ifndef HAVE_MAJOR -# define major(dev) ((int)(((dev) >> 8) & 0xff)) -#endif -#ifndef HAVE_MINOR -# define minor(dev) ((int)((dev) & 0xff)) -#endif -/* On Cray XT3 when using thr PGI pgcc 7.0.4 sys/sysmacros.h ends up without - makedev(), since __i386__ is not defined when GLIBC_HAVE_LONG_LONG should - be enabled in features.h */ -#ifndef HAVE_MAKEDEV -# define makedev(major, minor) ((((int)((major) & 0xff)) << 8 ) \ - | ((int)((minor) & 0xff)) ) -#endif - diff --git a/Utilities/cmtar/libtar.c b/Utilities/cmtar/libtar.c deleted file mode 100644 index 25f570f..0000000 --- a/Utilities/cmtar/libtar.c +++ /dev/null @@ -1,424 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** libtar.c - demo driver program for libtar -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ -#include <libtar/config.h> -#include <libtar/libtar.h> - -#include <stdio.h> -#include <fcntl.h> -#include <errno.h> -#if defined(_WIN32) && !defined(__CYGWIN__) -#include <libtar/compat.h> -#include <io.h> -#else -# ifdef HAVE_SYS_PARAM_H -# include <sys/param.h> -# endif -#endif - -#ifdef STDC_HEADERS -# include <string.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -# include <stdlib.h> -#endif - -#ifdef DEBUG -# include <signal.h> -#endif - -#include CMTAR_ZLIB_HEADER - -#include <libtar/compat.h> - - -char *progname; -int verbose = 0; -int use_gnu = 0; - -#ifdef DEBUG -void -segv_handler(int sig) -{ - puts("OOPS! Caught SIGSEGV, bailing out..."); - fflush(stdout); - fflush(stderr); -} -#endif - - -#ifdef HAVE_LIBZ - -int use_zlib = 0; - -struct gzStruct -{ - gzFile* GZFile; -}; -struct gzStruct GZStruct; -#if defined ( _MSC_VER) || defined(__WATCOMC__) -#include <io.h> -//Yogi: hack. this should work on windows where there is no O_ACCMODE defined -#ifndef O_ACCMODE -# define O_ACCMODE 0x0003 -#endif -#endif - -static int libtar_gzopen(void* call_data, const char *pathname, - int oflags, mode_t mode) -{ - char *gzoflags; - int fd; - struct gzStruct* gzf = (struct gzStruct*)call_data; - - switch (oflags & O_ACCMODE) - { - case O_WRONLY: - gzoflags = "wb"; - break; - case O_RDONLY: - gzoflags = "rb"; - break; - default: - case O_RDWR: - errno = EINVAL; - return -1; - } - - fd = open(pathname, oflags, mode); - if (fd == -1) - { - return -1; - } - -#if defined(__BEOS__) && !defined(__ZETA__) /* no fchmod on BeOS...do pathname instead. */ - if ((oflags & O_CREAT) && chmod(pathname, mode & 07777)) - { - return -1; - } -#elif !defined(_WIN32) || defined(__CYGWIN__) - if ((oflags & O_CREAT) && fchmod(fd, mode & 07777)) - { - return -1; - } -#endif - - gzf->GZFile = gzdopen(fd, gzoflags); - if (!gzf->GZFile) - { - errno = ENOMEM; - return -1; - } - - return fd; -} - -static int libtar_gzclose(void* call_data) -{ - struct gzStruct* gzf = (struct gzStruct*)call_data; - return gzclose(gzf->GZFile); -} - -static ssize_t libtar_gzread(void* call_data, void* buf, size_t count) -{ - struct gzStruct* gzf = (struct gzStruct*)call_data; - return gzread(gzf->GZFile, buf, (unsigned int)count); -} - -static ssize_t libtar_gzwrite(void* call_data, const void* buf, size_t count) -{ - struct gzStruct* gzf = (struct gzStruct*)call_data; - return gzwrite(gzf->GZFile, (void*)buf, (unsigned int)count); -} - -tartype_t gztype = { - libtar_gzopen, - libtar_gzclose, - libtar_gzread, - libtar_gzwrite, - &GZStruct -}; - -#endif /* HAVE_LIBZ */ - - -static int -create(char *tarfile, char *rootdir, libtar_list_t *l) -{ - TAR *t; - char *pathname; - char buf[TAR_MAXPATHLEN]; - libtar_listptr_t lp; - - if (tar_open(&t, tarfile, -#ifdef HAVE_LIBZ - (use_zlib ? &gztype : NULL), -#else - NULL, -#endif - O_WRONLY | O_CREAT, 0644, - (verbose ? TAR_VERBOSE : 0) - | (use_gnu ? TAR_GNU : 0)) == -1) - { - fprintf(stderr, "tar_open(): %s\n", strerror(errno)); - return -1; - } - - libtar_listptr_reset(&lp); - while (libtar_list_next(l, &lp) != 0) - { - pathname = (char *)libtar_listptr_data(&lp); - if (pathname[0] != '/' && rootdir != NULL) - snprintf(buf, sizeof(buf), "%s/%s", rootdir, pathname); - else - strlcpy(buf, pathname, sizeof(buf)); - if (tar_append_tree(t, buf, pathname) != 0) - { - fprintf(stderr, - "tar_append_tree(\"%s\", \"%s\"): %s\n", buf, - pathname, strerror(errno)); - tar_close(t); - return -1; - } - } - - if (tar_append_eof(t) != 0) - { - fprintf(stderr, "tar_append_eof(): %s\n", strerror(errno)); - tar_close(t); - return -1; - } - - if (tar_close(t) != 0) - { - fprintf(stderr, "tar_close(): %s\n", strerror(errno)); - return -1; - } - - return 0; -} - - -static int -list(char *tarfile) -{ - TAR *t; - int i; - - if (tar_open(&t, tarfile, -#ifdef HAVE_LIBZ - (use_zlib ? &gztype : NULL), -#else - NULL, -#endif - O_RDONLY, 0, - (verbose ? TAR_VERBOSE : 0) - | (use_gnu ? TAR_GNU : 0)) == -1) - { - fprintf(stderr, "tar_open(): %s\n", strerror(errno)); - return -1; - } - - while ((i = th_read(t)) == 0) - { - th_print_long_ls(t); -#ifdef DEBUG - th_print(t); -#endif - if (TH_ISREG(t) && tar_skip_regfile(t) != 0) - { - fprintf(stderr, "tar_skip_regfile(): %s\n", - strerror(errno)); - return -1; - } - } - -#ifdef DEBUG - printf("th_read() returned %d\n", i); - printf("EOF mark encountered after %ld bytes\n", -# ifdef HAVE_LIBZ - (use_zlib - ? gzseek((gzFile) t->fd, 0, SEEK_CUR) - : -# endif - lseek(t->fd, 0, SEEK_CUR) -# ifdef HAVE_LIBZ - ) -# endif - ); -#endif - - if (tar_close(t) != 0) - { - fprintf(stderr, "tar_close(): %s\n", strerror(errno)); - return -1; - } - (void)i; - - return 0; -} - - -static int -extract(char *tarfile, char *rootdir) -{ - TAR *t; - -#ifdef DEBUG - puts("opening tarfile..."); -#endif - if (tar_open(&t, tarfile, -#ifdef HAVE_LIBZ - (use_zlib ? &gztype : NULL), -#else - NULL, -#endif - O_RDONLY, 0, - (verbose ? TAR_VERBOSE : 0) - | (use_gnu ? TAR_GNU : 0)) == -1) - { - fprintf(stderr, "tar_open(): %s\n", strerror(errno)); - return -1; - } - -#ifdef DEBUG - puts("extracting tarfile..."); -#endif - if (tar_extract_all(t, rootdir) != 0) - { - fprintf(stderr, "tar_extract_all(): %s\n", strerror(errno)); - return -1; - } - -#ifdef DEBUG - puts("closing tarfile..."); -#endif - if (tar_close(t) != 0) - { - fprintf(stderr, "tar_close(): %s\n", strerror(errno)); - return -1; - } - - return 0; -} - -#if !defined(_WIN32) || defined(__CYGWIN__) -static void -usage() -{ - printf("Usage: %s [-C rootdir] [-g] [-z] -x|-t filename.tar\n", - progname); - printf(" %s [-C rootdir] [-g] [-z] -c filename.tar ...\n", - progname); - exit(-1); -} -#endif - -#define MODE_LIST 1 -#define MODE_CREATE 2 -#define MODE_EXTRACT 3 - -int -main(int argc, char *argv[]) -{ - char* tarfile; - char *rootdir = NULL; - int c; - int mode; - libtar_list_t *l; -#if defined(_WIN32) && !defined(__CYGWIN__) - int optind; -#endif - progname = basename(argv[0]); - -#if !defined(_WIN32) || defined(__CYGWIN__) - mode = 0; - while ((c = getopt(argc, argv, "cC:gtvVxz")) != -1) - switch (c) - { - case 'V': - printf("libtar %s by Mark D. Roth <roth@uiuc.edu>\n", - libtar_version); - break; - case 'C': - rootdir = strdup(optarg); - break; - case 'v': - verbose = 1; - break; - case 'g': - use_gnu = 1; - break; - case 'c': - if (mode) - usage(); - mode = MODE_CREATE; - break; - case 'x': - if (mode) - usage(); - mode = MODE_EXTRACT; - break; - case 't': - if (mode) - usage(); - mode = MODE_LIST; - break; -#ifdef HAVE_LIBZ - case 'z': - use_zlib = 1; - break; -#endif /* HAVE_LIBZ */ - default: - usage(); - } - if (!mode || ((argc - optind) < (mode == MODE_CREATE ? 2 : 1))) - { -#ifdef DEBUG - printf("argc - optind == %d\tmode == %d\n", argc - optind, - mode); -#endif - usage(); - } - -#else - mode = MODE_EXTRACT; - use_zlib=1; - optind = 1; -#endif - -#ifdef DEBUG - signal(SIGSEGV, segv_handler); -#endif - - switch (mode) - { - case MODE_EXTRACT: - return extract(argv[optind], rootdir); - case MODE_CREATE: - tarfile = argv[optind]; - l = libtar_list_new(LIST_QUEUE, NULL); - for (c = optind + 1; c < argc; c++) - libtar_list_add(l, argv[c]); - return create(tarfile, rootdir, l); - case MODE_LIST: - return list(argv[optind]); - default: - break; - } - - /* NOTREACHED */ - return -2; -} - - diff --git a/Utilities/cmtar/libtar.h b/Utilities/cmtar/libtar.h deleted file mode 100644 index 1eba002..0000000 --- a/Utilities/cmtar/libtar.h +++ /dev/null @@ -1,290 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** libtar.h - header file for libtar library -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#ifndef LIBTAR_H -#define LIBTAR_H - -#include <sys/types.h> -#include <sys/stat.h> -#include <libtar/tar.h> - -#include <libtar/libtar_listhash.h> -#include <libtar/compat.h> -#ifdef __cplusplus -extern "C" { -#endif - - -/* useful constants */ -#define T_BLOCKSIZE 512 -#define T_NAMELEN 100 -#define T_PREFIXLEN 155 -#define T_MAXPATHLEN (T_NAMELEN + T_PREFIXLEN) - -/* GNU extensions for typeflag */ -#define GNU_LONGNAME_TYPE 'L' -#define GNU_LONGLINK_TYPE 'K' - -/* our version of the tar header structure */ -struct tar_header -{ - char name[100]; - char mode[8]; - char uid[8]; - char gid[8]; - char size[12]; - char mtime[12]; - char chksum[8]; - char typeflag; - char linkname[100]; - char magic[6]; - char version[2]; - char uname[32]; - char gname[32]; - char devmajor[8]; - char devminor[8]; - char prefix[155]; - char padding[12]; - char *gnu_longname; - char *gnu_longlink; -}; - - -/***** handle.c ************************************************************/ - -typedef int (*openfunc_t)(void* call_data, const char *, int, mode_t); -typedef int (*closefunc_t)(void* call_data); -typedef ssize_t (*readfunc_t)(void* call_data, void *, size_t); -typedef ssize_t (*writefunc_t)(void* call_data, const void *, size_t); - -typedef struct -{ - openfunc_t openfunc; - closefunc_t closefunc; - readfunc_t readfunc; - writefunc_t writefunc; - void* call_data; -} -tartype_t; - -typedef struct -{ - tartype_t *type; - char *pathname; - int oflags; - int options; - struct tar_header th_buf; - libtar_hash_t *h; -} -TAR; - -/* constant values for the TAR options field */ -#define TAR_GNU 1 /* use GNU extensions */ -#define TAR_VERBOSE 2 /* output file info to stdout */ -#define TAR_NOOVERWRITE 4 /* don't overwrite existing files */ -#define TAR_IGNORE_EOT 8 /* ignore double zero blocks as EOF */ -#define TAR_CHECK_MAGIC 16 /* check magic in file header */ -#define TAR_CHECK_VERSION 32 /* check version in file header */ -#define TAR_IGNORE_CRC 64 /* ignore CRC in file header */ - -/* this is obsolete - it's here for backwards-compatibility only */ -#define TAR_IGNORE_MAGIC 0 - -extern const char libtar_version[]; - -/* open a new tarfile handle */ -int tar_open(TAR **t, char *pathname, tartype_t *type, - int oflags, int mode, int options); - -/* make a tarfile handle out of a previously-opened descriptor */ -int tar_fdopen(TAR **t, int fd, char *pathname, tartype_t *type, - int oflags, int mode, int options); - -/* close tarfile handle */ -int tar_close(TAR *t); - - -/***** append.c ************************************************************/ - -/* forward declaration to appease the compiler */ -struct tar_dev; - -/* cleanup function */ -void tar_dev_free(struct tar_dev *tdp); - -/* Appends a file to the tar archive. - * Arguments: - * t = TAR handle to append to - * realname = path of file to append - * savename = name to save the file under in the archive - */ -int tar_append_file(TAR *t, char *realname, char *savename); - -/* write EOF indicator */ -int tar_append_eof(TAR *t); - -/* add file contents to a tarchive */ -int tar_append_regfile(TAR *t, char *realname); - - -/***** block.c *************************************************************/ - -/* macros for reading/writing tarchive blocks */ -#define tar_block_read(t, buf) \ - (*((t)->type->readfunc))((t)->type->call_data, (char *)(buf), T_BLOCKSIZE) -#define tar_block_write(t, buf) \ - (*((t)->type->writefunc))((t)->type->call_data, (char *)(buf), T_BLOCKSIZE) - -/* read/write a header block */ -int th_read(TAR *t); -int th_write(TAR *t); - - -/***** decode.c ************************************************************/ - -/* determine file type */ -#define TH_ISREG(t) ((t)->th_buf.typeflag == REGTYPE \ - || (t)->th_buf.typeflag == AREGTYPE \ - || (t)->th_buf.typeflag == CONTTYPE \ - || (S_ISREG((mode_t)oct_to_int((t)->th_buf.mode)) \ - && (t)->th_buf.typeflag != LNKTYPE)) -#define TH_ISLNK(t) ((t)->th_buf.typeflag == LNKTYPE) -#define TH_ISSYM(t) ((t)->th_buf.typeflag == SYMTYPE \ - || S_ISLNK((mode_t)oct_to_int((t)->th_buf.mode))) -#define TH_ISCHR(t) ((t)->th_buf.typeflag == CHRTYPE \ - || S_ISCHR((mode_t)oct_to_int((t)->th_buf.mode))) -#define TH_ISBLK(t) ((t)->th_buf.typeflag == BLKTYPE \ - || S_ISBLK((mode_t)oct_to_int((t)->th_buf.mode))) -#define TH_ISDIR(t) ((t)->th_buf.typeflag == DIRTYPE \ - || S_ISDIR((mode_t)oct_to_int((t)->th_buf.mode)) \ - || ((t)->th_buf.typeflag == AREGTYPE \ - && ((t)->th_buf.name[strlen((t)->th_buf.name) - 1] == '/'))) -#define TH_ISFIFO(t) ((t)->th_buf.typeflag == FIFOTYPE \ - || S_ISFIFO((mode_t)oct_to_int((t)->th_buf.mode))) -#define TH_ISLONGNAME(t) ((t)->th_buf.typeflag == GNU_LONGNAME_TYPE) -#define TH_ISLONGLINK(t) ((t)->th_buf.typeflag == GNU_LONGLINK_TYPE) - -/* decode tar header info */ -#define th_get_crc(t) oct_to_int((t)->th_buf.chksum) -#define th_get_size(t) oct_to_int((t)->th_buf.size) -#define th_get_mtime(t) oct_to_int((t)->th_buf.mtime) -#define th_get_devmajor(t) oct_to_int((t)->th_buf.devmajor) -#define th_get_devminor(t) oct_to_int((t)->th_buf.devminor) -#define th_get_linkname(t) ((t)->th_buf.gnu_longlink \ - ? (t)->th_buf.gnu_longlink \ - : (t)->th_buf.linkname) -char *th_get_pathname(TAR *t); -mode_t th_get_mode(TAR *t); -uid_t th_get_uid(TAR *t); -gid_t th_get_gid(TAR *t); - - -/***** encode.c ************************************************************/ - -/* encode file info in th_header */ -void th_set_type(TAR *t, mode_t mode); -void th_set_path(TAR *t, char *pathname); -void th_set_link(TAR *t, char *linkname); -void th_set_device(TAR *t, dev_t device); -void th_set_user(TAR *t, uid_t uid); -void th_set_group(TAR *t, gid_t gid); -void th_set_mode(TAR *t, mode_t fmode); -#define th_set_mtime(t, fmtime) \ - int_to_oct_nonull((int)(fmtime), (t)->th_buf.mtime, 12) -#define th_set_size(t, fsize) \ - int_to_oct_nonull((int)(fsize), (t)->th_buf.size, 12) - -/* encode everything at once (except the pathname and linkname) */ -void th_set_from_stat(TAR *t, struct stat *s); - -/* encode magic, version, and crc - must be done after everything else is set */ -void th_finish(TAR *t); - - -/***** extract.c ***********************************************************/ - -/* sequentially extract next file from t */ -int tar_extract_file(TAR *t, char *realname); - -/* extract different file types */ -int tar_extract_dir(TAR *t, char *realname); -int tar_extract_hardlink(TAR *t, char *realname); -int tar_extract_symlink(TAR *t, char *realname); -int tar_extract_chardev(TAR *t, char *realname); -int tar_extract_blockdev(TAR *t, char *realname); -int tar_extract_fifo(TAR *t, char *realname); - -/* for regfiles, we need to extract the content blocks as well */ -int tar_extract_regfile(TAR *t, char *realname); -int tar_skip_regfile(TAR *t); - - -/***** output.c ************************************************************/ - -/* print the tar header */ -void th_print(TAR *t); - -/* print "ls -l"-like output for the file described by th */ -void th_print_long_ls(TAR *t); - - -/***** util.c *************************************************************/ - -/* hashing function for pathnames */ -int path_hashfunc(char *key, int numbuckets); - -/* matching function for dev_t's */ -int dev_match(dev_t *dev1, dev_t *dev2); - -/* matching function for ino_t's */ -int ino_match(ino_t *ino1, ino_t *ino2); - -/* hashing function for dev_t's */ -int dev_hash(dev_t *dev); - -/* hashing function for ino_t's */ -int ino_hash(ino_t *inode); - -/* create any necessary dirs */ -int mkdirhier(char *path); - -/* calculate header checksum */ -int th_crc_calc(TAR *t); -#define th_crc_ok(t) (th_get_crc(t) == th_crc_calc(t)) - -/* string-octal to integer conversion */ -int oct_to_int(char *oct); - -/* integer to NULL-terminated string-octal conversion */ -#define int_to_oct(num, oct, octlen) \ - snprintf((oct), (octlen), "%*lo ", (octlen) - 2, (unsigned long)(num)) - -/* integer to string-octal conversion, no NULL */ -void int_to_oct_nonull(int num, char *oct, size_t octlen); - - -/***** wrapper.c **********************************************************/ - -/* extract groups of files */ -int tar_extract_glob(TAR *t, char *globname, char *prefix); -int tar_extract_all(TAR *t, char *prefix); - -/* add a whole tree of files */ -int tar_append_tree(TAR *t, char *realdir, char *savedir); - - -#ifdef __cplusplus -} -#endif - -#endif /* ! LIBTAR_H */ - diff --git a/Utilities/cmtar/listhash/hash.c.in b/Utilities/cmtar/listhash/hash.c.in deleted file mode 100644 index 41a1618..0000000 --- a/Utilities/cmtar/listhash/hash.c.in +++ /dev/null @@ -1,344 +0,0 @@ -/* @configure_input@ */ - -/* -** Copyright 1998-2002 University of Illinois Board of Trustees -** Copyright 1998-2002 Mark D. Roth -** All rights reserved. -** -** @LISTHASH_PREFIX@_hash.c - hash table routines -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <@LISTHASH_PREFIX@/config.h> -#include <@LISTHASH_PREFIX@/compat.h> - -#include <@LISTHASH_PREFIX@/@LISTHASH_PREFIX@_listhash.h> - -#include <stdio.h> -#include <errno.h> - -#ifdef STDC_HEADERS -# include <stdlib.h> -#endif - - -/* -** @LISTHASH_PREFIX@_hashptr_reset() - reset a hash pointer -*/ -void -@LISTHASH_PREFIX@_hashptr_reset(@LISTHASH_PREFIX@_hashptr_t *hp) -{ - @LISTHASH_PREFIX@_listptr_reset(&(hp->node)); - hp->bucket = -1; -} - - -/* -** @LISTHASH_PREFIX@_hashptr_data() - retrieve the data being pointed to -*/ -void * -@LISTHASH_PREFIX@_hashptr_data(@LISTHASH_PREFIX@_hashptr_t *hp) -{ - return @LISTHASH_PREFIX@_listptr_data(&(hp->node)); -} - - -/* -** @LISTHASH_PREFIX@_str_hashfunc() - default hash function, optimized for -** 7-bit strings -*/ -unsigned int -@LISTHASH_PREFIX@_str_hashfunc(char *key, unsigned int num_buckets) -{ -#if 0 - register unsigned result = 0; - register int i; - - if (key == NULL) - return 0; - - for (i = 0; *key != '\0' && i < 32; i++) - result = result * 33U + *key++; - - return (result % num_buckets); -#else - if (key == NULL) - return 0; - - return (key[0] % num_buckets); -#endif -} - - -/* -** @LISTHASH_PREFIX@_hash_nents() - return number of elements from hash -*/ -unsigned int -@LISTHASH_PREFIX@_hash_nents(@LISTHASH_PREFIX@_hash_t *h) -{ - return h->nents; -} - - -/* -** @LISTHASH_PREFIX@_hash_new() - create a new hash -*/ -@LISTHASH_PREFIX@_hash_t * -@LISTHASH_PREFIX@_hash_new(int num, @LISTHASH_PREFIX@_hashfunc_t hashfunc) -{ - @LISTHASH_PREFIX@_hash_t *hash; - - hash = (@LISTHASH_PREFIX@_hash_t *)calloc(1, sizeof(@LISTHASH_PREFIX@_hash_t)); - if (hash == NULL) - return NULL; - hash->numbuckets = num; - if (hashfunc != NULL) - hash->hashfunc = hashfunc; - else - hash->hashfunc = (@LISTHASH_PREFIX@_hashfunc_t)@LISTHASH_PREFIX@_str_hashfunc; - - hash->table = (@LISTHASH_PREFIX@_list_t **)calloc(num, sizeof(@LISTHASH_PREFIX@_list_t *)); - if (hash->table == NULL) - { - free(hash); - return NULL; - } - - return hash; -} - - -/* -** @LISTHASH_PREFIX@_hash_next() - get next element in hash -** returns: -** 1 data found -** 0 end of list -*/ -int -@LISTHASH_PREFIX@_hash_next(@LISTHASH_PREFIX@_hash_t *h, - @LISTHASH_PREFIX@_hashptr_t *hp) -{ -#ifdef DS_DEBUG - printf("==> @LISTHASH_PREFIX@_hash_next(h=0x%lx, hp={%d,0x%lx})\n", - h, hp->bucket, hp->node); -#endif - - if (hp->bucket >= 0 && hp->node != NULL && - @LISTHASH_PREFIX@_list_next(h->table[hp->bucket], &(hp->node)) != 0) - { -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_next(): found additional " - "data in current bucket (%d), returing 1\n", - hp->bucket); -#endif - return 1; - } - -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_next(): done with bucket %d\n", - hp->bucket); -#endif - - for (hp->bucket++; hp->bucket < h->numbuckets; hp->bucket++) - { -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_next(): " - "checking bucket %d\n", hp->bucket); -#endif - hp->node = NULL; - if (h->table[hp->bucket] != NULL && - @LISTHASH_PREFIX@_list_next(h->table[hp->bucket], - &(hp->node)) != 0) - { -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_next(): " - "found data in bucket %d, returing 1\n", - hp->bucket); -#endif - return 1; - } - } - - if (hp->bucket == h->numbuckets) - { -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_next(): hash pointer " - "wrapped to 0\n"); -#endif - hp->bucket = -1; - hp->node = NULL; - } - -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_hash_next(): no more data, " - "returning 0\n"); -#endif - return 0; -} - - -/* -** @LISTHASH_PREFIX@_hash_del() - delete an entry from the hash -** returns: -** 0 success -** -1 (and sets errno) failure -*/ -int -@LISTHASH_PREFIX@_hash_del(@LISTHASH_PREFIX@_hash_t *h, - @LISTHASH_PREFIX@_hashptr_t *hp) -{ - if (hp->bucket < 0 - || hp->bucket >= h->numbuckets - || h->table[hp->bucket] == NULL - || hp->node == NULL) - { - errno = EINVAL; - return -1; - } - - @LISTHASH_PREFIX@_list_del(h->table[hp->bucket], &(hp->node)); - h->nents--; - return 0; -} - - -/* -** @LISTHASH_PREFIX@_hash_empty() - empty the hash -*/ -void -@LISTHASH_PREFIX@_hash_empty(@LISTHASH_PREFIX@_hash_t *h, @LISTHASH_PREFIX@_freefunc_t freefunc) -{ - int i; - - for (i = 0; i < h->numbuckets; i++) - if (h->table[i] != NULL) - @LISTHASH_PREFIX@_list_empty(h->table[i], freefunc); - - h->nents = 0; -} - - -/* -** @LISTHASH_PREFIX@_hash_free() - delete all of the nodes in the hash -*/ -void -@LISTHASH_PREFIX@_hash_free(@LISTHASH_PREFIX@_hash_t *h, @LISTHASH_PREFIX@_freefunc_t freefunc) -{ - int i; - - for (i = 0; i < h->numbuckets; i++) - if (h->table[i] != NULL) - @LISTHASH_PREFIX@_list_free(h->table[i], freefunc); - - free(h->table); - free(h); -} - - -/* -** @LISTHASH_PREFIX@_hash_search() - iterative search for an element in a hash -** returns: -** 1 match found -** 0 no match -*/ -int -@LISTHASH_PREFIX@_hash_search(@LISTHASH_PREFIX@_hash_t *h, - @LISTHASH_PREFIX@_hashptr_t *hp, void *data, - @LISTHASH_PREFIX@_matchfunc_t matchfunc) -{ - while (@LISTHASH_PREFIX@_hash_next(h, hp) != 0) - if ((*matchfunc)(data, @LISTHASH_PREFIX@_listptr_data(&(hp->node))) != 0) - return 1; - - return 0; -} - - -/* -** @LISTHASH_PREFIX@_hash_getkey() - hash-based search for an element in a hash -** returns: -** 1 match found -** 0 no match -*/ -int -@LISTHASH_PREFIX@_hash_getkey(@LISTHASH_PREFIX@_hash_t *h, - @LISTHASH_PREFIX@_hashptr_t *hp, void *key, - @LISTHASH_PREFIX@_matchfunc_t matchfunc) -{ -#ifdef DS_DEBUG - printf("==> @LISTHASH_PREFIX@_hash_getkey(h=0x%lx, hp={%d,0x%lx}, " - "key=0x%lx, matchfunc=0x%lx)\n", - h, hp->bucket, hp->node, key, matchfunc); -#endif - - if (hp->bucket == -1) - { - hp->bucket = (*(h->hashfunc))(key, h->numbuckets); -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_getkey(): hp->bucket " - "set to %d\n", hp->bucket); -#endif - } - - if (h->table[hp->bucket] == NULL) - { -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_getkey(): no list " - "for bucket %d, returning 0\n", hp->bucket); -#endif - hp->bucket = -1; - return 0; - } - -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_hash_getkey(): " - "returning @LISTHASH_PREFIX@_list_search()\n"); -#endif - return @LISTHASH_PREFIX@_list_search(h->table[hp->bucket], &(hp->node), - key, matchfunc); -} - - -/* -** @LISTHASH_PREFIX@_hash_add() - add an element to the hash -** returns: -** 0 success -** -1 (and sets errno) failure -*/ -int -@LISTHASH_PREFIX@_hash_add(@LISTHASH_PREFIX@_hash_t *h, void *data) -{ - int bucket, i; - -#ifdef DS_DEBUG - printf("==> @LISTHASH_PREFIX@_hash_add(h=0x%lx, data=0x%lx)\n", - h, data); -#endif - - bucket = (*(h->hashfunc))(data, h->numbuckets); -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_add(): inserting in bucket %d\n", - bucket); -#endif - if (h->table[bucket] == NULL) - { -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_hash_add(): creating new list\n"); -#endif - h->table[bucket] = @LISTHASH_PREFIX@_list_new(LIST_QUEUE, NULL); - } - -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_hash_add(): " - "returning @LISTHASH_PREFIX@_list_add()\n"); -#endif - i = @LISTHASH_PREFIX@_list_add(h->table[bucket], data); - if (i == 0) - h->nents++; - return i; -} - - diff --git a/Utilities/cmtar/listhash/list.c.in b/Utilities/cmtar/listhash/list.c.in deleted file mode 100644 index bce1e1f..0000000 --- a/Utilities/cmtar/listhash/list.c.in +++ /dev/null @@ -1,461 +0,0 @@ -/* @configure_input@ */ - -/* -** Copyright 1998-2002 University of Illinois Board of Trustees -** Copyright 1998-2002 Mark D. Roth -** All rights reserved. -** -** @LISTHASH_PREFIX@_list.c - linked list routines -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <@LISTHASH_PREFIX@/config.h> -#include <@LISTHASH_PREFIX@/compat.h> - -#include <@LISTHASH_PREFIX@/@LISTHASH_PREFIX@_listhash.h> - -#include <stdio.h> -#include <errno.h> - -#ifdef STDC_HEADERS -# include <string.h> -# include <stdlib.h> -#endif - - -/* -** @LISTHASH_PREFIX@_listptr_reset() - reset a list pointer -*/ -void -@LISTHASH_PREFIX@_listptr_reset(@LISTHASH_PREFIX@_listptr_t *lp) -{ - *lp = NULL; -} - - -/* -** @LISTHASH_PREFIX@_listptr_data() - retrieve the data pointed to by lp -*/ -void * -@LISTHASH_PREFIX@_listptr_data(@LISTHASH_PREFIX@_listptr_t *lp) -{ - return (*lp)->data; -} - - -/* -** @LISTHASH_PREFIX@_list_new() - create a new, empty list -*/ -@LISTHASH_PREFIX@_list_t * -@LISTHASH_PREFIX@_list_new(int flags, @LISTHASH_PREFIX@_cmpfunc_t cmpfunc) -{ - @LISTHASH_PREFIX@_list_t *newlist; - -#ifdef DS_DEBUG - printf("in @LISTHASH_PREFIX@_list_new(%d, 0x%lx)\n", flags, cmpfunc); -#endif - - if (flags != LIST_USERFUNC - && flags != LIST_STACK - && flags != LIST_QUEUE) - { - errno = EINVAL; - return NULL; - } - - newlist = (@LISTHASH_PREFIX@_list_t *)calloc(1, sizeof(@LISTHASH_PREFIX@_list_t)); - if (cmpfunc != NULL) - newlist->cmpfunc = cmpfunc; - else - newlist->cmpfunc = (@LISTHASH_PREFIX@_cmpfunc_t)strcmp; - newlist->flags = flags; - - return newlist; -} - - -/* -** @LISTHASH_PREFIX@_list_iterate() - call a function for every element -** in a list -*/ -int -@LISTHASH_PREFIX@_list_iterate(@LISTHASH_PREFIX@_list_t *l, - @LISTHASH_PREFIX@_iterate_func_t plugin, - void *state) -{ - @LISTHASH_PREFIX@_listptr_t n; - - if (l == NULL) - return -1; - - for (n = l->first; n != NULL; n = n->next) - { - if ((*plugin)(n->data, state) == -1) - return -1; - } - - return 0; -} - - -/* -** @LISTHASH_PREFIX@_list_empty() - empty the list -*/ -void -@LISTHASH_PREFIX@_list_empty(@LISTHASH_PREFIX@_list_t *l, @LISTHASH_PREFIX@_freefunc_t freefunc) -{ - @LISTHASH_PREFIX@_listptr_t n; - - for (n = l->first; n != NULL; n = l->first) - { - l->first = n->next; - if (freefunc != NULL) - (*freefunc)(n->data); - free(n); - } - - l->nents = 0; -} - - -/* -** @LISTHASH_PREFIX@_list_free() - remove and free() the whole list -*/ -void -@LISTHASH_PREFIX@_list_free(@LISTHASH_PREFIX@_list_t *l, @LISTHASH_PREFIX@_freefunc_t freefunc) -{ - @LISTHASH_PREFIX@_list_empty(l, freefunc); - free(l); -} - - -/* -** @LISTHASH_PREFIX@_list_nents() - return number of elements in the list -*/ -unsigned int -@LISTHASH_PREFIX@_list_nents(@LISTHASH_PREFIX@_list_t *l) -{ - return l->nents; -} - - -/* -** @LISTHASH_PREFIX@_list_add() - adds an element to the list -** returns: -** 0 success -** -1 (and sets errno) failure -*/ -int -@LISTHASH_PREFIX@_list_add(@LISTHASH_PREFIX@_list_t *l, void *data) -{ - @LISTHASH_PREFIX@_listptr_t n, m; - -#ifdef DS_DEBUG - printf("==> @LISTHASH_PREFIX@_list_add(\"%s\")\n", (char *)data); -#endif - - n = (@LISTHASH_PREFIX@_listptr_t)malloc(sizeof(struct @LISTHASH_PREFIX@_node)); - if (n == NULL) - return -1; - n->data = data; - l->nents++; - -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_list_add(): allocated data\n"); -#endif - - /* if the list is empty */ - if (l->first == NULL) - { - l->last = l->first = n; - n->next = n->prev = NULL; -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_list_add(): list was empty; " - "added first element and returning 0\n"); -#endif - return 0; - } - -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_list_add(): list not empty\n"); -#endif - - if (l->flags == LIST_STACK) - { - n->prev = NULL; - n->next = l->first; - if (l->first != NULL) - l->first->prev = n; - l->first = n; -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_list_add(): LIST_STACK set; " - "added in front\n"); -#endif - return 0; - } - - if (l->flags == LIST_QUEUE) - { - n->prev = l->last; - n->next = NULL; - if (l->last != NULL) - l->last->next = n; - l->last = n; -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_list_add(): LIST_QUEUE set; " - "added at end\n"); -#endif - return 0; - } - - for (m = l->first; m != NULL; m = m->next) - if ((*(l->cmpfunc))(data, m->data) < 0) - { - /* - ** if we find one that's bigger, - ** insert data before it - */ -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_list_add(): gotcha..." - "inserting data\n"); -#endif - if (m == l->first) - { - l->first = n; - n->prev = NULL; - m->prev = n; - n->next = m; -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_list_add(): " - "added first, returning 0\n"); -#endif - return 0; - } - m->prev->next = n; - n->prev = m->prev; - m->prev = n; - n->next = m; -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_list_add(): added middle," - " returning 0\n"); -#endif - return 0; - } - -#ifdef DS_DEBUG - printf(" @LISTHASH_PREFIX@_list_add(): new data larger than current " - "list elements\n"); -#endif - - /* if we get here, data is bigger than everything in the list */ - l->last->next = n; - n->prev = l->last; - l->last = n; - n->next = NULL; -#ifdef DS_DEBUG - printf("<== @LISTHASH_PREFIX@_list_add(): added end, returning 0\n"); -#endif - return 0; -} - - -/* -** @LISTHASH_PREFIX@_list_del() - remove the element pointed to by n -** from the list l -*/ -void -@LISTHASH_PREFIX@_list_del(@LISTHASH_PREFIX@_list_t *l, @LISTHASH_PREFIX@_listptr_t *n) -{ - @LISTHASH_PREFIX@_listptr_t m; - -#ifdef DS_DEBUG - printf("==> @LISTHASH_PREFIX@_list_del()\n"); -#endif - - l->nents--; - - m = (*n)->next; - - if ((*n)->prev) - (*n)->prev->next = (*n)->next; - else - l->first = (*n)->next; - if ((*n)->next) - (*n)->next->prev = (*n)->prev; - else - l->last = (*n)->prev; - - free(*n); - *n = m; -} - - -/* -** @LISTHASH_PREFIX@_list_next() - get the next element in the list -** returns: -** 1 success -** 0 end of list -*/ -int -@LISTHASH_PREFIX@_list_next(@LISTHASH_PREFIX@_list_t *l, - @LISTHASH_PREFIX@_listptr_t *n) -{ - if (*n == NULL) - *n = l->first; - else - *n = (*n)->next; - - return (*n != NULL ? 1 : 0); -} - - -/* -** @LISTHASH_PREFIX@_list_prev() - get the previous element in the list -** returns: -** 1 success -** 0 end of list -*/ -int -@LISTHASH_PREFIX@_list_prev(@LISTHASH_PREFIX@_list_t *l, - @LISTHASH_PREFIX@_listptr_t *n) -{ - if (*n == NULL) - *n = l->last; - else - *n = (*n)->prev; - - return (*n != NULL ? 1 : 0); -} - - -/* -** @LISTHASH_PREFIX@_str_match() - string matching function -** returns: -** 1 match -** 0 no match -*/ -int -@LISTHASH_PREFIX@_str_match(char *check, char *data) -{ - return !strcmp(check, data); -} - - -/* -** @LISTHASH_PREFIX@_list_add_str() - splits string str into delim-delimited -** elements and adds them to list l -** returns: -** 0 success -** -1 (and sets errno) failure -*/ -int -@LISTHASH_PREFIX@_list_add_str(@LISTHASH_PREFIX@_list_t *l, - char *str, char *delim) -{ - char tmp[10240]; - char *tokp, *nextp = tmp; - - strlcpy(tmp, str, sizeof(tmp)); - while ((tokp = strsep(&nextp, delim)) != NULL) - { - if (*tokp == '\0') - continue; - if (@LISTHASH_PREFIX@_list_add(l, strdup(tokp))) - return -1; - } - - return 0; -} - - -/* -** @LISTHASH_PREFIX@_list_search() - find an entry in a list -** returns: -** 1 match found -** 0 no match -*/ -int -@LISTHASH_PREFIX@_list_search(@LISTHASH_PREFIX@_list_t *l, - @LISTHASH_PREFIX@_listptr_t *n, void *data, - @LISTHASH_PREFIX@_matchfunc_t matchfunc) -{ -#ifdef DS_DEBUG - printf("==> @LISTHASH_PREFIX@_list_search(l=0x%lx, n=0x%lx, \"%s\")\n", - l, n, (char *)data); -#endif - - if (matchfunc == NULL) - matchfunc = (@LISTHASH_PREFIX@_matchfunc_t)@LISTHASH_PREFIX@_str_match; - - if (*n == NULL) - *n = l->first; - else - *n = (*n)->next; - - for (; *n != NULL; *n = (*n)->next) - { -#ifdef DS_DEBUG - printf("checking against \"%s\"\n", (char *)(*n)->data); -#endif - if ((*(matchfunc))(data, (*n)->data) != 0) - return 1; - } - -#ifdef DS_DEBUG - printf("no matches found\n"); -#endif - return 0; -} - - -/* -** @LISTHASH_PREFIX@_list_dup() - copy an existing list -*/ -/* -static @LISTHASH_PREFIX@_list_t * -@LISTHASH_PREFIX@_list_dup(@LISTHASH_PREFIX@_list_t *l) -{ - @LISTHASH_PREFIX@_list_t *newlist; - @LISTHASH_PREFIX@_listptr_t n; - - newlist = @LISTHASH_PREFIX@_list_new(l->flags, l->cmpfunc); - for (n = l->first; n != NULL; n = n->next) - @LISTHASH_PREFIX@_list_add(newlist, n->data); - -#ifdef DS_DEBUG - printf("returning from @LISTHASH_PREFIX@_list_dup()\n"); -#endif - return newlist; -} -*/ - - -/* -** @LISTHASH_PREFIX@_list_merge() - merge two lists into a new list -*/ -/* -static @LISTHASH_PREFIX@_list_t * -@LISTHASH_PREFIX@_list_merge(@LISTHASH_PREFIX@_cmpfunc_t cmpfunc, int flags, - @LISTHASH_PREFIX@_list_t *list1, - @LISTHASH_PREFIX@_list_t *list2) -{ - @LISTHASH_PREFIX@_list_t *newlist; - @LISTHASH_PREFIX@_listptr_t n; - - newlist = @LISTHASH_PREFIX@_list_new(flags, cmpfunc); - - n = NULL; - while (@LISTHASH_PREFIX@_list_next(list1, &n) != 0) - @LISTHASH_PREFIX@_list_add(newlist, n->data); - n = NULL; - while (@LISTHASH_PREFIX@_list_next(list2, &n) != 0) - @LISTHASH_PREFIX@_list_add(newlist, n->data); - - return newlist; -} -*/ - - diff --git a/Utilities/cmtar/listhash/listhash.h.in b/Utilities/cmtar/listhash/listhash.h.in deleted file mode 100644 index 4ab5fdf..0000000 --- a/Utilities/cmtar/listhash/listhash.h.in +++ /dev/null @@ -1,196 +0,0 @@ -/* @configure_input@ */ - -/* -** Copyright 1998-2002 University of Illinois Board of Trustees -** Copyright 1998-2002 Mark D. Roth -** All rights reserved. -** -** @LISTHASH_PREFIX@_listhash.h - header file for listhash module -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#ifndef @LISTHASH_PREFIX@_LISTHASH_H -#define @LISTHASH_PREFIX@_LISTHASH_H - - -/***** list.c **********************************************************/ - -/* -** Comparison function (used to determine order of elements in a list) -** returns less than, equal to, or greater than 0 -** if data1 is less than, equal to, or greater than data2 -*/ -typedef int (*@LISTHASH_PREFIX@_cmpfunc_t)(void *, void *); - -/* -** Free function (for freeing allocated memory in each element) -*/ -typedef void (*@LISTHASH_PREFIX@_freefunc_t)(void *); - -/* -** Plugin function for @LISTHASH_PREFIX@_list_iterate() -*/ -typedef int (*@LISTHASH_PREFIX@_iterate_func_t)(void *, void *); - -/* -** Matching function (used to find elements in a list) -** first argument is the data to search for -** second argument is the list element it's being compared to -** returns 0 if no match is found, non-zero otherwise -*/ -typedef int (*@LISTHASH_PREFIX@_matchfunc_t)(void *, void *); - - -struct @LISTHASH_PREFIX@_node -{ - void *data; - struct @LISTHASH_PREFIX@_node *next; - struct @LISTHASH_PREFIX@_node *prev; -}; -typedef struct @LISTHASH_PREFIX@_node *@LISTHASH_PREFIX@_listptr_t; - -struct @LISTHASH_PREFIX@_list -{ - @LISTHASH_PREFIX@_listptr_t first; - @LISTHASH_PREFIX@_listptr_t last; - @LISTHASH_PREFIX@_cmpfunc_t cmpfunc; - int flags; - unsigned int nents; -}; -typedef struct @LISTHASH_PREFIX@_list @LISTHASH_PREFIX@_list_t; - - -/* values for flags */ -#define LIST_USERFUNC 0 /* use cmpfunc() to order */ -#define LIST_STACK 1 /* new elements go in front */ -#define LIST_QUEUE 2 /* new elements go at the end */ - - -/* reset a list pointer */ -void @LISTHASH_PREFIX@_listptr_reset(@LISTHASH_PREFIX@_listptr_t *); - -/* retrieve the data being pointed to */ -void *@LISTHASH_PREFIX@_listptr_data(@LISTHASH_PREFIX@_listptr_t *); - -/* creates a new, empty list */ -@LISTHASH_PREFIX@_list_t *@LISTHASH_PREFIX@_list_new(int, @LISTHASH_PREFIX@_cmpfunc_t); - -/* call a function for every element in a list */ -int @LISTHASH_PREFIX@_list_iterate(@LISTHASH_PREFIX@_list_t *, - @LISTHASH_PREFIX@_iterate_func_t, void *); - -/* empty the list */ -void @LISTHASH_PREFIX@_list_empty(@LISTHASH_PREFIX@_list_t *, - @LISTHASH_PREFIX@_freefunc_t); - -/* remove and free() the entire list */ -void @LISTHASH_PREFIX@_list_free(@LISTHASH_PREFIX@_list_t *, - @LISTHASH_PREFIX@_freefunc_t); - -/* add elements */ -int @LISTHASH_PREFIX@_list_add(@LISTHASH_PREFIX@_list_t *, void *); - -/* removes an element from the list - returns -1 on error */ -void @LISTHASH_PREFIX@_list_del(@LISTHASH_PREFIX@_list_t *, - @LISTHASH_PREFIX@_listptr_t *); - -/* returns 1 when valid data is returned, or 0 at end of list */ -int @LISTHASH_PREFIX@_list_next(@LISTHASH_PREFIX@_list_t *, - @LISTHASH_PREFIX@_listptr_t *); - -/* returns 1 when valid data is returned, or 0 at end of list */ -int @LISTHASH_PREFIX@_list_prev(@LISTHASH_PREFIX@_list_t *, - @LISTHASH_PREFIX@_listptr_t *); - -/* return 1 if the data matches a list entry, 0 otherwise */ -int @LISTHASH_PREFIX@_list_search(@LISTHASH_PREFIX@_list_t *, - @LISTHASH_PREFIX@_listptr_t *, void *, - @LISTHASH_PREFIX@_matchfunc_t); - -/* return number of elements from list */ -unsigned int @LISTHASH_PREFIX@_list_nents(@LISTHASH_PREFIX@_list_t *); - -/* adds elements from a string delimited by delim */ -int @LISTHASH_PREFIX@_list_add_str(@LISTHASH_PREFIX@_list_t *, char *, char *); - -/* string matching function */ -int @LISTHASH_PREFIX@_str_match(char *, char *); - - -/***** hash.c **********************************************************/ - -/* -** Hashing function (determines which bucket the given key hashes into) -** first argument is the key to hash -** second argument is the total number of buckets -** returns the bucket number -*/ -typedef unsigned int (*@LISTHASH_PREFIX@_hashfunc_t)(void *, unsigned int); - - -struct @LISTHASH_PREFIX@_hashptr -{ - int bucket; - @LISTHASH_PREFIX@_listptr_t node; -}; -typedef struct @LISTHASH_PREFIX@_hashptr @LISTHASH_PREFIX@_hashptr_t; - -struct @LISTHASH_PREFIX@_hash -{ - int numbuckets; - @LISTHASH_PREFIX@_list_t **table; - @LISTHASH_PREFIX@_hashfunc_t hashfunc; - unsigned int nents; -}; -typedef struct @LISTHASH_PREFIX@_hash @LISTHASH_PREFIX@_hash_t; - - -/* reset a hash pointer */ -void @LISTHASH_PREFIX@_hashptr_reset(@LISTHASH_PREFIX@_hashptr_t *); - -/* retrieve the data being pointed to */ -void *@LISTHASH_PREFIX@_hashptr_data(@LISTHASH_PREFIX@_hashptr_t *); - -/* default hash function, optimized for 7-bit strings */ -unsigned int @LISTHASH_PREFIX@_str_hashfunc(char *, unsigned int); - -/* return number of elements from hash */ -unsigned int @LISTHASH_PREFIX@_hash_nents(@LISTHASH_PREFIX@_hash_t *); - -/* create a new hash */ -@LISTHASH_PREFIX@_hash_t *@LISTHASH_PREFIX@_hash_new(int, @LISTHASH_PREFIX@_hashfunc_t); - -/* empty the hash */ -void @LISTHASH_PREFIX@_hash_empty(@LISTHASH_PREFIX@_hash_t *, - @LISTHASH_PREFIX@_freefunc_t); - -/* delete all the @LISTHASH_PREFIX@_nodes of the hash and clean up */ -void @LISTHASH_PREFIX@_hash_free(@LISTHASH_PREFIX@_hash_t *, - @LISTHASH_PREFIX@_freefunc_t); - -/* returns 1 when valid data is returned, or 0 at end of list */ -int @LISTHASH_PREFIX@_hash_next(@LISTHASH_PREFIX@_hash_t *, - @LISTHASH_PREFIX@_hashptr_t *); - -/* return 1 if the data matches a list entry, 0 otherwise */ -int @LISTHASH_PREFIX@_hash_search(@LISTHASH_PREFIX@_hash_t *, - @LISTHASH_PREFIX@_hashptr_t *, void *, - @LISTHASH_PREFIX@_matchfunc_t); - -/* return 1 if the key matches a list entry, 0 otherwise */ -int @LISTHASH_PREFIX@_hash_getkey(@LISTHASH_PREFIX@_hash_t *, - @LISTHASH_PREFIX@_hashptr_t *, void *, - @LISTHASH_PREFIX@_matchfunc_t); - -/* inserting data */ -int @LISTHASH_PREFIX@_hash_add(@LISTHASH_PREFIX@_hash_t *, void *); - -/* delete an entry */ -int @LISTHASH_PREFIX@_hash_del(@LISTHASH_PREFIX@_hash_t *, - @LISTHASH_PREFIX@_hashptr_t *); - -#endif /* ! @LISTHASH_PREFIX@_LISTHASH_H */ - diff --git a/Utilities/cmtar/output.c b/Utilities/cmtar/output.c deleted file mode 100644 index 283c594..0000000 --- a/Utilities/cmtar/output.c +++ /dev/null @@ -1,151 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** output.c - libtar code to print out tar header blocks -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> -#include <stdlib.h> - -#if !defined(_WIN32) || defined(__CYGWIN__) -# include <pwd.h> -# include <grp.h> -#endif - -#include <time.h> -#include <limits.h> - -#ifdef STDC_HEADERS -# include <string.h> -#endif - - -#ifndef _POSIX_LOGIN_NAME_MAX -# define _POSIX_LOGIN_NAME_MAX 9 -#endif - - -void -th_print(TAR *t) -{ - puts("\nPrinting tar header:"); - printf(" name = \"%.100s\"\n", t->th_buf.name); - printf(" mode = \"%.8s\"\n", t->th_buf.mode); - printf(" uid = \"%.8s\"\n", t->th_buf.uid); - printf(" gid = \"%.8s\"\n", t->th_buf.gid); - printf(" size = \"%.12s\"\n", t->th_buf.size); - printf(" mtime = \"%.12s\"\n", t->th_buf.mtime); - printf(" chksum = \"%.8s\"\n", t->th_buf.chksum); - printf(" typeflag = \'%c\'\n", t->th_buf.typeflag); - printf(" linkname = \"%.100s\"\n", t->th_buf.linkname); - printf(" magic = \"%.6s\"\n", t->th_buf.magic); - /*printf(" version = \"%.2s\"\n", t->th_buf.version); */ - printf(" version[0] = \'%c\',version[1] = \'%c\'\n", - t->th_buf.version[0], t->th_buf.version[1]); - printf(" uname = \"%.32s\"\n", t->th_buf.uname); - printf(" gname = \"%.32s\"\n", t->th_buf.gname); - printf(" devmajor = \"%.8s\"\n", t->th_buf.devmajor); - printf(" devminor = \"%.8s\"\n", t->th_buf.devminor); - printf(" prefix = \"%.155s\"\n", t->th_buf.prefix); - printf(" padding = \"%.12s\"\n", t->th_buf.padding); - printf(" gnu_longname = \"%s\"\n", - (t->th_buf.gnu_longname ? t->th_buf.gnu_longname : "[NULL]")); - printf(" gnu_longlink = \"%s\"\n", - (t->th_buf.gnu_longlink ? t->th_buf.gnu_longlink : "[NULL]")); -} - - -void -th_print_long_ls(TAR *t) -{ - char modestring[12]; -#if !defined(_WIN32) || defined(__CYGWIN__) - struct passwd *pw; - struct group *gr; -#endif - uid_t uid; - gid_t gid; - char username[_POSIX_LOGIN_NAME_MAX]; - char groupname[_POSIX_LOGIN_NAME_MAX]; - time_t mtime; - struct tm *mtm; - char *pathname; - -#ifdef HAVE_STRFTIME - char timebuf[18]; -#else - const char *months[] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" - }; -#endif - - uid = th_get_uid(t); -#if !defined(_WIN32) || defined(__CYGWIN__) - pw = getpwuid(uid); - if (pw != NULL) - strlcpy(username, pw->pw_name, sizeof(username)); - else -#endif - snprintf(username, sizeof(username), "%d", (int)uid); - gid = th_get_gid(t); -#if !defined(_WIN32) || defined(__CYGWIN__) - gr = getgrgid(gid); - if (gr != NULL) - strlcpy(groupname, gr->gr_name, sizeof(groupname)); - else -#endif - snprintf(groupname, sizeof(groupname), "%d", (int)gid); - - strmode(th_get_mode(t), modestring); - printf("%.10s %-8.8s %-8.8s ", modestring, username, groupname); - -#if !defined(_WIN32) || defined(__CYGWIN__) - if (TH_ISCHR(t) || TH_ISBLK(t)) - printf(" %3d, %3d ", th_get_devmajor(t), th_get_devminor(t)); - else -#endif - printf("%9ld ", (long)th_get_size(t)); - - mtime = th_get_mtime(t); - mtm = localtime(&mtime); -#ifdef HAVE_STRFTIME - strftime(timebuf, sizeof(timebuf), "%b %d %H:%M %Y", mtm); - printf("%s", timebuf); -#else - printf("%.3s %2d %2d:%02d %4d", - months[mtm->tm_mon], - mtm->tm_mday, mtm->tm_hour, mtm->tm_min, mtm->tm_year + 1900); -#endif - - pathname = th_get_pathname(t); - if (pathname) - { - printf(" %s", pathname); - free(pathname); - } - -#if !defined(_WIN32) || defined(__CYGWIN__) - if (TH_ISSYM(t) || TH_ISLNK(t)) - { - if (TH_ISSYM(t)) - printf(" -> "); - else - printf(" link to "); - if ((t->options & TAR_GNU) && t->th_buf.gnu_longlink != NULL) - printf("%s", t->th_buf.gnu_longlink); - else - printf("%.100s", t->th_buf.linkname); - } -#endif - - putchar('\n'); -} diff --git a/Utilities/cmtar/tar.h b/Utilities/cmtar/tar.h deleted file mode 100644 index da11c14..0000000 --- a/Utilities/cmtar/tar.h +++ /dev/null @@ -1,71 +0,0 @@ -/* $NetBSD: tar.h,v 1.4 2003/08/07 09:44:11 agc Exp $ */ - -/*- - * Copyright (c) 1994 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Chuck Karish of Mindcraft, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)tar.h 8.2 (Berkeley) 1/4/94 - */ - -#ifndef _TAR_H -#define _TAR_H - -#define TMAGIC "ustar" /* ustar and a null */ -#define TMAGLEN 6 -#define TVERSION "00" /* 00 and no null */ -#define TVERSLEN 2 - -/* Values used in typeflag field */ -#define REGTYPE '0' /* Regular file */ -#define AREGTYPE '\0' /* Regular file */ -#define LNKTYPE '1' /* Link */ -#define SYMTYPE '2' /* Reserved */ -#define CHRTYPE '3' /* Character special */ -#define BLKTYPE '4' /* Block special */ -#define DIRTYPE '5' /* Directory */ -#define FIFOTYPE '6' /* FIFO special */ -#define CONTTYPE '7' /* Reserved */ - -/* Bits used in the mode field - values in octal */ -#define TSUID 04000 /* Set UID on execution */ -#define TSGID 02000 /* Set GID on execution */ -#define TSVTX 01000 /* Reserved */ - /* File permissions */ -#define TUREAD 00400 /* Read by owner */ -#define TUWRITE 00200 /* Write by owner */ -#define TUEXEC 00100 /* Execute/Search by owner */ -#define TGREAD 00040 /* Read by group */ -#define TGWRITE 00020 /* Write by group */ -#define TGEXEC 00010 /* Execute/Search by group */ -#define TOREAD 00004 /* Read by other */ -#define TOWRITE 00002 /* Write by other */ -#define TOEXEC 00001 /* Execute/Search by other */ - -#endif diff --git a/Utilities/cmtar/util.c b/Utilities/cmtar/util.c deleted file mode 100644 index 0e23a05..0000000 --- a/Utilities/cmtar/util.c +++ /dev/null @@ -1,186 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** util.c - miscellaneous utility code for libtar -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> -#include <libtar/compat.h> -#include <errno.h> - -#ifdef STDC_HEADERS -# include <string.h> -#endif - -#if defined(_WIN32) && !defined(__CYGWIN__) -#include <direct.h> -#else -# ifdef HAVE_SYS_PARAM_H -# include <sys/param.h> -# endif -#endif - -/* hashing function for pathnames */ -int -path_hashfunc(char *key, int numbuckets) -{ - char buf[TAR_MAXPATHLEN]; - char *p; - - strcpy(buf, key); - p = basename(buf); - - return (((unsigned int)p[0]) % numbuckets); -} - - -/* matching function for dev_t's */ -int -dev_match(dev_t *dev1, dev_t *dev2) -{ - return !memcmp(dev1, dev2, sizeof(dev_t)); -} - - -/* matching function for ino_t's */ -int -ino_match(ino_t *ino1, ino_t *ino2) -{ - return !memcmp(ino1, ino2, sizeof(ino_t)); -} - - -/* hashing function for dev_t's */ -int -dev_hash(dev_t *dev) -{ - return *dev % 16; -} - - -/* hashing function for ino_t's */ -int -ino_hash(ino_t *inode) -{ - return *inode % 256; -} - - -/* -** mkdirhier() - create all directories in a given path -** returns: -** 0 success -** 1 all directories already exist -** -1 (and sets errno) error -*/ -int -mkdirhier(char *path) -{ - char src[TAR_MAXPATHLEN], dst[TAR_MAXPATHLEN] = ""; - char *dirp, *nextp = src; - int retval = 1; - - if (strlcpy(src, path, sizeof(src)) > sizeof(src)) - { - errno = ENAMETOOLONG; - return -1; - } - - if (path[0] == '/') - strcpy(dst, "/"); - - while ((dirp = strsep(&nextp, "/")) != NULL) - { - if (*dirp == '\0') - continue; - - /* - * Don't try to build current or parent dir. It doesn't make sense anyhow, - * but it also returns EINVAL instead of EEXIST on BeOS! - */ - if ((strcmp(dirp, ".") == 0) || (strcmp(dirp, "..") == 0)) - continue; - - if (dst[0] != '\0') - strcat(dst, "/"); - strcat(dst, dirp); - -#if defined(_WIN32) - /* On some Windows machine, trying to mkdir("C:") would fail miserably */ - if (dst[strlen(dst) - 1] == ':') - continue; -#endif - - if ( -#if defined(_WIN32) && !defined(__CYGWIN__) - mkdir(dst) == -1 -#else - mkdir(dst, 0777) == -1 -#endif - ) - { -#ifdef __BORLANDC__ - /* There is a bug in the Borland Run time library which makes MKDIR - return EACCES when it should return EEXIST - if it is some other error besides directory exists - then return false */ - if ( errno == EACCES) - { - errno = EEXIST; - } -#endif - if (errno != EEXIST) - return -1; - } - else - retval = 0; - } - - return retval; -} - - -/* calculate header checksum */ -int -th_crc_calc(TAR *t) -{ - int i, sum = 0; - - for (i = 0; i < T_BLOCKSIZE; i++) - sum += ((unsigned char *)(&(t->th_buf)))[i]; - for (i = 0; i < 8; i++) - sum += (' ' - (unsigned char)t->th_buf.chksum[i]); - - return sum; -} - - -/* string-octal to integer conversion */ -int -oct_to_int(char *oct) -{ - int i; - - sscanf(oct, "%o", &i); - - return i; -} - - -/* integer to string-octal conversion, no NULL */ -void -int_to_oct_nonull(int num, char *oct, size_t octlen) -{ - snprintf(oct, octlen, "%*lo", (int)(octlen-1), (unsigned long)num); - oct[octlen - 1] = ' '; -} - - diff --git a/Utilities/cmtar/wrapper.c b/Utilities/cmtar/wrapper.c deleted file mode 100644 index 4f1271a..0000000 --- a/Utilities/cmtar/wrapper.c +++ /dev/null @@ -1,241 +0,0 @@ -/* -** Copyright 1998-2003 University of Illinois Board of Trustees -** Copyright 1998-2003 Mark D. Roth -** All rights reserved. -** -** wrapper.c - libtar high-level wrapper code -** -** Mark D. Roth <roth@uiuc.edu> -** Campus Information Technologies and Educational Services -** University of Illinois at Urbana-Champaign -*/ - -#include <libtarint/internal.h> - -#include <stdio.h> -#include <stdlib.h> - -#include <libtar/compat.h> -#if defined(HAVE_SYS_PARAM_H) -# include <sys/param.h> -#endif -#if defined(HAVE_DIRENT_H) -#include <dirent.h> -#else -#include <libtarint/filesystem.h> -#endif -#include <errno.h> - -#ifdef HAVE_FNMATCH_H -#include <fnmatch.h> -#endif - -#ifdef STDC_HEADERS -# include <string.h> -#endif - - -int -tar_extract_glob(TAR *t, char *globname, char *prefix) -{ - char *filename; - char buf[TAR_MAXPATHLEN]; - int i; - char *pathname; - - while ((i = th_read(t)) == 0) - { - pathname = th_get_pathname(t); - filename = pathname; - - if (fnmatch(globname, filename, FNM_PATHNAME | FNM_PERIOD)) - { - if (pathname) - { - free(pathname); - } - - if (TH_ISREG(t) && tar_skip_regfile(t)) - return -1; - continue; - } - - if (t->options & TAR_VERBOSE) - th_print_long_ls(t); - - if (prefix != NULL) - snprintf(buf, sizeof(buf), "%s/%s", prefix, filename); - else - strlcpy(buf, filename, sizeof(buf)); - - if (tar_extract_file(t, filename) != 0) - { - if (pathname) - { - free(pathname); - } - return -1; - } - - if (pathname) - { - free(pathname); - } - } - - return (i == 1 ? 0 : -1); -} - - -int -tar_extract_all(TAR *t, char *prefix) -{ - char *filename; - char buf[TAR_MAXPATHLEN]; - int i; - char *pathname; - -#ifdef DEBUG - printf("==> tar_extract_all(TAR *t, \"%s\")\n", - (prefix ? prefix : "(null)")); -#endif - - while ((i = th_read(t)) == 0) - { -#ifdef DEBUG - puts(" tar_extract_all(): calling th_get_pathname()"); -#endif - - pathname = th_get_pathname(t); - filename = pathname; - - if (t->options & TAR_VERBOSE) - th_print_long_ls(t); - if (prefix != NULL) - snprintf(buf, sizeof(buf), "%s/%s", prefix, filename); - else - strlcpy(buf, filename, sizeof(buf)); - - if (pathname) - { - free(pathname); - } - -#ifdef DEBUG - printf(" tar_extract_all(): calling tar_extract_file(t, " - "\"%s\")\n", buf); -#endif - - if (tar_extract_file(t, buf) != 0) - return -1; - } - - return (i == 1 ? 0 : -1); -} - - -int -tar_append_tree(TAR *t, char *realdir, char *savedir) -{ - char realpath[TAR_MAXPATHLEN]; - char savepath[TAR_MAXPATHLEN]; - size_t plen; -#if defined(HAVE_DIRENT_H) - struct dirent *dent; - DIR *dp; -#else - kwDirEntry * dent; - kwDirectory *dp; -#endif - struct stat s; - strncpy(realpath, realdir, sizeof(realpath)); - realpath[sizeof(realpath)-1] = 0; - plen = strlen(realpath); - if ( realpath[plen-1] == '/' ) - { - realpath[plen-1] = 0; - } - - -#ifdef DEBUG - printf("==> tar_append_tree(0x%lx, \"%s\", \"%s\")\n", - t, realdir, (savedir ? savedir : "[NULL]")); -#endif - - if (tar_append_file(t, realdir, savedir) != 0) - return -1; - -#ifdef DEBUG - puts(" tar_append_tree(): done with tar_append_file()..."); -#endif - - if ( stat(realpath, &s) != 0 ) - { - return -1; - } - if ( -#if defined(_WIN32) && !defined(__CYGWIN__) - (s.st_mode & _S_IFDIR) == 0 -#else - !S_ISDIR(s.st_mode) -#endif - ) - return 0; -#if defined(HAVE_DIRENT_H) - dp = opendir(realdir); -#else - dp = kwOpenDir(realdir); -#endif - - if (dp == NULL) - { - if (errno == ENOTDIR) - return 0; - return -1; - } -#if defined(HAVE_DIRENT_H) - while ((dent = readdir(dp)) != NULL) -#else - while ((dent = kwReadDir(dp)) != NULL) -#endif - { - if (strcmp(dent->d_name, ".") == 0 || - strcmp(dent->d_name, "..") == 0) - continue; - - snprintf(realpath, TAR_MAXPATHLEN, "%s/%s", realdir, - dent->d_name); - if (savedir) - snprintf(savepath, TAR_MAXPATHLEN, "%s/%s", savedir, - dent->d_name); - -#ifndef WIN32 - if (lstat(realpath, &s) != 0) - return -1; -#else - if (stat(realpath, &s) != 0) - return -1; -#endif - if (S_ISDIR(s.st_mode)) - { - if (tar_append_tree(t, realpath, - (savedir ? savepath : NULL)) != 0) - return -1; - continue; - } - - if (tar_append_file(t, realpath, - (savedir ? savepath : NULL)) != 0) - return -1; - } - -#if defined(HAVE_DIRENT_H) - closedir(dp); -#else - kwCloseDir(dp); -#endif - - return 0; -} - - |