~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/wldap32/wldap32.h

Version: ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * WLDAP32 - LDAP support for Wine
  3  *
  4  * Copyright 2005 Hans Leidekker
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  */
 20 
 21 ULONG map_error( int );
 22 
 23 /* A set of helper functions to convert LDAP data structures
 24  * to and from ansi (A), wide character (W) and utf8 (U) encodings.
 25  */
 26 
 27 static inline char *strdupU( const char *src )
 28 {
 29     char *dst;
 30 
 31     if (!src) return NULL;
 32     dst = HeapAlloc( GetProcessHeap(), 0, (strlen( src ) + 1) * sizeof(char) );
 33     if (dst)
 34         strcpy( dst, src );
 35     return dst;
 36 }
 37 
 38 static inline LPWSTR strAtoW( LPCSTR str )
 39 {
 40     LPWSTR ret = NULL;
 41     if (str)
 42     {
 43         DWORD len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
 44         if ((ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
 45             MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
 46     }
 47     return ret;
 48 }
 49 
 50 static inline LPSTR strWtoA( LPCWSTR str )
 51 {
 52     LPSTR ret = NULL;
 53     if (str)
 54     {
 55         DWORD len = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
 56         if ((ret = HeapAlloc( GetProcessHeap(), 0, len )))
 57             WideCharToMultiByte( CP_ACP, 0, str, -1, ret, len, NULL, NULL );
 58     }
 59     return ret;
 60 }
 61 
 62 static inline char *strWtoU( LPCWSTR str )
 63 {
 64     LPSTR ret = NULL;
 65     if (str)
 66     {
 67         DWORD len = WideCharToMultiByte( CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL );
 68         if ((ret = HeapAlloc( GetProcessHeap(), 0, len )))
 69             WideCharToMultiByte( CP_UTF8, 0, str, -1, ret, len, NULL, NULL );
 70     }
 71     return ret;
 72 }
 73 
 74 static inline LPWSTR strUtoW( char *str )
 75 {
 76     LPWSTR ret = NULL;
 77     if (str)
 78     {
 79         DWORD len = MultiByteToWideChar( CP_UTF8, 0, str, -1, NULL, 0 );
 80         if ((ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
 81             MultiByteToWideChar( CP_UTF8, 0, str, -1, ret, len );
 82     }
 83     return ret;
 84 }
 85 
 86 static inline void strfreeA( LPSTR str )
 87 {
 88     HeapFree( GetProcessHeap(), 0, str );
 89 }
 90 
 91 static inline void strfreeW( LPWSTR str )
 92 {
 93     HeapFree( GetProcessHeap(), 0, str );
 94 }
 95 
 96 static inline void strfreeU( char *str )
 97 {
 98     HeapFree( GetProcessHeap(), 0, str );
 99 }
100 
101 static inline DWORD strarraylenA( LPSTR *strarray )
102 {
103     LPSTR *p = strarray;
104     while (*p) p++;
105     return p - strarray;
106 }
107 
108 static inline DWORD strarraylenW( LPWSTR *strarray )
109 {
110     LPWSTR *p = strarray;
111     while (*p) p++;
112     return p - strarray;
113 }
114 
115 static inline DWORD strarraylenU( char **strarray )
116 {
117     char **p = strarray;
118     while (*p) p++;
119     return p - strarray;
120 }
121 
122 static inline LPWSTR *strarrayAtoW( LPSTR *strarray )
123 {
124     LPWSTR *strarrayW = NULL;
125     DWORD size;
126 
127     if (strarray)
128     {
129         size  = sizeof(WCHAR*) * (strarraylenA( strarray ) + 1);
130         strarrayW = HeapAlloc( GetProcessHeap(), 0, size );
131 
132         if (strarrayW)
133         {
134             LPSTR *p = strarray;
135             LPWSTR *q = strarrayW;
136 
137             while (*p) *q++ = strAtoW( *p++ );
138             *q = NULL;
139         }
140     }
141     return strarrayW;
142 }
143 
144 static inline LPSTR *strarrayWtoA( LPWSTR *strarray )
145 {
146     LPSTR *strarrayA = NULL;
147     DWORD size;
148 
149     if (strarray)
150     {
151         size = sizeof(LPSTR) * (strarraylenW( strarray ) + 1);
152         strarrayA = HeapAlloc( GetProcessHeap(), 0, size );
153 
154         if (strarrayA)
155         {
156             LPWSTR *p = strarray;
157             LPSTR *q = strarrayA;
158 
159             while (*p) *q++ = strWtoA( *p++ );
160             *q = NULL;
161         }
162     }
163     return strarrayA;
164 }
165 
166 static inline char **strarrayWtoU( LPWSTR *strarray )
167 {
168     char **strarrayU = NULL;
169     DWORD size;
170 
171     if (strarray)
172     {
173         size = sizeof(char*) * (strarraylenW( strarray ) + 1);
174         strarrayU = HeapAlloc( GetProcessHeap(), 0, size );
175 
176         if (strarrayU)
177         {
178             LPWSTR *p = strarray;
179             char **q = strarrayU;
180 
181             while (*p) *q++ = strWtoU( *p++ );
182             *q = NULL;
183         }
184     }
185     return strarrayU;
186 }
187 
188 static inline LPWSTR *strarrayUtoW( char **strarray )
189 {
190     LPWSTR *strarrayW = NULL;
191     DWORD size;
192 
193     if (strarray)
194     {
195         size = sizeof(WCHAR*) * (strarraylenU( strarray ) + 1);
196         strarrayW = HeapAlloc( GetProcessHeap(), 0, size );
197 
198         if (strarrayW)
199         {
200             char **p = strarray;
201             LPWSTR *q = strarrayW;
202 
203             while (*p) *q++ = strUtoW( *p++ );
204             *q = NULL;
205         }
206     }
207     return strarrayW;
208 }
209 
210 static inline void strarrayfreeA( LPSTR *strarray )
211 {
212     if (strarray)
213     {
214         LPSTR *p = strarray;
215         while (*p) strfreeA( *p++ );
216         HeapFree( GetProcessHeap(), 0, strarray );
217     }
218 }
219 
220 static inline void strarrayfreeW( LPWSTR *strarray )
221 {
222     if (strarray)
223     {
224         LPWSTR *p = strarray;
225         while (*p) strfreeW( *p++ );
226         HeapFree( GetProcessHeap(), 0, strarray );
227     }
228 }
229 
230 static inline void strarrayfreeU( char **strarray )
231 {
232     if (strarray)
233     {
234         char **p = strarray;
235         while (*p) strfreeU( *p++ );
236         HeapFree( GetProcessHeap(), 0, strarray );
237     }
238 }
239 
240 #ifdef HAVE_LDAP
241 
242 static inline struct berval *bvdup( struct berval *bv )
243 {
244     struct berval *berval;
245     DWORD size = sizeof(struct berval) + bv->bv_len;
246 
247     berval = HeapAlloc( GetProcessHeap(), 0, size );
248     if (berval)
249     {
250         char *val = (char *)berval + sizeof(struct berval);
251 
252         berval->bv_len = bv->bv_len;
253         berval->bv_val = val;
254         memcpy( val, bv->bv_val, bv->bv_len );
255     }
256     return berval;
257 }
258 
259 static inline DWORD bvarraylen( struct berval **bv )
260 {
261     struct berval **p = bv;
262     while (*p) p++;
263     return p - bv;
264 }
265 
266 static inline struct berval **bvarraydup( struct berval **bv )
267 {
268     struct berval **berval = NULL;
269     DWORD size;
270 
271     if (bv)
272     {
273         size = sizeof(struct berval *) * (bvarraylen( bv ) + 1);
274         berval = HeapAlloc( GetProcessHeap(), 0, size );
275 
276         if (berval)
277         {
278             struct berval **p = bv;
279             struct berval **q = berval;
280 
281             while (*p) *q++ = bvdup( *p++ );
282             *q = NULL;
283         }
284     }
285     return berval;
286 }
287 
288 static inline void bvarrayfree( struct berval **bv )
289 {
290     struct berval **p = bv;
291     while (*p) HeapFree( GetProcessHeap(), 0, *p++ );
292     HeapFree( GetProcessHeap(), 0, bv );
293 }
294 
295 static inline LDAPModW *modAtoW( LDAPModA *mod )
296 {
297     LDAPModW *modW;
298 
299     modW = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPModW) );
300     if (modW)
301     {
302         modW->mod_op = mod->mod_op;
303         modW->mod_type = strAtoW( mod->mod_type );
304 
305         if (mod->mod_op & LDAP_MOD_BVALUES)
306             modW->mod_vals.modv_bvals = bvarraydup( mod->mod_vals.modv_bvals );
307         else
308             modW->mod_vals.modv_strvals = strarrayAtoW( mod->mod_vals.modv_strvals );
309     }
310     return modW;
311 }
312 
313 static inline LDAPMod *modWtoU( LDAPModW *mod )
314 {
315     LDAPMod *modU;
316 
317     modU = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPMod) );
318     if (modU)
319     {
320         modU->mod_op = mod->mod_op;
321         modU->mod_type = strWtoU( mod->mod_type );
322 
323         if (mod->mod_op & LDAP_MOD_BVALUES)
324             modU->mod_vals.modv_bvals = bvarraydup( mod->mod_vals.modv_bvals );
325         else
326             modU->mod_vals.modv_strvals = strarrayWtoU( mod->mod_vals.modv_strvals );
327     }
328     return modU;
329 }
330 
331 static inline void modfreeW( LDAPModW *mod )
332 {
333     if (mod->mod_op & LDAP_MOD_BVALUES)
334         bvarrayfree( mod->mod_vals.modv_bvals );
335     else
336         strarrayfreeW( mod->mod_vals.modv_strvals );
337     HeapFree( GetProcessHeap(), 0, mod );
338 }
339 
340 static inline void modfreeU( LDAPMod *mod )
341 {
342     if (mod->mod_op & LDAP_MOD_BVALUES)
343         bvarrayfree( mod->mod_vals.modv_bvals );
344     else
345         strarrayfreeU( mod->mod_vals.modv_strvals );
346     HeapFree( GetProcessHeap(), 0, mod );
347 }
348 
349 static inline DWORD modarraylenA( LDAPModA **modarray )
350 {
351     LDAPModA **p = modarray;
352     while (*p) p++;
353     return p - modarray;
354 }
355 
356 static inline DWORD modarraylenW( LDAPModW **modarray )
357 {
358     LDAPModW **p = modarray;
359     while (*p) p++;
360     return p - modarray;
361 }
362 
363 static inline LDAPModW **modarrayAtoW( LDAPModA **modarray )
364 {
365     LDAPModW **modarrayW = NULL;
366     DWORD size;
367 
368     if (modarray)
369     {
370         size = sizeof(LDAPModW*) * (modarraylenA( modarray ) + 1);
371         modarrayW = HeapAlloc( GetProcessHeap(), 0, size );
372 
373         if (modarrayW)
374         {
375             LDAPModA **p = modarray;
376             LDAPModW **q = modarrayW;
377 
378             while (*p) *q++ = modAtoW( *p++ );
379             *q = NULL;
380         }
381     }
382     return modarrayW;
383 }
384 
385 static inline LDAPMod **modarrayWtoU( LDAPModW **modarray )
386 {
387     LDAPMod **modarrayU = NULL;
388     DWORD size;
389 
390     if (modarray)
391     {
392         size = sizeof(LDAPMod*) * (modarraylenW( modarray ) + 1);
393         modarrayU = HeapAlloc( GetProcessHeap(), 0, size );
394 
395         if (modarrayU)
396         {
397             LDAPModW **p = modarray;
398             LDAPMod **q = modarrayU;
399 
400             while (*p) *q++ = modWtoU( *p++ );
401             *q = NULL;
402         }
403     }
404     return modarrayU;
405 }
406 
407 static inline void modarrayfreeW( LDAPModW **modarray )
408 {
409     if (modarray)
410     {
411         LDAPModW **p = modarray;
412         while (*p) modfreeW( *p++ );
413         HeapFree( GetProcessHeap(), 0, modarray );
414     }
415 }
416 
417 static inline void modarrayfreeU( LDAPMod **modarray )
418 {
419     if (modarray)
420     {
421         LDAPMod **p = modarray;
422         while (*p) modfreeU( *p++ );
423         HeapFree( GetProcessHeap(), 0, modarray );
424     }
425 }
426 
427 static inline LDAPControlW *controlAtoW( LDAPControlA *control )
428 {
429     LDAPControlW *controlW;
430     DWORD len = control->ldctl_value.bv_len;
431     char *val = NULL;
432 
433     if (control->ldctl_value.bv_val)
434     {
435         val = HeapAlloc( GetProcessHeap(), 0, len );
436         if (!val) return NULL;
437         memcpy( val, control->ldctl_value.bv_val, len );
438     }
439 
440     controlW = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPControlW) );
441     if (!controlW)
442     {
443         HeapFree( GetProcessHeap(), 0, val );
444         return NULL;
445     }
446 
447     controlW->ldctl_oid = strAtoW( control->ldctl_oid );
448     controlW->ldctl_value.bv_len = len; 
449     controlW->ldctl_value.bv_val = val; 
450     controlW->ldctl_iscritical = control->ldctl_iscritical;
451 
452     return controlW;
453 }
454 
455 static inline LDAPControlA *controlWtoA( LDAPControlW *control )
456 {
457     LDAPControlA *controlA;
458     DWORD len = control->ldctl_value.bv_len;
459     char *val = NULL;
460 
461     if (control->ldctl_value.bv_val)
462     {
463         val = HeapAlloc( GetProcessHeap(), 0, len );
464         if (!val) return NULL;
465         memcpy( val, control->ldctl_value.bv_val, len );
466     }
467 
468     controlA = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPControlA) );
469     if (!controlA)
470     {
471         HeapFree( GetProcessHeap(), 0, val );
472         return NULL;
473     }
474 
475     controlA->ldctl_oid = strWtoA( control->ldctl_oid );
476     controlA->ldctl_value.bv_len = len; 
477     controlA->ldctl_value.bv_val = val;
478     controlA->ldctl_iscritical = control->ldctl_iscritical;
479 
480     return controlA;
481 }
482 
483 static inline LDAPControl *controlWtoU( LDAPControlW *control )
484 {
485     LDAPControl *controlU;
486     DWORD len = control->ldctl_value.bv_len;
487     char *val = NULL;
488 
489     if (control->ldctl_value.bv_val)
490     {
491         val = HeapAlloc( GetProcessHeap(), 0, len );
492         if (!val) return NULL;
493         memcpy( val, control->ldctl_value.bv_val, len );
494     }
495 
496     controlU = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPControl) );
497     if (!controlU)
498     {
499         HeapFree( GetProcessHeap(), 0, val );
500         return NULL;
501     }
502 
503     controlU->ldctl_oid = strWtoU( control->ldctl_oid );
504     controlU->ldctl_value.bv_len = len; 
505     controlU->ldctl_value.bv_val = val; 
506     controlU->ldctl_iscritical = control->ldctl_iscritical;
507 
508     return controlU;
509 }
510 
511 static inline LDAPControlW *controlUtoW( LDAPControl *control )
512 {
513     LDAPControlW *controlW;
514     DWORD len = control->ldctl_value.bv_len;
515     char *val = NULL;
516 
517     if (control->ldctl_value.bv_val)
518     {
519         val = HeapAlloc( GetProcessHeap(), 0, len );
520         if (!val) return NULL;
521         memcpy( val, control->ldctl_value.bv_val, len );
522     }
523 
524     controlW = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPControlW) );
525     if (!controlW)
526     {
527         HeapFree( GetProcessHeap(), 0, val );
528         return NULL;
529     }
530 
531     controlW->ldctl_oid = strUtoW( control->ldctl_oid );
532     controlW->ldctl_value.bv_len = len; 
533     controlW->ldctl_value.bv_val = val; 
534     controlW->ldctl_iscritical = control->ldctl_iscritical;
535  
536     return controlW;
537 }
538 
539 static inline void controlfreeA( LDAPControlA *control )
540 {
541     if (control)
542     {
543         strfreeA( control->ldctl_oid );
544         HeapFree( GetProcessHeap(), 0, control->ldctl_value.bv_val );
545         HeapFree( GetProcessHeap(), 0, control );
546     }
547 }
548 
549 static inline void controlfreeW( LDAPControlW *control )
550 {
551     if (control)
552     {
553         strfreeW( control->ldctl_oid );
554         HeapFree( GetProcessHeap(), 0, control->ldctl_value.bv_val );
555         HeapFree( GetProcessHeap(), 0, control );
556     }
557 }
558 
559 static inline void controlfreeU( LDAPControl *control )
560 {
561     if (control)
562     {
563         strfreeU( control->ldctl_oid );
564         HeapFree( GetProcessHeap(), 0, control->ldctl_value.bv_val );
565         HeapFree( GetProcessHeap(), 0, control );
566     }
567 }
568 
569 static inline DWORD controlarraylenA( LDAPControlA **controlarray )
570 {
571     LDAPControlA **p = controlarray;
572     while (*p) p++;
573     return p - controlarray;
574 }
575 
576 static inline DWORD controlarraylenW( LDAPControlW **controlarray )
577 {
578     LDAPControlW **p = controlarray;
579     while (*p) p++;
580     return p - controlarray;
581 }
582 
583 static inline DWORD controlarraylenU( LDAPControl **controlarray )
584 {
585     LDAPControl **p = controlarray;
586     while (*p) p++;
587     return p - controlarray;
588 }
589 
590 static inline LDAPControlW **controlarrayAtoW( LDAPControlA **controlarray )
591 {
592     LDAPControlW **controlarrayW = NULL;
593     DWORD size;
594 
595     if (controlarray)
596     {
597         size = sizeof(LDAPControlW*) * (controlarraylenA( controlarray ) + 1);
598         controlarrayW = HeapAlloc( GetProcessHeap(), 0, size );
599 
600         if (controlarrayW)
601         {
602             LDAPControlA **p = controlarray;
603             LDAPControlW **q = controlarrayW;
604 
605             while (*p) *q++ = controlAtoW( *p++ );
606             *q = NULL;
607         }
608     }
609     return controlarrayW;
610 }
611 
612 static inline LDAPControlA **controlarrayWtoA( LDAPControlW **controlarray )
613 {
614     LDAPControlA **controlarrayA = NULL;
615     DWORD size;
616 
617     if (controlarray)
618     {
619         size = sizeof(LDAPControl*) * (controlarraylenW( controlarray ) + 1);
620         controlarrayA = HeapAlloc( GetProcessHeap(), 0, size );
621 
622         if (controlarrayA)
623         {
624             LDAPControlW **p = controlarray;
625             LDAPControlA **q = controlarrayA;
626 
627             while (*p) *q++ = controlWtoA( *p++ );
628             *q = NULL;
629         }
630     }
631     return controlarrayA;
632 }
633 
634 static inline LDAPControl **controlarrayWtoU( LDAPControlW **controlarray )
635 {
636     LDAPControl **controlarrayU = NULL;
637     DWORD size;
638 
639     if (controlarray)
640     {
641         size = sizeof(LDAPControl*) * (controlarraylenW( controlarray ) + 1);
642         controlarrayU = HeapAlloc( GetProcessHeap(), 0, size );
643 
644         if (controlarrayU)
645         {
646             LDAPControlW **p = controlarray;
647             LDAPControl **q = controlarrayU;
648 
649             while (*p) *q++ = controlWtoU( *p++ );
650             *q = NULL;
651         }
652     }
653     return controlarrayU;
654 }
655 
656 static inline LDAPControlW **controlarrayUtoW( LDAPControl **controlarray )
657 {
658     LDAPControlW **controlarrayW = NULL;
659     DWORD size;
660 
661     if (controlarray)
662     {
663         size = sizeof(LDAPControlW*) * (controlarraylenU( controlarray ) + 1);
664         controlarrayW = HeapAlloc( GetProcessHeap(), 0, size );
665 
666         if (controlarrayW)
667         {
668             LDAPControl **p = controlarray;
669             LDAPControlW **q = controlarrayW;
670 
671             while (*p) *q++ = controlUtoW( *p++ );
672             *q = NULL;
673         }
674     }
675     return controlarrayW;
676 }
677 
678 static inline void controlarrayfreeA( LDAPControlA **controlarray )
679 {
680     if (controlarray)
681     {
682         LDAPControlA **p = controlarray;
683         while (*p) controlfreeA( *p++ );
684         HeapFree( GetProcessHeap(), 0, controlarray );
685     }
686 }
687 
688 static inline void controlarrayfreeW( LDAPControlW **controlarray )
689 {
690     if (controlarray)
691     {
692         LDAPControlW **p = controlarray;
693         while (*p) controlfreeW( *p++ );
694         HeapFree( GetProcessHeap(), 0, controlarray );
695     }
696 }
697 
698 static inline void controlarrayfreeU( LDAPControl **controlarray )
699 {
700     if (controlarray)
701     {
702         LDAPControl **p = controlarray;
703         while (*p) controlfreeU( *p++ );
704         HeapFree( GetProcessHeap(), 0, controlarray );
705     }
706 }
707 
708 static inline LDAPSortKeyW *sortkeyAtoW( LDAPSortKeyA *sortkey )
709 {
710     LDAPSortKeyW *sortkeyW;
711 
712     sortkeyW = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPSortKeyW) );
713     if (sortkeyW)
714     {
715         sortkeyW->sk_attrtype = strAtoW( sortkey->sk_attrtype );
716         sortkeyW->sk_matchruleoid = strAtoW( sortkey->sk_matchruleoid );
717         sortkeyW->sk_reverseorder = sortkey->sk_reverseorder;
718     }
719     return sortkeyW;
720 }
721 
722 static inline LDAPSortKeyA *sortkeyWtoA( LDAPSortKeyW *sortkey )
723 {
724     LDAPSortKeyA *sortkeyA;
725 
726     sortkeyA = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPSortKeyA) );
727     if (sortkeyA)
728     {
729         sortkeyA->sk_attrtype = strWtoA( sortkey->sk_attrtype );
730         sortkeyA->sk_matchruleoid = strWtoA( sortkey->sk_matchruleoid );
731         sortkeyA->sk_reverseorder = sortkey->sk_reverseorder;
732     }
733     return sortkeyA;
734 }
735 
736 static inline LDAPSortKey *sortkeyWtoU( LDAPSortKeyW *sortkey )
737 {
738     LDAPSortKey *sortkeyU;
739 
740     sortkeyU = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPSortKey) );
741     if (sortkeyU)
742     {
743         sortkeyU->attributeType = strWtoU( sortkey->sk_attrtype );
744         sortkeyU->orderingRule = strWtoU( sortkey->sk_matchruleoid );
745         sortkeyU->reverseOrder = sortkey->sk_reverseorder;
746     }
747     return sortkeyU;
748 }
749 
750 static inline void sortkeyfreeA( LDAPSortKeyA *sortkey )
751 {
752     if (sortkey)
753     {
754         strfreeA( sortkey->sk_attrtype );
755         strfreeA( sortkey->sk_matchruleoid );
756         HeapFree( GetProcessHeap(), 0, sortkey );
757     }
758 }
759 
760 static inline void sortkeyfreeW( LDAPSortKeyW *sortkey )
761 {
762     if (sortkey)
763     {
764         strfreeW( sortkey->sk_attrtype );
765         strfreeW( sortkey->sk_matchruleoid );
766         HeapFree( GetProcessHeap(), 0, sortkey );
767     }
768 }
769 
770 static inline void sortkeyfreeU( LDAPSortKey *sortkey )
771 {
772     if (sortkey)
773     {
774         strfreeU( sortkey->attributeType );
775         strfreeU( sortkey->orderingRule );
776         HeapFree( GetProcessHeap(), 0, sortkey );
777     }
778 }
779 
780 static inline DWORD sortkeyarraylenA( LDAPSortKeyA **sortkeyarray )
781 {
782     LDAPSortKeyA **p = sortkeyarray;
783     while (*p) p++;
784     return p - sortkeyarray;
785 }
786 
787 static inline DWORD sortkeyarraylenW( LDAPSortKeyW **sortkeyarray )
788 {
789     LDAPSortKeyW **p = sortkeyarray;
790     while (*p) p++;
791     return p - sortkeyarray;
792 }
793 
794 static inline LDAPSortKeyW **sortkeyarrayAtoW( LDAPSortKeyA **sortkeyarray )
795 {
796     LDAPSortKeyW **sortkeyarrayW = NULL;
797     DWORD size;
798 
799     if (sortkeyarray)
800     {
801         size = sizeof(LDAPSortKeyW*) * (sortkeyarraylenA( sortkeyarray ) + 1);
802         sortkeyarrayW = HeapAlloc( GetProcessHeap(), 0, size );
803 
804         if (sortkeyarrayW)
805         {
806             LDAPSortKeyA **p = sortkeyarray;
807             LDAPSortKeyW **q = sortkeyarrayW;
808 
809             while (*p) *q++ = sortkeyAtoW( *p++ );
810             *q = NULL;
811         }
812     }
813     return sortkeyarrayW;
814 }
815 
816 static inline LDAPSortKey **sortkeyarrayWtoU( LDAPSortKeyW **sortkeyarray )
817 {
818     LDAPSortKey **sortkeyarrayU = NULL;
819     DWORD size;
820 
821     if (sortkeyarray)
822     {
823         size = sizeof(LDAPSortKey*) * (sortkeyarraylenW( sortkeyarray ) + 1);
824         sortkeyarrayU = HeapAlloc( GetProcessHeap(), 0, size );
825 
826         if (sortkeyarrayU)
827         {
828             LDAPSortKeyW **p = sortkeyarray;
829             LDAPSortKey **q = sortkeyarrayU;
830 
831             while (*p) *q++ = sortkeyWtoU( *p++ );
832             *q = NULL;
833         }
834     }
835     return sortkeyarrayU;
836 }
837 
838 static inline void sortkeyarrayfreeW( LDAPSortKeyW **sortkeyarray )
839 {
840     if (sortkeyarray)
841     {
842         LDAPSortKeyW **p = sortkeyarray;
843         while (*p) sortkeyfreeW( *p++ );
844         HeapFree( GetProcessHeap(), 0, sortkeyarray );
845     }
846 }
847 
848 static inline void sortkeyarrayfreeU( LDAPSortKey **sortkeyarray )
849 {
850     if (sortkeyarray)
851     {
852         LDAPSortKey **p = sortkeyarray;
853         while (*p) sortkeyfreeU( *p++ );
854         HeapFree( GetProcessHeap(), 0, sortkeyarray );
855     }
856 }
857 
858 #endif /* HAVE_LDAP */
859 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.