summaryrefslogtreecommitdiff
path: root/ext/Data/Util/Util.xs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/Data/Util/Util.xs')
-rw-r--r--ext/Data/Util/Util.xs29
1 files changed, 29 insertions, 0 deletions
diff --git a/ext/Data/Util/Util.xs b/ext/Data/Util/Util.xs
new file mode 100644
index 0000000000..6d246ddf51
--- /dev/null
+++ b/ext/Data/Util/Util.xs
@@ -0,0 +1,29 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+
+MODULE=Data::Util PACKAGE=Data::Util
+
+int
+sv_readonly_flag(...)
+PROTOTYPE: \[$%@];$
+CODE:
+{
+ SV *sv = SvRV(ST(0));
+ IV old = SvREADONLY(sv);
+
+ if (items == 2) {
+ if (SvTRUE(ST(1))) {
+ SvREADONLY_on(sv);
+ }
+ else {
+ SvREADONLY_off(sv);
+ }
+ }
+ if (old)
+ XSRETURN_YES;
+ else
+ XSRETURN_NO;
+}
+