1 #include "EXTERN.h" 2 #include "perl.h" 3 #include "XSUB.h" 4 5 #include <unistd.h> 6 7 MODULE = OpenBSD::MkTemp PACKAGE = OpenBSD::MkTemp 8 9 10 # $tmpdir = mkdtemp( "/tmp/tmpdirXXXXXXXXXX" ); 11 char * 12 mkdtemp(SV *template) 13 PREINIT: 14 char *path; 15 CODE: 16 if (SvTAINTED(template)) 17 croak("tainted template"); 18 path = savesvpv(template); 19 RETVAL = mkdtemp(path); 20 if (RETVAL == NULL) 21 Safefree(path); 22 OUTPUT: 23 RETVAL 24 25 26 # $fh = mkstemps_real( $template, suffixlen ) 27 void 28 mkstemps_real(SV *template, int suffixlen) 29 PREINIT: 30 int fd; 31 PPCODE: 32 if (suffixlen < 0) 33 croak("invalid suffixlen"); 34 if (SvTAINTED(template)) 35 croak("tainted template"); 36 /* detect read-only SVs */ 37 sv_catpv(template, ""); 38 fd = mkstemps(SvPV_nolen(template), suffixlen); 39 SvSETMAGIC(template); 40 if (fd != -1) { 41 GV *gv = newGVgen("OpenBSD::MkTemp"); 42 PerlIO *io = PerlIO_fdopen(fd, "w+"); 43 if (do_open(gv, "+<&", 3, FALSE, 0, 0, io)) { 44 mXPUSHs(sv_bless(newRV((SV*)gv), 45 gv_stashpv("OpenBSD::MkTemp",1))); 46 SvREFCNT_dec(gv); 47 } 48 } 49 50