From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/2019 Path: news.gmane.org!not-for-mail From: =?ISO-8859-2?Q?Daniel_Cegie=B3ka?= Newsgroups: gmane.linux.lib.musl.general Subject: funopen() from BSD Date: Fri, 28 Sep 2012 23:01:32 +0200 Message-ID: Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=e89a8ff253fe8180d004cac95dd5 X-Trace: ger.gmane.org 1348866127 30380 80.91.229.3 (28 Sep 2012 21:02:07 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 28 Sep 2012 21:02:07 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-2020-gllmg-musl=m.gmane.org@lists.openwall.com Fri Sep 28 23:02:12 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1THhhL-0005gA-Rq for gllmg-musl@plane.gmane.org; Fri, 28 Sep 2012 23:02:12 +0200 Original-Received: (qmail 32565 invoked by uid 550); 28 Sep 2012 21:02:05 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 32557 invoked from network); 28 Sep 2012 21:02:05 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=amAmqftSXL2W8VVnHZ+qbTWz95g3wF3+TgGoK3nzC8c=; b=fTo/P63t6IQCkGcPd3Ac1VnAOxY3NE9huYWzlim7uGmazRuICVolM5FbfCzzftvEdw JB9XHmRlIqi6u/3nt3d0A2DpNbvGB3+mzWwbPh8ICftilxnqBLljpNYt0jWn/N4uwECW 36dWdJ6EfVHs6I2bjJ1A7Fe6+tw1ZcbYyU/cgXSeXod9N6uLvimdr4kHm6pPn4hA38cY c2/1TQPv6m9GYpK9uRe5e2VcdvXGvIaj/T+WjVEY2dTIBf1ZQkHaiVXkgM/07slMe/xL CV+lc5CYE5w8J3cR0aynC1FlYZFzpvT7qPAHmyItP71DeYkqxPm74Wga4EvfK4PFT/YB 4Tog== Xref: news.gmane.org gmane.linux.lib.musl.general:2019 Archived-At: --e89a8ff253fe8180d004cac95dd5 Content-Type: text/plain; charset=ISO-8859-1 Hi, Rich wrote about files/threads locking. I'm trying to implement functions funopen() and port it to musl. http://www.openbsd.org/cgi-bin/man.cgi?query=funopen&sektion=3 funopen() function is similar to gnulib's fopencookie() - I found implementation in newlib: http://sourceware.org/newlib/ http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/src/newlib/libc/stdio/funopen.c?rev=1.2&content-type=text/plain&cvsroot=src I cleaned the code and more prepared to work with musl, but I have to use locking from musl... so I need some help in explaining how to use the lock's feature from musl. Rich, is there any chance that this function could be added to musl? It's used in BSD. Thanks for any help, Daniel --e89a8ff253fe8180d004cac95dd5 Content-Type: text/x-csrc; charset=US-ASCII; name="funopen_orig.c" Content-Disposition: attachment; filename="funopen_orig.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h7nr3mrv1 LyogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgQmxha2UKICogUGVybWlzc2lvbiB0byB1c2UsIGNv cHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQogKiBpcyBmcmVlbHkgZ3Jh bnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAqLwoKLyoKRlVO Q1RJT04KPDxmdW5vcGVuPj4sIDw8ZnJvcGVuPj4sIDw8ZndvcGVuPj4tLS1vcGVuIGEgc3RyZWFt IHdpdGggY3VzdG9tIGNhbGxiYWNrcwoKSU5ERVgKCWZ1bm9wZW4KSU5ERVgKCWZyb3BlbgpJTkRF WAoJZndvcGVuCgpBTlNJX1NZTk9QU0lTCgkjaW5jbHVkZSA8c3RkaW8uaD4KCUZJTEUgKmZ1bm9w ZW4oY29uc3Qgdm9pZCAqPFtjb29raWVdPiwKCSAgICAgICAgICAgICAgaW50ICgqPFtyZWFkZm5d PikgKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbiksCgkgICAgICAgICAgICAgIGludCAo Kjxbd3JpdGVmbl0+KSAodm9pZCAqY29va2llLCBjb25zdCBjaGFyICpidWYsIGludCBuKSwKCSAg ICAgICAgICAgICAgZnBvc190ICgqPFtzZWVrZm5dPikgKHZvaWQgKmNvb2tpZSwgZnBvc190IG9m ZiwgaW50IHdoZW5jZSksCgkgICAgICAgICAgICAgIGludCAoKjxbY2xvc2Vmbl0+KSAodm9pZCAq Y29va2llKSk7CglGSUxFICpmcm9wZW4oY29uc3Qgdm9pZCAqPFtjb29raWVdPiwKCSAgICAgICAg ICAgICBpbnQgKCo8W3JlYWRmbl0+KSAodm9pZCAqY29va2llLCBjaGFyICpidWYsIGludCBuKSk7 CglGSUxFICpmd29wZW4oY29uc3Qgdm9pZCAqPFtjb29raWVdPiwKCSAgICAgICAgICAgICBpbnQg KCo8W3dyaXRlZm5dPikgKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbikpOwoK REVTQ1JJUFRJT04KPDxmdW5vcGVuPj4gY3JlYXRlcyBhIDw8RklMRT4+IHN0cmVhbSB3aGVyZSBJ L08gaXMgcGVyZm9ybWVkIHVzaW5nCmN1c3RvbSBjYWxsYmFja3MuICBBdCBsZWFzdCBvbmUgb2Yg PFtyZWFkZm5dPiBhbmQgPFt3cml0ZWZuXT4gbXVzdCBiZQpwcm92aWRlZCwgd2hpY2ggZGV0ZXJt aW5lcyB3aGV0aGVyIHRoZSBzdHJlYW0gYmVoYXZlcyB3aXRoIG1vZGUgPCJyIj4sCjwidyI+LCBv ciA8InIrIj4uCgo8W3JlYWRmbl0+IHNob3VsZCByZXR1cm4gLTEgb24gZmFpbHVyZSwgb3IgZWxz ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzCnJlYWQgKDAgb24gRU9GKS4gIEl0IGlzIHNpbWlsYXIgdG8g PDxyZWFkPj4sIGV4Y2VwdCB0aGF0IDxpbnQ+IHJhdGhlcgp0aGFuIDxzaXplX3Q+IGJvdW5kcyBh IHRyYW5zYWN0aW9uIHNpemUsIGFuZCA8W2Nvb2tpZV0+IHdpbGwgYmUgcGFzc2VkCmFzIHRoZSBm aXJzdCBhcmd1bWVudC4gIEEgTlVMTCA8W3JlYWRmbl0+IG1ha2VzIGF0dGVtcHRzIHRvIHJlYWQg dGhlCnN0cmVhbSBmYWlsLgoKPFt3cml0ZWZuXT4gc2hvdWxkIHJldHVybiAtMSBvbiBmYWlsdXJl LCBvciBlbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMKd3JpdHRlbi4gIEl0IGlzIHNpbWlsYXIgdG8g PDx3cml0ZT4+LCBleGNlcHQgdGhhdCA8aW50PiByYXRoZXIgdGhhbgo8c2l6ZV90PiBib3VuZHMg YSB0cmFuc2FjdGlvbiBzaXplLCBhbmQgPFtjb29raWVdPiB3aWxsIGJlIHBhc3NlZCBhcwp0aGUg Zmlyc3QgYXJndW1lbnQuICBBIE5VTEwgPFt3cml0ZWZuXT4gbWFrZXMgYXR0ZW1wdHMgdG8gd3Jp dGUgdGhlCnN0cmVhbSBmYWlsLgoKPFtzZWVrZm5dPiBzaG91bGQgcmV0dXJuIChmcG9zX3QpLTEg b24gZmFpbHVyZSwgb3IgZWxzZSB0aGUgY3VycmVudApmaWxlIHBvc2l0aW9uLiAgSXQgaXMgc2lt aWxhciB0byA8PGxzZWVrPj4sIGV4Y2VwdCB0aGF0IDxbY29va2llXT4Kd2lsbCBiZSBwYXNzZWQg YXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgQSBOVUxMIDxbc2Vla2ZuXT4gbWFrZXMgdGhlCnN0cmVh bSBiZWhhdmUgc2ltaWxhcmx5IHRvIGEgcGlwZSBpbiByZWxhdGlvbiB0byBzdGRpbyBmdW5jdGlv bnMgdGhhdApyZXF1aXJlIHBvc2l0aW9uaW5nLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVz IGZwb3NfdCBhbmQgb2ZmX3QgYXJlCnRoZSBzYW1lIHR5cGUuCgo8W2Nsb3NlZm5dPiBzaG91bGQg cmV0dXJuIC0xIG9uIGZhaWx1cmUsIG9yIDAgb24gc3VjY2Vzcy4gIEl0IGlzCnNpbWlsYXIgdG8g PDxjbG9zZT4+LCBleGNlcHQgdGhhdCA8W2Nvb2tpZV0+IHdpbGwgYmUgcGFzc2VkIGFzIHRoZQpm aXJzdCBhcmd1bWVudC4gIEEgTlVMTCA8W2Nsb3NlZm5dPiBtZXJlbHkgZmx1c2hlcyBhbGwgZGF0 YSB0aGVuIGxldHMKPDxmY2xvc2U+PiBzdWNjZWVkLiAgQSBmYWlsZWQgY2xvc2Ugd2lsbCBzdGls bCBpbnZhbGlkYXRlIHRoZSBzdHJlYW0uCgpSZWFkIGFuZCB3cml0ZSBJL08gZnVuY3Rpb25zIGFy ZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZwpidWZmZXIgb24gZnVsbHkgYnVmZmVy ZWQgb3IgbGluZSBidWZmZXJlZCBzdHJlYW1zIGJ5IGNhbGxpbmcKPDxzZXR2YnVmPj4uICBUaGV5 IGFyZSBhbHNvIG5vdCByZXF1aXJlZCB0byBjb21wbGV0ZWx5IGZpbGwgb3IgZW1wdHkKdGhlIGJ1 ZmZlci4gIFRoZXkgYXJlIG5vdCwgaG93ZXZlciwgYWxsb3dlZCB0byBjaGFuZ2Ugc3RyZWFtcyBm cm9tCnVuYnVmZmVyZWQgdG8gYnVmZmVyZWQgb3IgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUg bGluZSBidWZmZXJpbmcKZmxhZy4gIFRoZXkgbXVzdCBhbHNvIGJlIHByZXBhcmVkIHRvIGhhdmUg cmVhZCBvciB3cml0ZSBjYWxscyBvY2N1ciBvbgpidWZmZXJzIG90aGVyIHRoYW4gdGhlIG9uZSBt b3N0IHJlY2VudGx5IHNwZWNpZmllZC4KClRoZSBmdW5jdGlvbnMgPDxmcm9wZW4+PiBhbmQgPDxm d29wZW4+PiBhcmUgY29udmVuaWVuY2UgbWFjcm9zIGFyb3VuZAo8PGZ1bm9wZW4+PiB0aGF0IG9u bHkgdXNlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2suCgpSRVRVUk5TClRoZSByZXR1cm4gdmFsdWUg aXMgYW4gb3BlbiBGSUxFIHBvaW50ZXIgb24gc3VjY2Vzcy4gIE9uIGVycm9yLAo8PE5VTEw+PiBp cyByZXR1cm5lZCwgYW5kIDw8ZXJybm8+PiB3aWxsIGJlIHNldCB0byBFSU5WQUwgaWYgYQpmdW5j dGlvbiBwb2ludGVyIGlzIG1pc3NpbmcsIEVOT01FTSBpZiB0aGUgc3RyZWFtIGNhbm5vdCBiZSBj cmVhdGVkLApvciBFTUZJTEUgaWYgdG9vIG1hbnkgc3RyZWFtcyBhcmUgYWxyZWFkeSBvcGVuLgoK UE9SVEFCSUxJVFkKVGhpcyBmdW5jdGlvbiBpcyBhIG5ld2xpYiBleHRlbnNpb24sIGNvcHlpbmcg dGhlIHByb3RvdHlwZSBmcm9tIEJTRC4KSXQgaXMgbm90IHBvcnRhYmxlLiAgU2VlIGFsc28gdGhl IDw8Zm9wZW5jb29raWU+PiBpbnRlcmZhY2UgZnJvbSBMaW51eC4KClN1cHBvcnRpbmcgT1Mgc3Vi cm91dGluZXMgcmVxdWlyZWQ6IDw8c2Jyaz4+LgoqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNs dWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3lzL2xvY2suaD4KI2luY2x1ZGUgImxvY2FsLmgiCgp0 eXBlZGVmIGludCAoKmZ1bnJlYWQpKHZvaWQgKl9jb29raWUsIGNoYXIgKl9idWYsIGludCBfbik7 CnR5cGVkZWYgaW50ICgqZnVud3JpdGUpKHZvaWQgKl9jb29raWUsIGNvbnN0IGNoYXIgKl9idWYs IGludCBfbik7CiNpZmRlZiBfX0xBUkdFNjRfRklMRVMKdHlwZWRlZiBfZnBvczY0X3QgKCpmdW5z ZWVrKSh2b2lkICpfY29va2llLCBfZnBvczY0X3QgX29mZiwgaW50IF93aGVuY2UpOwojZWxzZQp0 eXBlZGVmIGZwb3NfdCAoKmZ1bnNlZWspKHZvaWQgKl9jb29raWUsIGZwb3NfdCBfb2ZmLCBpbnQg X3doZW5jZSk7CiNlbmRpZgp0eXBlZGVmIGludCAoKmZ1bmNsb3NlKSh2b2lkICpfY29va2llKTsK CnR5cGVkZWYgc3RydWN0IGZ1bmNvb2tpZSB7CiAgdm9pZCAqY29va2llOwogIGZ1bnJlYWQgcmVh ZGZuOwogIGZ1bndyaXRlIHdyaXRlZm47CiAgZnVuc2VlayBzZWVrZm47CiAgZnVuY2xvc2UgY2xv c2VmbjsKfSBmdW5jb29raWU7CgpzdGF0aWMgX1JFQURfV1JJVEVfUkVUVVJOX1RZUEUKX0RFRlVO KGZ1bnJlYWRlciwgKHB0ciwgY29va2llLCBidWYsIG4pLAogICAgICAgc3RydWN0IF9yZWVudCAq cHRyIF9BTkQKICAgICAgIHZvaWQgKmNvb2tpZSBfQU5ECiAgICAgICBjaGFyICpidWYgX0FORAog ICAgICAgaW50IG4pCnsKICBpbnQgcmVzdWx0OwogIGZ1bmNvb2tpZSAqYyA9IChmdW5jb29raWUg KikgY29va2llOwogIGVycm5vID0gMDsKICBpZiAoKHJlc3VsdCA9IGMtPnJlYWRmbiAoYy0+Y29v a2llLCBidWYsIG4pKSA8IDAgJiYgZXJybm8pCiAgICBwdHItPl9lcnJubyA9IGVycm5vOwogIHJl dHVybiByZXN1bHQ7Cn0KCnN0YXRpYyBfUkVBRF9XUklURV9SRVRVUk5fVFlQRQpfREVGVU4oZnVu d3JpdGVyLCAocHRyLCBjb29raWUsIGJ1ZiwgbiksCiAgICAgICBzdHJ1Y3QgX3JlZW50ICpwdHIg X0FORAogICAgICAgdm9pZCAqY29va2llIF9BTkQKICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiBfQU5E CiAgICAgICBpbnQgbikKewogIGludCByZXN1bHQ7CiAgZnVuY29va2llICpjID0gKGZ1bmNvb2tp ZSAqKSBjb29raWU7CiAgZXJybm8gPSAwOwogIGlmICgocmVzdWx0ID0gYy0+d3JpdGVmbiAoYy0+ Y29va2llLCBidWYsIG4pKSA8IDAgJiYgZXJybm8pCiAgICBwdHItPl9lcnJubyA9IGVycm5vOwog IHJldHVybiByZXN1bHQ7Cn0KCnN0YXRpYyBfZnBvc190Cl9ERUZVTihmdW5zZWVrZXIsIChwdHIs IGNvb2tpZSwgb2ZmLCB3aGVuY2UpLAogICAgICAgc3RydWN0IF9yZWVudCAqcHRyIF9BTkQKICAg ICAgIHZvaWQgKmNvb2tpZSBfQU5ECiAgICAgICBfZnBvc190IG9mZiBfQU5ECiAgICAgICBpbnQg d2hlbmNlKQp7CiAgZnVuY29va2llICpjID0gKGZ1bmNvb2tpZSAqKSBjb29raWU7CiNpZm5kZWYg X19MQVJHRTY0X0ZJTEVTCiAgZnBvc190IHJlc3VsdDsKICBlcnJubyA9IDA7CiAgaWYgKChyZXN1 bHQgPSBjLT5zZWVrZm4gKGMtPmNvb2tpZSwgKGZwb3NfdCkgb2ZmLCB3aGVuY2UpKSA8IDAgJiYg ZXJybm8pCiAgICBwdHItPl9lcnJubyA9IGVycm5vOwojZWxzZSAvKiBfX0xBUkdFNjRfRklMRVMg Ki8KICBfZnBvczY0X3QgcmVzdWx0OwogIGVycm5vID0gMDsKICBpZiAoKHJlc3VsdCA9IGMtPnNl ZWtmbiAoYy0+Y29va2llLCAoX2Zwb3M2NF90KSBvZmYsIHdoZW5jZSkpIDwgMCAmJiBlcnJubykK ICAgIHB0ci0+X2Vycm5vID0gZXJybm87CiAgZWxzZSBpZiAoKF9mcG9zX3QpcmVzdWx0ICE9IHJl c3VsdCkKICAgIHsKICAgICAgcHRyLT5fZXJybm8gPSBFT1ZFUkZMT1c7CiAgICAgIHJlc3VsdCA9 IC0xOwogICAgfQojZW5kaWYgLyogX19MQVJHRTY0X0ZJTEVTICovCiAgcmV0dXJuIHJlc3VsdDsK fQoKI2lmZGVmIF9fTEFSR0U2NF9GSUxFUwpzdGF0aWMgX2Zwb3M2NF90Cl9ERUZVTihmdW5zZWVr ZXI2NCwgKHB0ciwgY29va2llLCBvZmYsIHdoZW5jZSksCiAgICAgICBzdHJ1Y3QgX3JlZW50ICpw dHIgX0FORAogICAgICAgdm9pZCAqY29va2llIF9BTkQKICAgICAgIF9mcG9zNjRfdCBvZmYgX0FO RAogICAgICAgaW50IHdoZW5jZSkKewogIF9mcG9zNjRfdCByZXN1bHQ7CiAgZnVuY29va2llICpj ID0gKGZ1bmNvb2tpZSAqKSBjb29raWU7CiAgZXJybm8gPSAwOwogIGlmICgocmVzdWx0ID0gYy0+ c2Vla2ZuIChjLT5jb29raWUsIG9mZiwgd2hlbmNlKSkgPCAwICYmIGVycm5vKQogICAgcHRyLT5f ZXJybm8gPSBlcnJubzsKICByZXR1cm4gcmVzdWx0Owp9CiNlbmRpZiAvKiBfX0xBUkdFNjRfRklM RVMgKi8KCnN0YXRpYyBpbnQKX0RFRlVOKGZ1bmNsb3NlciwgKHB0ciwgY29va2llKSwKICAgICAg IHN0cnVjdCBfcmVlbnQgKnB0ciBfQU5ECiAgICAgICB2b2lkICpjb29raWUpCnsKICBpbnQgcmVz dWx0ID0gMDsKICBmdW5jb29raWUgKmMgPSAoZnVuY29va2llICopIGNvb2tpZTsKICBpZiAoYy0+ Y2xvc2VmbikKICAgIHsKICAgICAgZXJybm8gPSAwOwogICAgICBpZiAoKHJlc3VsdCA9IGMtPmNs b3NlZm4gKGMtPmNvb2tpZSkpIDwgMCAmJiBlcnJubykKCXB0ci0+X2Vycm5vID0gZXJybm87CiAg ICB9CiAgX2ZyZWVfciAocHRyLCBjKTsKICByZXR1cm4gcmVzdWx0Owp9CgpGSUxFICoKX0RFRlVO KF9mdW5vcGVuX3IsIChwdHIsIGNvb2tpZSwgcmVhZGZuLCB3cml0ZWZuLCBzZWVrZm4sIGNsb3Nl Zm4pLAogICAgICAgc3RydWN0IF9yZWVudCAqcHRyIF9BTkQKICAgICAgIGNvbnN0IHZvaWQgKmNv b2tpZSBfQU5ECiAgICAgICBmdW5yZWFkIHJlYWRmbiBfQU5ECiAgICAgICBmdW53cml0ZSB3cml0 ZWZuIF9BTkQKICAgICAgIGZ1bnNlZWsgc2Vla2ZuIF9BTkQKICAgICAgIGZ1bmNsb3NlIGNsb3Nl Zm4pCnsKICBGSUxFICpmcDsKICBmdW5jb29raWUgKmM7CgogIGlmICghcmVhZGZuICYmICF3cml0 ZWZuKQogICAgewogICAgICBwdHItPl9lcnJubyA9IEVJTlZBTDsKICAgICAgcmV0dXJuIE5VTEw7 CiAgICB9CiAgaWYgKChmcCA9IF9fc2ZwIChwdHIpKSA9PSBOVUxMKQogICAgcmV0dXJuIE5VTEw7 CiAgaWYgKChjID0gKGZ1bmNvb2tpZSAqKSBfbWFsbG9jX3IgKHB0ciwgc2l6ZW9mICpjKSkgPT0g TlVMTCkKICAgIHsKICAgICAgX19zZnBfbG9ja19hY3F1aXJlICgpOwogICAgICBmcC0+X2ZsYWdz ID0gMDsJCS8qIHJlbGVhc2UgKi8KI2lmbmRlZiBfX1NJTkdMRV9USFJFQURfXwogICAgICBfX2xv Y2tfY2xvc2VfcmVjdXJzaXZlIChmcC0+X2xvY2spOwojZW5kaWYKICAgICAgX19zZnBfbG9ja19y ZWxlYXNlICgpOwogICAgICByZXR1cm4gTlVMTDsKICAgIH0KCiAgX2Zsb2NrZmlsZSAoZnApOwog IGZwLT5fZmlsZSA9IC0xOwogIGMtPmNvb2tpZSA9ICh2b2lkICopIGNvb2tpZTsgLyogY2FzdCBh d2F5IGNvbnN0ICovCiAgZnAtPl9jb29raWUgPSBjOwogIGlmIChyZWFkZm4pCiAgICB7CiAgICAg IGMtPnJlYWRmbiA9IHJlYWRmbjsKICAgICAgZnAtPl9yZWFkID0gZnVucmVhZGVyOwogICAgICBp ZiAod3JpdGVmbikKCXsKCSAgZnAtPl9mbGFncyA9IF9fU1JXOwoJICBjLT53cml0ZWZuID0gd3Jp dGVmbjsKCSAgZnAtPl93cml0ZSA9IGZ1bndyaXRlcjsKCX0KICAgICAgZWxzZQoJewoJICBmcC0+ X2ZsYWdzID0gX19TUkQ7CgkgIGMtPndyaXRlZm4gPSBOVUxMOwoJICBmcC0+X3dyaXRlID0gTlVM TDsKCX0KICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGZwLT5fZmxhZ3MgPSBfX1NXUjsKICAgICAg Yy0+d3JpdGVmbiA9IHdyaXRlZm47CiAgICAgIGZwLT5fd3JpdGUgPSBmdW53cml0ZXI7CiAgICAg IGMtPnJlYWRmbiA9IE5VTEw7CiAgICAgIGZwLT5fcmVhZCA9IE5VTEw7CiAgICB9CiAgYy0+c2Vl a2ZuID0gc2Vla2ZuOwogIGZwLT5fc2VlayA9IHNlZWtmbiA/IGZ1bnNlZWtlciA6IE5VTEw7CiNp ZmRlZiBfX0xBUkdFNjRfRklMRVMKICBmcC0+X3NlZWs2NCA9IHNlZWtmbiA/IGZ1bnNlZWtlcjY0 IDogTlVMTDsKICBmcC0+X2ZsYWdzIHw9IF9fU0w2NDsKI2VuZGlmCiAgYy0+Y2xvc2VmbiA9IGNs b3NlZm47CiAgZnAtPl9jbG9zZSA9IGZ1bmNsb3NlcjsKICBfZnVubG9ja2ZpbGUgKGZwKTsKICBy ZXR1cm4gZnA7Cn0KCiNpZm5kZWYgX1JFRU5UX09OTFkKRklMRSAqCl9ERUZVTihmdW5vcGVuLCAo Y29va2llLCByZWFkZm4sIHdyaXRlZm4sIHNlZWtmbiwgY2xvc2VmbiksCiAgICAgICBjb25zdCB2 b2lkICpjb29raWUgX0FORAogICAgICAgZnVucmVhZCByZWFkZm4gX0FORAogICAgICAgZnVud3Jp dGUgd3JpdGVmbiBfQU5ECiAgICAgICBmdW5zZWVrIHNlZWtmbiBfQU5ECiAgICAgICBmdW5jbG9z ZSBjbG9zZWZuKQp7CiAgcmV0dXJuIF9mdW5vcGVuX3IgKF9SRUVOVCwgY29va2llLCByZWFkZm4s IHdyaXRlZm4sIHNlZWtmbiwgY2xvc2Vmbik7Cn0KI2VuZGlmIC8qICFfUkVFTlRfT05MWSAqLwo= --e89a8ff253fe8180d004cac95dd5 Content-Type: text/x-csrc; charset=US-ASCII; name="funopen.c" Content-Disposition: attachment; filename="funopen.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h7nrv4yi1 LyogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgQmxha2UKICogUGVybWlzc2lvbiB0byB1c2UsIGNv cHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQogKiBpcyBmcmVlbHkgZ3Jh bnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAqLwoKLyoKRlVO Q1RJT04KPDxmdW5vcGVuPj4sIDw8ZnJvcGVuPj4sIDw8ZndvcGVuPj4tLS1vcGVuIGEgc3RyZWFt IHdpdGggY3VzdG9tIGNhbGxiYWNrcwoKSU5ERVgKCWZ1bm9wZW4KSU5ERVgKCWZyb3BlbgpJTkRF WAoJZndvcGVuCgpBTlNJX1NZTk9QU0lTCgkjaW5jbHVkZSA8c3RkaW8uaD4KCUZJTEUgKmZ1bm9w ZW4oY29uc3Qgdm9pZCAqPFtjb29raWVdPiwKCSAgICAgICAgICAgICAgaW50ICgqPFtyZWFkZm5d PikgKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbiksCgkgICAgICAgICAgICAgIGludCAo Kjxbd3JpdGVmbl0+KSAodm9pZCAqY29va2llLCBjb25zdCBjaGFyICpidWYsIGludCBuKSwKCSAg ICAgICAgICAgICAgZnBvc190ICgqPFtzZWVrZm5dPikgKHZvaWQgKmNvb2tpZSwgZnBvc190IG9m ZiwgaW50IHdoZW5jZSksCgkgICAgICAgICAgICAgIGludCAoKjxbY2xvc2Vmbl0+KSAodm9pZCAq Y29va2llKSk7CglGSUxFICpmcm9wZW4oY29uc3Qgdm9pZCAqPFtjb29raWVdPiwKCSAgICAgICAg ICAgICBpbnQgKCo8W3JlYWRmbl0+KSAodm9pZCAqY29va2llLCBjaGFyICpidWYsIGludCBuKSk7 CglGSUxFICpmd29wZW4oY29uc3Qgdm9pZCAqPFtjb29raWVdPiwKCSAgICAgICAgICAgICBpbnQg KCo8W3dyaXRlZm5dPikgKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbikpOwoK REVTQ1JJUFRJT04KPDxmdW5vcGVuPj4gY3JlYXRlcyBhIDw8RklMRT4+IHN0cmVhbSB3aGVyZSBJ L08gaXMgcGVyZm9ybWVkIHVzaW5nCmN1c3RvbSBjYWxsYmFja3MuICBBdCBsZWFzdCBvbmUgb2Yg PFtyZWFkZm5dPiBhbmQgPFt3cml0ZWZuXT4gbXVzdCBiZQpwcm92aWRlZCwgd2hpY2ggZGV0ZXJt aW5lcyB3aGV0aGVyIHRoZSBzdHJlYW0gYmVoYXZlcyB3aXRoIG1vZGUgPCJyIj4sCjwidyI+LCBv ciA8InIrIj4uCgo8W3JlYWRmbl0+IHNob3VsZCByZXR1cm4gLTEgb24gZmFpbHVyZSwgb3IgZWxz ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzCnJlYWQgKDAgb24gRU9GKS4gIEl0IGlzIHNpbWlsYXIgdG8g PDxyZWFkPj4sIGV4Y2VwdCB0aGF0IDxpbnQ+IHJhdGhlcgp0aGFuIDxzaXplX3Q+IGJvdW5kcyBh IHRyYW5zYWN0aW9uIHNpemUsIGFuZCA8W2Nvb2tpZV0+IHdpbGwgYmUgcGFzc2VkCmFzIHRoZSBm aXJzdCBhcmd1bWVudC4gIEEgTlVMTCA8W3JlYWRmbl0+IG1ha2VzIGF0dGVtcHRzIHRvIHJlYWQg dGhlCnN0cmVhbSBmYWlsLgoKPFt3cml0ZWZuXT4gc2hvdWxkIHJldHVybiAtMSBvbiBmYWlsdXJl LCBvciBlbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMKd3JpdHRlbi4gIEl0IGlzIHNpbWlsYXIgdG8g PDx3cml0ZT4+LCBleGNlcHQgdGhhdCA8aW50PiByYXRoZXIgdGhhbgo8c2l6ZV90PiBib3VuZHMg YSB0cmFuc2FjdGlvbiBzaXplLCBhbmQgPFtjb29raWVdPiB3aWxsIGJlIHBhc3NlZCBhcwp0aGUg Zmlyc3QgYXJndW1lbnQuICBBIE5VTEwgPFt3cml0ZWZuXT4gbWFrZXMgYXR0ZW1wdHMgdG8gd3Jp dGUgdGhlCnN0cmVhbSBmYWlsLgoKPFtzZWVrZm5dPiBzaG91bGQgcmV0dXJuIChmcG9zX3QpLTEg b24gZmFpbHVyZSwgb3IgZWxzZSB0aGUgY3VycmVudApmaWxlIHBvc2l0aW9uLiAgSXQgaXMgc2lt aWxhciB0byA8PGxzZWVrPj4sIGV4Y2VwdCB0aGF0IDxbY29va2llXT4Kd2lsbCBiZSBwYXNzZWQg YXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgQSBOVUxMIDxbc2Vla2ZuXT4gbWFrZXMgdGhlCnN0cmVh bSBiZWhhdmUgc2ltaWxhcmx5IHRvIGEgcGlwZSBpbiByZWxhdGlvbiB0byBzdGRpbyBmdW5jdGlv bnMgdGhhdApyZXF1aXJlIHBvc2l0aW9uaW5nLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVz IGZwb3NfdCBhbmQgb2ZmX3QgYXJlCnRoZSBzYW1lIHR5cGUuCgo8W2Nsb3NlZm5dPiBzaG91bGQg cmV0dXJuIC0xIG9uIGZhaWx1cmUsIG9yIDAgb24gc3VjY2Vzcy4gIEl0IGlzCnNpbWlsYXIgdG8g PDxjbG9zZT4+LCBleGNlcHQgdGhhdCA8W2Nvb2tpZV0+IHdpbGwgYmUgcGFzc2VkIGFzIHRoZQpm aXJzdCBhcmd1bWVudC4gIEEgTlVMTCA8W2Nsb3NlZm5dPiBtZXJlbHkgZmx1c2hlcyBhbGwgZGF0 YSB0aGVuIGxldHMKPDxmY2xvc2U+PiBzdWNjZWVkLiAgQSBmYWlsZWQgY2xvc2Ugd2lsbCBzdGls bCBpbnZhbGlkYXRlIHRoZSBzdHJlYW0uCgpSZWFkIGFuZCB3cml0ZSBJL08gZnVuY3Rpb25zIGFy ZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZwpidWZmZXIgb24gZnVsbHkgYnVmZmVy ZWQgb3IgbGluZSBidWZmZXJlZCBzdHJlYW1zIGJ5IGNhbGxpbmcKPDxzZXR2YnVmPj4uICBUaGV5 IGFyZSBhbHNvIG5vdCByZXF1aXJlZCB0byBjb21wbGV0ZWx5IGZpbGwgb3IgZW1wdHkKdGhlIGJ1 ZmZlci4gIFRoZXkgYXJlIG5vdCwgaG93ZXZlciwgYWxsb3dlZCB0byBjaGFuZ2Ugc3RyZWFtcyBm cm9tCnVuYnVmZmVyZWQgdG8gYnVmZmVyZWQgb3IgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUg bGluZSBidWZmZXJpbmcKZmxhZy4gIFRoZXkgbXVzdCBhbHNvIGJlIHByZXBhcmVkIHRvIGhhdmUg cmVhZCBvciB3cml0ZSBjYWxscyBvY2N1ciBvbgpidWZmZXJzIG90aGVyIHRoYW4gdGhlIG9uZSBt b3N0IHJlY2VudGx5IHNwZWNpZmllZC4KClRoZSBmdW5jdGlvbnMgPDxmcm9wZW4+PiBhbmQgPDxm d29wZW4+PiBhcmUgY29udmVuaWVuY2UgbWFjcm9zIGFyb3VuZAo8PGZ1bm9wZW4+PiB0aGF0IG9u bHkgdXNlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2suCgpSRVRVUk5TClRoZSByZXR1cm4gdmFsdWUg aXMgYW4gb3BlbiBGSUxFIHBvaW50ZXIgb24gc3VjY2Vzcy4gIE9uIGVycm9yLAo8PE5VTEw+PiBp cyByZXR1cm5lZCwgYW5kIDw8ZXJybm8+PiB3aWxsIGJlIHNldCB0byBFSU5WQUwgaWYgYQpmdW5j dGlvbiBwb2ludGVyIGlzIG1pc3NpbmcsIEVOT01FTSBpZiB0aGUgc3RyZWFtIGNhbm5vdCBiZSBj cmVhdGVkLApvciBFTUZJTEUgaWYgdG9vIG1hbnkgc3RyZWFtcyBhcmUgYWxyZWFkeSBvcGVuLgoK UE9SVEFCSUxJVFkKVGhpcyBmdW5jdGlvbiBpcyBhIG5ld2xpYiBleHRlbnNpb24sIGNvcHlpbmcg dGhlIHByb3RvdHlwZSBmcm9tIEJTRC4KSXQgaXMgbm90IHBvcnRhYmxlLiAgU2VlIGFsc28gdGhl IDw8Zm9wZW5jb29raWU+PiBpbnRlcmZhY2UgZnJvbSBMaW51eC4KClN1cHBvcnRpbmcgT1Mgc3Vi cm91dGluZXMgcmVxdWlyZWQ6IDw8c2Jyaz4+LgoqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNs dWRlIDxlcnJuby5oPgovLyNpbmNsdWRlICJsaWJjLmgiIC8qIG11c2wgTE9DSy9VTkxPQ0sgKi8K LyogI2luY2x1ZGUgPHN5cy9sb2NrLmg+ICovCi8qICNpbmNsdWRlICJsb2NhbC5oIiAqLwoKI2Rl ZmluZSBfX1NSRAkweDAwMDQJCS8qIE9LIHRvIHJlYWQgKi8KI2RlZmluZSBfX1NXUgkweDAwMDgJ CS8qIE9LIHRvIHdyaXRlICovCiNkZWZpbmUgX19TUlcJMHgwMDEwCQkvKiBvcGVuIGZvciByZWFk aW5nICYgd3JpdGluZyAqLwojZGVmaW5lIF9fU0w2NAkweDgwMDAJCS8qIGlzIDY0LWJpdCBvZmZz ZXQgbGFyZ2UgZmlsZSAqLwoKdHlwZWRlZiBpbnQgKCpmdW5yZWFkKSh2b2lkICpfY29va2llLCBj aGFyICpfYnVmLCBpbnQgX24pOwp0eXBlZGVmIGludCAoKmZ1bndyaXRlKSh2b2lkICpfY29va2ll LCBjb25zdCBjaGFyICpfYnVmLCBpbnQgX24pOwojaWZkZWYgX19MQVJHRTY0X0ZJTEVTCnR5cGVk ZWYgb2ZmNjRfdCAoKmZ1bnNlZWspKHZvaWQgKl9jb29raWUsIG9mZjY0X3QgX29mZiwgaW50IF93 aGVuY2UpOwojZWxzZQp0eXBlZGVmIG9mZl90ICgqZnVuc2Vlaykodm9pZCAqX2Nvb2tpZSwgb2Zm X3QgX29mZiwgaW50IF93aGVuY2UpOwojZW5kaWYKdHlwZWRlZiBpbnQgKCpmdW5jbG9zZSkodm9p ZCAqX2Nvb2tpZSk7Cgp0eXBlZGVmIHN0cnVjdCBmdW5jb29raWUgewogIHZvaWQgKmNvb2tpZTsK ICBmdW5yZWFkIHJlYWRmbjsKICBmdW53cml0ZSB3cml0ZWZuOwogIGZ1bnNlZWsgc2Vla2ZuOwog IGZ1bmNsb3NlIGNsb3NlZm47Cn0gZnVuY29va2llOwoKc3RhdGljIGludCBmdW5yZWFkZXIodm9p ZCAqY29va2llLCBjaGFyICpidWYsIGludCBuKSwKewoJaW50IHJlc3VsdDsKCWZ1bmNvb2tpZSAq YyA9IChmdW5jb29raWUgKikgY29va2llOwoJZXJybm8gPSAwOwoJaWYgKChyZXN1bHQgPSBjLT5y ZWFkZm4gKGMtPmNvb2tpZSwgYnVmLCBuKSkgPCAwICYmIGVycm5vKQoJCXJldHVybiAwOwoJcmV0 dXJuIHJlc3VsdDsKfQoKc3RhdGljIGludCBmdW53cml0ZXIodm9pZCAqY29va2llLCBjb25zdCBj aGFyICpidWYsIGludCBuKQp7CglpbnQgcmVzdWx0OwoJZnVuY29va2llICpjID0gKGZ1bmNvb2tp ZSAqKSBjb29raWU7CgllcnJubyA9IDA7CglpZiAoKHJlc3VsdCA9IGMtPndyaXRlZm4gKGMtPmNv b2tpZSwgYnVmLCBuKSkgPCAwICYmIGVycm5vKQoJCXJldHVybiAwOwoJcmV0dXJuIHJlc3VsdDsK fQoKc3RhdGljIG9mZl90CmZ1bnNlZWtlcih2b2lkICpjb29raWUsIG9mZl90IG9mZiwgaW50IHdo ZW5jZSkKewoJZnVuY29va2llICpjID0gKGZ1bmNvb2tpZSAqKSBjb29raWU7CiNpZm5kZWYgX19M QVJHRTY0X0ZJTEVTCglvZmY2NF90IHJlc3VsdDsKCWVycm5vID0gMDsKCWlmICgocmVzdWx0ID0g Yy0+c2Vla2ZuIChjLT5jb29raWUsIChvZmZfdCkgb2ZmLCB3aGVuY2UpKSA8IDAgJiYgZXJybm8p CgkJcmV0dXJuIDA7CiNlbHNlIC8qIF9fTEFSR0U2NF9GSUxFUyAqLwoJb2ZmNjRfdCByZXN1bHQ7 CgllcnJubyA9IDA7CglpZiAoKHJlc3VsdCA9IGMtPnNlZWtmbiAoYy0+Y29va2llLCAob2ZmNjRf dCkgb2ZmLCB3aGVuY2UpKSA8IDAgJiYgZXJybm8pCgkJcmV0dXJuIDA7CgllbHNlIGlmICgob2Zm X3QpcmVzdWx0ICE9IHJlc3VsdCkgewoJCWVycm5vID0gRU9WRVJGTE9XOwoJCXJlc3VsdCA9IC0x OwoJfQojZW5kaWYgLyogX19MQVJHRTY0X0ZJTEVTICovCglyZXR1cm4gcmVzdWx0Owp9CgojaWZk ZWYgX19MQVJHRTY0X0ZJTEVTCnN0YXRpYyBvZmY2NF90CmZ1bnNlZWtlcjY0KHZvaWQgKmNvb2tp ZSwgb2ZmNjRfdCBvZmYsIGludCB3aGVuY2UpCnsKCW9mZjY0X3QgcmVzdWx0OwoJZnVuY29va2ll ICpjID0gKGZ1bmNvb2tpZSAqKSBjb29raWU7CgllcnJubyA9IDA7CglpZiAoKHJlc3VsdCA9IGMt PnNlZWtmbiAoYy0+Y29va2llLCBvZmYsIHdoZW5jZSkpIDwgMCAmJiBlcnJubykKCQlyZXR1cm4g MDsKCXJldHVybiByZXN1bHQ7Cn0KI2VuZGlmIC8qIF9fTEFSR0U2NF9GSUxFUyAqLwoKc3RhdGlj IGludCBmdW5jbG9zZXIodm9pZCAqY29va2llKQp7CglpbnQgcmVzdWx0ID0gMDsKCWZ1bmNvb2tp ZSAqYyA9IChmdW5jb29raWUgKikgY29va2llOwoJaWYgKGMtPmNsb3NlZm4pIHsKCQllcnJubyA9 IDA7CgkJaWYgKChyZXN1bHQgPSBjLT5jbG9zZWZuIChjLT5jb29raWUpKSA8IDAgJiYgZXJybm8p CgkJCXJldHVybiAwOwoJfQovKiBGSVhNRTogPz8JX2ZyZWVfciAocHRyLCBjKTsgKi8KCXJldHVy biByZXN1bHQ7Cn0KCkZJTEUgKmZ1bm9wZW4oY29uc3Qgdm9pZCAqY29va2llLCBmdW5yZWFkIHJl YWRmbiwgZnVud3JpdGUgd3JpdGVmbiwKCWZ1bnNlZWsgc2Vla2ZuLCBmdW5jbG9zZSBjbG9zZWZu KQp7CglGSUxFICpmcDsKCWZ1bmNvb2tpZSAqYzsKCglpZiAoIXJlYWRmbiAmJiAhd3JpdGVmbikg ewoJCWVycm5vID0gRUlOVkFMOwoJCXJldHVybiBOVUxMOwoJfQovKiBGSVhNRToKCWlmICgoZnAg PSBfX3NmcCAocHRyKSkgPT0gTlVMTCkKCQlyZXR1cm4gTlVMTDsKKi8KCWlmICgoYyA9IChmdW5j b29raWUgKikgbWFsbG9jKHNpemVvZiAqYykpID09IE5VTEwpIHsKCQlfX3NmcF9sb2NrX2FjcXVp cmUgKCk7CgkJZnAtPl9mbGFncyA9IDA7CQkvKiByZWxlYXNlICovCiNpZm5kZWYgX19TSU5HTEVf VEhSRUFEX18KCQlfX2xvY2tfY2xvc2VfcmVjdXJzaXZlIChmcC0+X2xvY2spOwojZW5kaWYKCQlf X3NmcF9sb2NrX3JlbGVhc2UgKCk7CgkJcmV0dXJuIE5VTEw7Cgl9CgoJZmxvY2tmaWxlIChmcCk7 IC8qIGZsb2NrZmlsZSBmcm9tIG11c2wgLSBzdGRpby5oICovCglmcC0+X2ZpbGUgPSAtMTsKCWMt PmNvb2tpZSA9ICh2b2lkICopIGNvb2tpZTsgLyogY2FzdCBhd2F5IGNvbnN0ICovCglmcC0+X2Nv b2tpZSA9IGM7CglpZiAocmVhZGZuKSB7CgkJYy0+cmVhZGZuID0gcmVhZGZuOwoJCWZwLT5fcmVh ZCA9IGZ1bnJlYWRlcjsKCQlpZiAod3JpdGVmbikgewoJCQlmcC0+X2ZsYWdzID0gX19TUlc7CgkJ CWMtPndyaXRlZm4gPSB3cml0ZWZuOwoJCQlmcC0+X3dyaXRlID0gZnVud3JpdGVyOwoJCX0KCQll bHNlIHsKCQkJZnAtPl9mbGFncyA9IF9fU1JEOwoJCQljLT53cml0ZWZuID0gTlVMTDsKCQkJZnAt Pl93cml0ZSA9IE5VTEw7CgkJfQoJfQoJZWxzZSB7CgkJZnAtPl9mbGFncyA9IF9fU1dSOwoJCWMt PndyaXRlZm4gPSB3cml0ZWZuOwoJCWZwLT5fd3JpdGUgPSBmdW53cml0ZXI7CgkJYy0+cmVhZGZu ID0gTlVMTDsKCQlmcC0+X3JlYWQgPSBOVUxMOwoJfQoJYy0+c2Vla2ZuID0gc2Vla2ZuOwoJZnAt Pl9zZWVrID0gc2Vla2ZuID8gZnVuc2Vla2VyIDogTlVMTDsKI2lmZGVmIF9fTEFSR0U2NF9GSUxF UwoJZnAtPl9zZWVrNjQgPSBzZWVrZm4gPyBmdW5zZWVrZXI2NCA6IE5VTEw7CglmcC0+X2ZsYWdz IHw9IF9fU0w2NDsKI2VuZGlmCgljLT5jbG9zZWZuID0gY2xvc2VmbjsKCWZwLT5fY2xvc2UgPSBm dW5jbG9zZXI7CglmdW5sb2NrZmlsZSAoZnApOyAvKiBmdW5sb2NrZmlsZSBmcm9tIG11c2wgLSBz dGRpby5oICovCglyZXR1cm4gZnA7Cn0K --e89a8ff253fe8180d004cac95dd5--