require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_SSP_STRING_H_)) {
    eval 'sub _SSP_STRING_H_ () {1;}' unless defined(&_SSP_STRING_H_);
    require 'sys/cdefs.ph';
    require 'ssp/ssp.ph';
    if((defined(&__SSP_FORTIFY_LEVEL) ? &__SSP_FORTIFY_LEVEL : undef) > 0) {
	eval 'sub __ssp_bos_check3 {
	    my($fun, $dst, $src, $len) = @_;
    	    eval q((( &__ssp_bos0($dst) != -1) ?  &__builtin___  $fun   &_chk($dst, $src, $len,  &__ssp_bos0($dst)) :  &__  $fun   &_ichk($dst, $src, $len)));
	}' unless defined(&__ssp_bos_check3);
	eval 'sub __ssp_bos_check2 {
	    my($fun, $dst, $src) = @_;
    	    eval q((( &__ssp_bos0($dst) != -1) ?  &__builtin___  $fun   &_chk($dst, $src,  &__ssp_bos0($dst)) :  &__  $fun   &_ichk($dst, $src)));
	}' unless defined(&__ssp_bos_check2);
	eval 'sub __ssp_bos_icheck3_restrict {
	    my($fun, $type1, $type2) = @_;
    	    eval q( &static  &__inline $type1  &__  $fun   &_ichk($type1  &__restrict, $type2  &__restrict, \'size_t\');  &static  &__inline  &__attribute__(( &__always_inline__)) $type1  &__  $fun   &_ichk($type1  &__restrict  &dst, $type2  &__restrict  &src, \'size_t\'  &len) {  &return  &__builtin___  $fun   &_chk( &dst,  &src,  &len,  &__ssp_bos0( &dst)); });
	}' unless defined(&__ssp_bos_icheck3_restrict);
	eval 'sub __ssp_bos_icheck3 {
	    my($fun, $type1, $type2) = @_;
    	    eval q( &static  &__inline $type1  &__  $fun   &_ichk($type1, $type2, \'size_t\');  &static  &__inline  &__attribute__(( &__always_inline__)) $type1  &__  $fun   &_ichk($type1  &dst, $type2  &src, \'size_t\'  &len) {  &return  &__builtin___  $fun   &_chk( &dst,  &src,  &len,  &__ssp_bos0( &dst)); });
	}' unless defined(&__ssp_bos_icheck3);
	eval 'sub __ssp_bos_icheck2_restrict {
	    my($fun, $type1, $type2) = @_;
    	    eval q( &static  &__inline $type1  &__  $fun   &_ichk($type1, $type2);  &static  &__inline  &__attribute__(( &__always_inline__)) $type1  &__  $fun   &_ichk($type1  &__restrict  &dst, $type2  &__restrict  &src) {  &return  &__builtin___  $fun   &_chk( &dst,  &src,  &__ssp_bos0( &dst)); });
	}' unless defined(&__ssp_bos_icheck2_restrict);
	if( &__GNUC_PREREQ__(4,8) || defined(&__clang__)) {
	}
	eval 'sub memcpy {
	    my($dst, $src, $len) = @_;
    	    eval q( &__ssp_bos_check3( &memcpy, $dst, $src, $len));
	}' unless defined(&memcpy);
	eval 'sub memmove {
	    my($dst, $src, $len) = @_;
    	    eval q( &__ssp_bos_check3( &memmove, $dst, $src, $len));
	}' unless defined(&memmove);
	eval 'sub memset {
	    my($dst, $val, $len) = @_;
    	    eval q( &__ssp_bos_check3( &memset, $dst, $val, $len));
	}' unless defined(&memset);
	eval 'sub stpcpy {
	    my($dst, $src) = @_;
    	    eval q( &__ssp_bos_check2( &stpcpy, $dst, $src));
	}' unless defined(&stpcpy);
	if( &__GNUC_PREREQ__(4,8) || defined(&__clang__)) {
	    eval 'sub stpncpy {
	        my($dst, $src, $len) = @_;
    		eval q( &__ssp_bos_check3( &stpncpy, $dst, $src, $len));
	    }' unless defined(&stpncpy);
	}
	eval 'sub strcpy {
	    my($dst, $src) = @_;
    	    eval q( &__ssp_bos_check2( &strcpy, $dst, $src));
	}' unless defined(&strcpy);
	eval 'sub strcat {
	    my($dst, $src) = @_;
    	    eval q( &__ssp_bos_check2( &strcat, $dst, $src));
	}' unless defined(&strcat);
	eval 'sub strncpy {
	    my($dst, $src, $len) = @_;
    	    eval q( &__ssp_bos_check3( &strncpy, $dst, $src, $len));
	}' unless defined(&strncpy);
	eval 'sub strncat {
	    my($dst, $src, $len) = @_;
    	    eval q( &__ssp_bos_check3( &strncat, $dst, $src, $len));
	}' unless defined(&strncat);
    }
}
1;
