/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "modperl_largefiles.h" #include "mod_perl.h" /* * Stat_t needs flags in modperl_largefiles.h */ int modperl_sys_is_dir(pTHX_ SV *sv) { Stat_t statbuf; STRLEN n_a; char *name = SvPV(sv, n_a); if (PerlLIO_stat(name, &statbuf) < 0) { return 0; } return S_ISDIR(statbuf.st_mode); } /* * Perl does not provide this abstraction. * APR does, but requires a pool. efforts to expose this area of apr * failed. so we roll our own. *sigh* */ int modperl_sys_dlclose(void *handle) { #if defined(MP_SYS_DL_DLOPEN) #ifdef I_DLFCN #include #else #include #include #endif return dlclose(handle) == 0; #elif defined(MP_SYS_DL_DYLD) return NSUnLinkModule(handle, FALSE); #elif defined(MP_SYS_DL_HPUX) #include shl_unload((shl_t)handle); return 1; #elif defined(MP_SYS_DL_WIN32) return FreeLibrary(handle); #elif defined(MP_SYS_DL_BEOS) return unload_add_on(handle) < B_NO_ERROR; #elif defined(MP_SYS_DL_DLLLOAD) return dllfree(handle) == 0; #elif defined(MP_SYS_DL_AIX) return dlclose(handle) == 0; #else #error "modperl_sys_dlclose not defined on this platform" return 0; #endif }