Mercurial > projects > dwt-linux
comparison dwt/browser/InputStream.d @ 348:9a4d7706df52
Test Update to fix linux XPCOM interface issues
author | John Reimer <terminal.node@gmail.com> |
---|---|
date | Fri, 31 Oct 2008 21:46:44 -0700 |
parents | 2e591eb01162 |
children |
comparison
equal
deleted
inserted
replaced
347:ff6dd48f5248 | 348:9a4d7706df52 |
---|---|
30 int index = 0; | 30 int index = 0; |
31 | 31 |
32 this (byte[] buffer) { | 32 this (byte[] buffer) { |
33 this.buffer = buffer; | 33 this.buffer = buffer; |
34 index = 0; | 34 index = 0; |
35 //createCOMInterfaces (); | |
36 } | 35 } |
37 | 36 |
37 extern(System) | |
38 nsrefcnt AddRef () { | 38 nsrefcnt AddRef () { |
39 refCount++; | 39 refCount++; |
40 return refCount; | 40 return refCount; |
41 } | 41 } |
42 /+ | |
43 void createCOMInterfaces () { | |
44 /* Create each of the interfaces that this object implements */ | |
45 inputStream = new XPCOMObject (new int[] {2, 0, 0, 0, 1, 3, 4, 1}) { | |
46 public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);} | |
47 public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();} | |
48 public int /*long*/ method2 (int /*long*/[] args) {return Release ();} | |
49 public int /*long*/ method3 (int /*long*/[] args) {return Close ();} | |
50 public int /*long*/ method4 (int /*long*/[] args) {return Available (args[0]);} | |
51 public int /*long*/ method5 (int /*long*/[] args) {return Read (args[0], (int)/*64*/args[1], args[2]);} | |
52 public int /*long*/ method6 (int /*long*/[] args) {return ReadSegments (args[0], args[1], (int)/*64*/args[2], args[3]);} | |
53 public int /*long*/ method7 (int /*long*/[] args) {return IsNonBlocking (args[0]);} | |
54 }; | |
55 } | |
56 | 42 |
57 void disposeCOMInterfaces () { | 43 extern(System) |
58 if (inputStream !is null) { | |
59 inputStream.dispose (); | |
60 inputStream = null; | |
61 } | |
62 } | |
63 | |
64 int /*long*/ getAddress () { | |
65 return inputStream.getAddress (); | |
66 } | |
67 +/ | |
68 nsresult QueryInterface (nsID* riid, void** ppvObject) { | 44 nsresult QueryInterface (nsID* riid, void** ppvObject) { |
69 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; | 45 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; |
70 //nsID guid = new nsID (); | 46 //nsID guid = new nsID (); |
71 //XPCOM.memmove (guid, riid, nsID.sizeof); | 47 //XPCOM.memmove (guid, riid, nsID.sizeof); |
72 | 48 |
81 return XPCOM.NS_OK; | 57 return XPCOM.NS_OK; |
82 } | 58 } |
83 *ppvObject = null; | 59 *ppvObject = null; |
84 return XPCOM.NS_ERROR_NO_INTERFACE; | 60 return XPCOM.NS_ERROR_NO_INTERFACE; |
85 } | 61 } |
86 | 62 |
63 extern(System) | |
87 nsrefcnt Release () { | 64 nsrefcnt Release () { |
88 refCount--; | 65 refCount--; |
89 //if (refCount is 0) disposeCOMInterfaces (); | 66 //if (refCount is 0) disposeCOMInterfaces (); |
90 return refCount; | 67 return refCount; |
91 } | 68 } |
92 | 69 |
93 /* nsIInputStream implementation */ | 70 /* nsIInputStream implementation */ |
94 | 71 |
72 extern(System) | |
95 nsresult Close () { | 73 nsresult Close () { |
96 buffer = null; | 74 buffer = null; |
97 index = 0; | 75 index = 0; |
98 return XPCOM.NS_OK; | 76 return XPCOM.NS_OK; |
99 } | 77 } |
100 | 78 |
79 extern(System) | |
101 nsresult Available (PRUint32* _retval) { | 80 nsresult Available (PRUint32* _retval) { |
102 PRUint32 available = buffer is null ? 0 : buffer.length - index; | 81 PRUint32 available = buffer is null ? 0 : buffer.length - index; |
103 *_retval = available; | 82 *_retval = available; |
104 //XPCOM.memmove (_retval, new int[] {available}, 4); | 83 //XPCOM.memmove (_retval, new int[] {available}, 4); |
105 return XPCOM.NS_OK; | 84 return XPCOM.NS_OK; |
106 } | 85 } |
107 | 86 |
87 extern(System) | |
108 nsresult Read(byte* aBuf, PRUint32 aCount, PRUint32* _retval) { | 88 nsresult Read(byte* aBuf, PRUint32 aCount, PRUint32* _retval) { |
109 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index); | 89 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index); |
110 if (aBuf is null) | 90 if (aBuf is null) |
111 assert(0); | 91 assert(0); |
112 if (max > 0) { | 92 if (max > 0) { |
118 } | 98 } |
119 *_retval = max; | 99 *_retval = max; |
120 return XPCOM.NS_OK; | 100 return XPCOM.NS_OK; |
121 } | 101 } |
122 | 102 |
103 extern(System) | |
123 nsresult ReadSegments (nsWriteSegmentFun aWriter, void* aClosure, PRUint32 aCount, PRUint32* _retval) { | 104 nsresult ReadSegments (nsWriteSegmentFun aWriter, void* aClosure, PRUint32 aCount, PRUint32* _retval) { |
124 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index); | 105 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index); |
125 PRUint32 cnt = max; | 106 PRUint32 cnt = max; |
126 while (cnt > 0) { | 107 while (cnt > 0) { |
127 PRUint32 aWriteCount; | 108 PRUint32 aWriteCount; |
133 //XPCOM.memmove (_retval, new int[] {max - cnt}, 4); | 114 //XPCOM.memmove (_retval, new int[] {max - cnt}, 4); |
134 *_retval = (max - cnt); | 115 *_retval = (max - cnt); |
135 return XPCOM.NS_OK; | 116 return XPCOM.NS_OK; |
136 } | 117 } |
137 | 118 |
119 extern(System) | |
138 nsresult IsNonBlocking (PRBool* _retval) { | 120 nsresult IsNonBlocking (PRBool* _retval) { |
139 /* blocking */ | 121 /* blocking */ |
140 *_retval = 0; | 122 *_retval = 0; |
141 return XPCOM.NS_OK; | 123 return XPCOM.NS_OK; |
142 } | 124 } |