@@ -92,7 +92,7 @@ func (library *Library) String() string {
9292 return library .Name + "@" + library .Version .String ()
9393}
9494
95- func (library * Library ) MarshalBinary (out io.Writer ) error {
95+ func (library * Library ) MarshalBinary (out io.Writer , prefix * paths. Path ) error {
9696 writeString := func (in string ) error {
9797 inBytes := []byte (in )
9898 if err := binary .Write (out , binary .NativeEndian , uint16 (len (inBytes ))); err != nil {
@@ -129,10 +129,23 @@ func (library *Library) MarshalBinary(out io.Writer) error {
129129 writePath := func (in * paths.Path ) error {
130130 if in == nil {
131131 return writeString ("" )
132+ } else if p , err := in .RelFrom (prefix ); err != nil {
133+ return err
132134 } else {
133- return writeString (in .String ())
135+ return writeString (p .String ())
134136 }
135137 }
138+ writePathList := func (in []* paths.Path ) error {
139+ if err := binary .Write (out , binary .NativeEndian , uint16 (len (in ))); err != nil {
140+ return err
141+ }
142+ for _ , p := range in {
143+ if err := writePath (p ); err != nil {
144+ return err
145+ }
146+ }
147+ return nil
148+ }
136149 if err := writeString (library .Name ); err != nil {
137150 return err
138151 }
@@ -204,7 +217,7 @@ func (library *Library) MarshalBinary(out io.Writer) error {
204217 return err
205218 }
206219 //writeStringArray(library.Properties.AsSlice())
207- if err := writeStringArray (library .Examples . AsStrings () ); err != nil {
220+ if err := writePathList (library .Examples ); err != nil {
208221 return err
209222 }
210223 if err := writeStringArray (library .declaredHeaders ); err != nil {
@@ -219,7 +232,7 @@ func (library *Library) MarshalBinary(out io.Writer) error {
219232 return nil
220233}
221234
222- func (library * Library ) UnmarshalBinary (in io.Reader ) error {
235+ func (library * Library ) UnmarshalBinary (in io.Reader , prefix * paths. Path ) error {
223236 readString := func () (string , error ) {
224237 var len uint16
225238 if err := binary .Read (in , binary .NativeEndian , & len ); err != nil {
@@ -265,6 +278,30 @@ func (library *Library) UnmarshalBinary(in io.Reader) error {
265278 }
266279 return res , nil
267280 }
281+ readPath := func () (* paths.Path , error ) {
282+ if p , err := readString (); err != nil {
283+ return nil , err
284+ } else if p == "" {
285+ return nil , nil
286+ } else {
287+ return prefix .Join (p ), nil
288+ }
289+ }
290+ readPathList := func () (paths.PathList , error ) {
291+ var len uint16
292+ if err := binary .Read (in , binary .NativeEndian , & len ); err != nil {
293+ return nil , err
294+ }
295+ list := paths .NewPathList ()
296+ for range len {
297+ if p , err := readPath (); err != nil {
298+ return nil , err
299+ } else {
300+ list .Add (p )
301+ }
302+ }
303+ return list , nil
304+ }
268305 var err error
269306 library .Name , err = readString ()
270307 if err != nil {
@@ -302,25 +339,22 @@ func (library *Library) UnmarshalBinary(in io.Reader) error {
302339 if err != nil {
303340 return err
304341 }
305- installDir , err := readString ()
342+ library . InstallDir , err = readPath ()
306343 if err != nil {
307344 return err
308345 }
309- library .InstallDir = paths .New (installDir )
310346 library .DirName , err = readString ()
311347 if err != nil {
312348 return err
313349 }
314- sourceDir , err := readString ()
315- library .SourceDir = paths .New (sourceDir )
350+ library .SourceDir , err = readPath ()
316351 if err != nil {
317352 return err
318353 }
319- utilityDir , err := readString ()
354+ library . UtilityDir , err = readPath ()
320355 if err != nil {
321356 return err
322357 }
323- library .UtilityDir = paths .New (utilityDir )
324358 var location int32
325359 if err := binary .Read (in , binary .NativeEndian , & location ); err != nil {
326360 return err
@@ -368,11 +402,10 @@ func (library *Library) UnmarshalBinary(in io.Reader) error {
368402 // if err != nil {
369403 // return err
370404 // }
371- examples , err := readStringArray ()
405+ library . Examples , err = readPathList ()
372406 if err != nil {
373407 return err
374408 }
375- library .Examples = paths .NewPathList (examples ... )
376409 library .declaredHeaders , err = readStringArray ()
377410 if err != nil {
378411 return err
0 commit comments