diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-06-18 22:11:52 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-06-18 22:11:52 +0400 |
commit | 447e9a4cd5d385e8724b7f92c952d66bd35a2c34 (patch) | |
tree | a32a990f805f3d443abe6b078a5b65e6caf65e95 /source/blender/blenkernel | |
parent | 649dd6f64846ca959566389bc8ce58f87dcb499f (diff) |
add option to enable auto-execute scripts, but exclude certain directories.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_autoexec.h | 31 | ||||
-rw-r--r-- | source/blender/blenkernel/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/autoexec.c | 69 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 2 |
4 files changed, 104 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_autoexec.h b/source/blender/blenkernel/BKE_autoexec.h new file mode 100644 index 00000000000..7dc1e76ed5c --- /dev/null +++ b/source/blender/blenkernel/BKE_autoexec.h @@ -0,0 +1,31 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Blender Foundation 2013 + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef __BKE_AUTOEXEC_H__ +#define __BKE_AUTOEXEC_H__ + +/** \file BKE_autoexec.h + * \ingroup bke + */ + +bool BKE_autoexec_match(const char *path); + +#endif /* __BKE_AUTOEXEC_H__ */ diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 3864fe3b350..7e1355b5421 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -63,6 +63,7 @@ set(SRC intern/anim.c intern/anim_sys.c intern/armature.c + intern/autoexec.c intern/blender.c intern/bmfont.c intern/boids.c @@ -163,6 +164,7 @@ set(SRC BKE_anim.h BKE_animsys.h BKE_armature.h + BKE_autoexec.h BKE_blender.h BKE_bmesh.h BKE_bmfont.h diff --git a/source/blender/blenkernel/intern/autoexec.c b/source/blender/blenkernel/intern/autoexec.c new file mode 100644 index 00000000000..48bebd34179 --- /dev/null +++ b/source/blender/blenkernel/intern/autoexec.c @@ -0,0 +1,69 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Blender Foundation 2013 + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/blenkernel/intern/armature.c + * \ingroup bke + * + * Currently just checks if a blend file can be trusted to autoexec, + * may add signing here later. + */ + +#include <stdlib.h> +#include <string.h> + +#include "DNA_userdef_types.h" + +#include "BLI_utildefines.h" +#include "BLI_fnmatch.h" +#include "BLI_path_util.h" + +#include "BKE_autoexec.h" /* own include */ + +/** + * \param path The path to check against. + * \return Success + */ +bool BKE_autoexec_match(const char *path) +{ + bPathCompare *path_cmp; + +#ifdef WIN32 + const int fnmatch_flags = FNM_CASEFOLD; +#else + const int fnmatch_flags = 0; +#endif + + BLI_assert((U.flag & USER_SCRIPT_AUTOEXEC_DISABLE) == 0); + + for (path_cmp = U.autoexec_paths.first; path_cmp; path_cmp = path_cmp->next) { + if ((path_cmp->flag & USER_PATHCMP_GLOB)) { + if (fnmatch(path_cmp->path, path, fnmatch_flags) == 0) { + return true; + } + } + else if (BLI_path_ncmp(path_cmp->path, path, strlen(path_cmp->path)) == 0) { + return true; + } + } + + return false; +} diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 87a8def52bf..1e7aba6d25b 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -416,6 +416,8 @@ void BKE_userdef_free(void) MEM_freeN(addon); } + BLI_freelistN(&U.autoexec_paths); + BLI_freelistN(&U.uistyles); BLI_freelistN(&U.uifonts); BLI_freelistN(&U.themes); |