ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-UUlib/UUlib.xs
(Generate patch)

Comparing Convert-UUlib/UUlib.xs (file contents):
Revision 1.2 by root, Mon Jun 11 20:42:36 2001 UTC vs.
Revision 1.6 by root, Sat Apr 6 01:53:29 2002 UTC

60 if (strEQ(name, "OPT_USETEXT")) return UUOPT_USETEXT; 60 if (strEQ(name, "OPT_USETEXT")) return UUOPT_USETEXT;
61 if (strEQ(name, "OPT_VERBOSE")) return UUOPT_VERBOSE; 61 if (strEQ(name, "OPT_VERBOSE")) return UUOPT_VERBOSE;
62 if (strEQ(name, "OPT_VERSION")) return UUOPT_VERSION; 62 if (strEQ(name, "OPT_VERSION")) return UUOPT_VERSION;
63 if (strEQ(name, "OPT_REMOVE")) return UUOPT_REMOVE; 63 if (strEQ(name, "OPT_REMOVE")) return UUOPT_REMOVE;
64 if (strEQ(name, "OPT_MOREMIME")) return UUOPT_MOREMIME; 64 if (strEQ(name, "OPT_MOREMIME")) return UUOPT_MOREMIME;
65 if (strEQ(name, "OPT_DOTDOT")) return UUOPT_DOTDOT;
65 case 'R': 66 case 'R':
66 if (strEQ(name, "RET_CANCEL")) return UURET_CANCEL; 67 if (strEQ(name, "RET_CANCEL")) return UURET_CANCEL;
67 if (strEQ(name, "RET_CONT")) return UURET_CONT; 68 if (strEQ(name, "RET_CONT")) return UURET_CONT;
68 if (strEQ(name, "RET_EXISTS")) return UURET_EXISTS; 69 if (strEQ(name, "RET_EXISTS")) return UURET_EXISTS;
69 if (strEQ(name, "RET_ILLVAL")) return UURET_ILLVAL; 70 if (strEQ(name, "RET_ILLVAL")) return UURET_ILLVAL;
82 if (strEQ(name, "QP_ENCODED")) return QP_ENCODED; 83 if (strEQ(name, "QP_ENCODED")) return QP_ENCODED;
83 case 'U': 84 case 'U':
84 if (strEQ(name, "UU_ENCODED")) return UU_ENCODED; 85 if (strEQ(name, "UU_ENCODED")) return UU_ENCODED;
85 case 'X': 86 case 'X':
86 if (strEQ(name, "XX_ENCODED")) return XX_ENCODED; 87 if (strEQ(name, "XX_ENCODED")) return XX_ENCODED;
88 case 'Y':
89 if (strEQ(name, "YENC_ENCODED")) return YENC_ENCODED;
87 } 90 }
88 errno = EINVAL; 91 errno = EINVAL;
89 return 0; 92 return 0;
90} 93}
91 94
142 PUTBACK; count = perl_call_sv ((SV *)cb, G_SCALAR); SPAGAIN; 145 PUTBACK; count = perl_call_sv ((SV *)cb, G_SCALAR); SPAGAIN;
143 146
144 if (count != 1) 147 if (count != 1)
145 croak ("fnamefilter perl callback returned more than one argument"); 148 croak ("fnamefilter perl callback returned more than one argument");
146 149
147 FP_free(str); str = FP_strdup (POPp); 150 _FP_free(str); str = _FP_strdup (POPp);
148 151
149 PUTBACK; FREETMPS; LEAVE; 152 PUTBACK; FREETMPS; LEAVE;
150 153
151 return str; 154 return str;
152} 155}
177 PUTBACK; FREETMPS; LEAVE; 180 PUTBACK; FREETMPS; LEAVE;
178 181
179 return retval; 182 return retval;
180} 183}
181 184
185static char *uu_filename_callback (void *cb, char *subject, char *filename)
186{
187 dSP;
188 int count;
189 SV *retval;
190 STRLEN dc;
191
192 ENTER; SAVETMPS; PUSHMARK(SP); EXTEND(SP,3);
193
194 PUSHs(sv_2mortal(newSVpv(subject, 0)));
195 PUSHs(filename ? sv_2mortal(newSVpv(filename, 0)) : &PL_sv_undef);
196
197 PUTBACK; count = perl_call_sv ((SV *)cb, G_ARRAY); SPAGAIN;
198
199 if (count > 1)
200 croak ("filenamecallback perl callback returned more than one argument");
201
202 if (count)
203 {
204 _FP_free (filename);
205
206 retval = POPs;
207
208 if (SvOK (retval))
209 {
210 STRLEN len;
211 char *fn = SvPV (retval, len);
212
213 filename = malloc (len + 1);
214
215 if (filename)
216 {
217 memcpy (filename, fn, len);
218 filename[len] = 0;
219 }
220 }
221 else
222 filename = 0;
223 }
224
225 PUTBACK; FREETMPS; LEAVE;
226
227 return filename;
228}
229
182static SV *uu_msg_sv, *uu_busy_sv, *uu_file_sv, *uu_fnamefilter_sv; 230static SV *uu_msg_sv, *uu_busy_sv, *uu_file_sv, *uu_fnamefilter_sv, *uu_filename_sv;
183 231
184#define FUNC_CB(cb) (void *)(sv_setsv (cb ## _sv, func), cb ## _sv), func ? cb ## _callback : NULL 232#define FUNC_CB(cb) (void *)(sv_setsv (cb ## _sv, func), cb ## _sv), func ? cb ## _callback : NULL
185 233
186static int uu_info_file(void *cb, char *info) 234static int uu_info_file(void *cb, char *info)
187{ 235{
315void 363void
316UUSetFNameFilter(func=0) 364UUSetFNameFilter(func=0)
317 SV * func 365 SV * func
318 CODE: 366 CODE:
319 UUSetFNameFilter (FUNC_CB(uu_fnamefilter)); 367 UUSetFNameFilter (FUNC_CB(uu_fnamefilter));
368
369void
370UUSetFileNameCallback(func=0)
371 SV * func
372 CODE:
373 UUSetFileNameCallback (FUNC_CB(uu_filename));
320 374
321char * 375char *
322UUFNameFilter(fname) 376UUFNameFilter(fname)
323 char * fname 377 char * fname
324 378
497 uulist *li 551 uulist *li
498 char * newfilename 552 char * newfilename
499 CODE: 553 CODE:
500 if (newfilename) 554 if (newfilename)
501 { 555 {
502 FP_free (li->filename); 556 _FP_free (li->filename);
503 li->filename = FP_strdup (newfilename); 557 li->filename = _FP_strdup (newfilename);
504 } 558 }
505 RETVAL = li->filename; 559 RETVAL = li->filename;
506 OUTPUT: 560 OUTPUT:
507 RETVAL 561 RETVAL
508 562
573 p = p->NEXT; 627 p = p->NEXT;
574 } 628 }
575 } 629 }
576 630
577BOOT: 631BOOT:
578uu_msg_sv = newSVsv(&PL_sv_undef); 632 uu_msg_sv = newSVsv(&PL_sv_undef);
579uu_busy_sv = newSVsv(&PL_sv_undef); 633 uu_busy_sv = newSVsv(&PL_sv_undef);
580uu_file_sv = newSVsv(&PL_sv_undef); 634 uu_file_sv = newSVsv(&PL_sv_undef);
581uu_fnamefilter_sv = newSVsv(&PL_sv_undef); 635 uu_fnamefilter_sv = newSVsv(&PL_sv_undef);
636 uu_filename_sv = newSVsv(&PL_sv_undef);
582 637

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines