App-rs

 view release on metacpan or  search on metacpan

rs.xs  view on Meta::CPAN

		RETVAL

void
rs_unparse(SV *v, int fd)
	CODE:
		char	p[5];
		struct {
			enum {
				NEW, OLD
			}st;
			HV	*v;
		}s[256], *q;
		uint8_t	sp = 0;
		LLAC(v);
		while (sp) {
			q = s + sp - 1;
			if (q->st == NEW) {
				unless (SvROK(v)) {
					char	*in;
					STRLEN	il;
					in = SvPV(v, il);
					HPACK('S', il);
					cwrite(fd, in, il);
					TER;
				} else {
					v = SvRV(v);
					if (SvTYPE(v) < SVt_PVAV) {
						off_t	il;
						char	*in = (char*)mmapr(SvPV_nolen(v), &il);
						HPACK('S', il);
						if (il) {
							cwrite(fd, in, il);
							errn1(munmap(in, il));
						}
						TER;
					} else {
						q->v = (HV*)v, q->st = OLD;
						uint32_t	l = 0;
						hv_iterinit(q->v);
						while (hv_iternext(q->v))	l += 1;
						HPACK('H', l);
						hv_iterinit(q->v);
					}
				}
			} else {
				char	*key;
				I32	retlen;
				v = hv_iternextsv(q->v, &key, &retlen);
				if (v) {
					HPACK('S', retlen);
					cwrite(fd, key, retlen);
					LLAC(v);
				} else {
					TER;
				}
			}
		}
		cwrite(fd, NULL, 0);

bool
lchown(char *f, uid_t uid, gid_t gid)
	POSTCALL:
		RETVAL = !RETVAL;

bool
utimensat(char *f, int t)
	CODE:
		struct timespec	times[2];
		times[0].tv_nsec = UTIME_OMIT;
		times[1].tv_sec = t, times[1].tv_nsec = 0;
		RETVAL = !utimensat(AT_FDCWD, f, times, AT_SYMLINK_NOFOLLOW);
	OUTPUT:
		RETVAL



( run in 0.648 second using v1.01-cache-2.11-cpan-5735350b133 )