Commit fa968ac3 authored by Guido van Rossum's avatar Guido van Rossum

Patches by Jack Jansen: new type OptionalInBuffer allows

passing either a string/input buffer or None.
parent 8bd73827
...@@ -108,6 +108,14 @@ class OutputOnlyBufferMixIn(OutputOnlyMixIn): ...@@ -108,6 +108,14 @@ class OutputOnlyBufferMixIn(OutputOnlyMixIn):
def declareInputBuffer(self, name): def declareInputBuffer(self, name):
pass pass
class OptionalInputBufferMixIn:
"""Add to input buffers if the buffer may be omitted: pass None in Python
and the C code will get a NULL pointer and zero size"""
def getargsFormat(self):
return "z#"
class FixedInputBufferType(InputOnlyBufferMixIn, FixedInputOutputBufferType): class FixedInputBufferType(InputOnlyBufferMixIn, FixedInputOutputBufferType):
...@@ -119,6 +127,8 @@ class FixedInputBufferType(InputOnlyBufferMixIn, FixedInputOutputBufferType): ...@@ -119,6 +127,8 @@ class FixedInputBufferType(InputOnlyBufferMixIn, FixedInputOutputBufferType):
def passInput(self, name): def passInput(self, name):
return "%s__in__" % name return "%s__in__" % name
class OptionalFixedInputBufferType(OptionalInputBufferMixIn, FixedInputBufferType):
pass
class FixedOutputBufferType(OutputOnlyBufferMixIn, FixedInputOutputBufferType): class FixedOutputBufferType(OutputOnlyBufferMixIn, FixedInputOutputBufferType):
...@@ -147,7 +157,9 @@ class VarInputBufferType(FixedInputBufferType): ...@@ -147,7 +157,9 @@ class VarInputBufferType(FixedInputBufferType):
def passInput(self, name): def passInput(self, name):
return "%s__in__, %s__len__" % (name, name) return "%s__in__, %s__len__" % (name, name)
class OptionalVarInputBufferType(OptionalInputBufferMixIn, VarInputBufferType):
pass
# ----- PART 2: Structure buffers ----- # ----- PART 2: Structure buffers -----
......
...@@ -84,6 +84,7 @@ OSStatus = OSErrType("OSStatus", 'l') ...@@ -84,6 +84,7 @@ OSStatus = OSErrType("OSStatus", 'l')
# Various buffer types # Various buffer types
InBuffer = VarInputBufferType('char', 'long', 'l') # (buf, len) InBuffer = VarInputBufferType('char', 'long', 'l') # (buf, len)
OptionalInBuffer = OptionalVarInputBufferType('char', 'long', 'l') # (buf, len)
InOutBuffer = HeapInputOutputBufferType('char', 'long', 'l') # (inbuf, outbuf, len) InOutBuffer = HeapInputOutputBufferType('char', 'long', 'l') # (inbuf, outbuf, len)
VarInOutBuffer = VarHeapInputOutputBufferType('char', 'long', 'l') # (inbuf, outbuf, &len) VarInOutBuffer = VarHeapInputOutputBufferType('char', 'long', 'l') # (inbuf, outbuf, &len)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment