@@ -198,6 +198,15 @@ type AVCRC = uint32
198198// Binary representation of a UUID per IETF RFC 4122.
199199type AVUUID = [16 ]uint8
200200
201+ // cstrPtr returns the underlying C char pointer from a CStr, or nil if s is nil.
202+ // This helper simplifies nil-safe access to CStr pointers in CGO calls.
203+ func cstrPtr (s * CStr ) * C.char {
204+ if s == nil {
205+ return nil
206+ }
207+ return s .ptr
208+ }
209+
201210// --- Manual UUID function wrappers (arrays need pointer conversion in CGO) ---
202211
203212// AVUuidParse parses a string representation of a UUID formatted according to IETF RFC 4122
@@ -210,11 +219,7 @@ type AVUUID = [16]uint8
210219// @param[out] uu AVUUID
211220// @return A non-zero value in case of an error.
212221func AVUuidParse (in * CStr , uu * AVUUID ) (int , error ) {
213- var tmpin * C.char
214- if in != nil {
215- tmpin = in .ptr
216- }
217- ret := C .av_uuid_parse (tmpin , (* C .uint8_t )(unsafe .Pointer (& uu [0 ])))
222+ ret := C .av_uuid_parse (cstrPtr (in ), (* C .uint8_t )(unsafe .Pointer (& uu [0 ])))
218223 return int (ret ), WrapErr (int (ret ))
219224}
220225
@@ -228,11 +233,7 @@ func AVUuidParse(in *CStr, uu *AVUUID) (int, error) {
228233// @param[out] uu AVUUID
229234// @return A non-zero value in case of an error.
230235func AVUuidUrnParse (in * CStr , uu * AVUUID ) (int , error ) {
231- var tmpin * C.char
232- if in != nil {
233- tmpin = in .ptr
234- }
235- ret := C .av_uuid_urn_parse (tmpin , (* C .uint8_t )(unsafe .Pointer (& uu [0 ])))
236+ ret := C .av_uuid_urn_parse (cstrPtr (in ), (* C .uint8_t )(unsafe .Pointer (& uu [0 ])))
236237 return int (ret ), WrapErr (int (ret ))
237238}
238239
@@ -246,15 +247,7 @@ func AVUuidUrnParse(in *CStr, uu *AVUUID) (int, error) {
246247// @param[out] uu AVUUID
247248// @return A non-zero value in case of an error.
248249func AVUuidParseRange (inStart * CStr , inEnd * CStr , uu * AVUUID ) (int , error ) {
249- var tmpinStart * C.char
250- if inStart != nil {
251- tmpinStart = inStart .ptr
252- }
253- var tmpinEnd * C.char
254- if inEnd != nil {
255- tmpinEnd = inEnd .ptr
256- }
257- ret := C .av_uuid_parse_range (tmpinStart , tmpinEnd , (* C .uint8_t )(unsafe .Pointer (& uu [0 ])))
250+ ret := C .av_uuid_parse_range (cstrPtr (inStart ), cstrPtr (inEnd ), (* C .uint8_t )(unsafe .Pointer (& uu [0 ])))
258251 return int (ret ), WrapErr (int (ret ))
259252}
260253
@@ -264,11 +257,7 @@ func AVUuidParseRange(inStart *CStr, inEnd *CStr, uu *AVUUID) (int, error) {
264257// @param[in] uu AVUUID
265258// @param[out] out Pointer to an array of no less than 37 characters.
266259func AVUuidUnparse (uu * AVUUID , out * CStr ) {
267- var tmpout * C.char
268- if out != nil {
269- tmpout = out .ptr
270- }
271- C .av_uuid_unparse ((* C .uint8_t )(unsafe .Pointer (& uu [0 ])), tmpout )
260+ C .av_uuid_unparse ((* C .uint8_t )(unsafe .Pointer (& uu [0 ])), cstrPtr (out ))
272261}
273262
274263// AVUuidEqual compares two UUIDs for equality.
0 commit comments