Back to index

lightning-sunbird  0.9+nobinonly
Functions
friendly.c File Reference
#include "ldap-int.h"

Go to the source code of this file.

Functions

char *LDAP_CALL ldap_friendly_name (char *filename, char *name, FriendlyMap *map)
void LDAP_CALL ldap_free_friendlymap (FriendlyMap *map)

Function Documentation

Definition at line 137 of file friendly.c.

{
       struct friendly* pF;

       if ( map == NULL || *map == NULL ) {
              return;
       }

       for ( pF = *map; pF->f_unfriendly; pF++ ) {
              NSLDAPI_FREE( pF->f_unfriendly );
              NSLDAPI_FREE( pF->f_friendly );
       }
       NSLDAPI_FREE( *map );
       *map = NULL;
}
char* LDAP_CALL ldap_friendly_name ( char *  filename,
char *  name,
FriendlyMap map 
)

Definition at line 55 of file friendly.c.

{
       int    i, entries;
       FILE   *fp;
       char   *s;
       char   buf[BUFSIZ];

       if ( map == NULL ) {
              return( name );
       }
    if ( NULL == name)
    {
        return (name);
    }

       if ( *map == NULL ) {
              if ( (fp = fopen( filename, "r" )) == NULL )
                     return( name );

              entries = 0;
              while ( fgets( buf, sizeof(buf), fp ) != NULL ) {
                     if ( buf[0] != '#' )
                            entries++;
              }
              rewind( fp );

              if ( (*map = (FriendlyMap)NSLDAPI_MALLOC( (entries + 1) *
                  sizeof(struct friendly) )) == NULL ) {
                     fclose( fp );
                     return( name );
              }

              i = 0;
              while ( fgets( buf, sizeof(buf), fp ) != NULL && i < entries ) {
                     if ( buf[0] == '#' )
                            continue;

                     if ( (s = strchr( buf, '\n' )) != NULL )
                            *s = '\0';

                     if ( (s = strchr( buf, '\t' )) == NULL )
                            continue;
                     *s++ = '\0';

                     if ( *s == '"' ) {
                            int    esc = 0, found = 0;

                            for ( ++s; *s && !found; s++ ) {
                                   switch ( *s ) {
                                   case '\\':
                                          esc = 1;
                                          break;
                                   case '"':
                                          if ( !esc )
                                                 found = 1;
                                          /* FALL */
                                   default:
                                          esc = 0;
                                          break;
                                   }
                            }
                     }

                     (*map)[i].f_unfriendly = nsldapi_strdup( buf );
                     (*map)[i].f_friendly = nsldapi_strdup( s );
                     i++;
              }

              fclose( fp );
              (*map)[i].f_unfriendly = NULL;
       }

       for ( i = 0; (*map)[i].f_unfriendly != NULL; i++ ) {
              if ( strcasecmp( name, (*map)[i].f_unfriendly ) == 0 )
                     return( (*map)[i].f_friendly );
       }
       return( name );
}

Here is the call graph for this function: