- r= pipe(paste); eassert(!r);
- r= pipe(results); eassert(!r);
- err= tmpfile(); eassert(err);
-
- converter= fork(); eassert(converter!=-1);
- if (!converter) {
- r= dup2(paste[0],0); eassert(r==0);
- r= dup2(results[1],1); eassert(r==1);
- r= dup2(2,4); eassert(r==4); /* fileno(errn) > 4, see above */
- r= dup2(fileno(err),2); eassert(r==2);
- close(paste[0]);
- close(paste[1]);
- close(results[0]);
- close(results[1]);
- execlp("xpmtoppm", "xpmtoppm",(char*)0);
- dup2(4,2);
- eassert(!"xpmtoppm exec failure");
- }
-
- char *xpmdata=0;
- r= XpmCreateBufferFromImage(disp, &xpmdata, sn, 0, &xpma);
- eassert(!r);
- eassert(xpmdata);
-
- paster= fork(); eassert(paster!=-1);
- if (!paster) {
- FILE *f= fdopen(paste[1],"w"); eassert(f);
- close(paste[0]);
- close(results[0]);
- close(results[1]);
- r= fputs(xpmdata,f); eassert(r!=EOF);
- //size_t did= fwrite(sn->d, 1, sn->len, f);
- //eassert(did==sn->len);
- eassert(!fclose(f));
- exit(0);
- }
-
- close(paste[0]);
- close(paste[1]);
- close(results[1]);
-
- XpmFree(xpmdata);