]>
git.proxmox.com Git - libxdgmime-perl.git/blob - xdgmime-source/src/xdgmimealias.c
1 /* -*- mode: C; c-file-style: "gnu" -*- */
2 /* xdgmimealias.c: Private file. Datastructure for storing the aliases.
4 * More info can be found at http://www.freedesktop.org/standards/
6 * Copyright (C) 2004 Red Hat, Inc.
7 * Copyright (C) 2004 Matthias Clasen <mclasen@redhat.com>
9 * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
16 #include "xdgmimealias.h"
17 #include "xdgmimeint.h"
32 typedef struct XdgAlias XdgAlias
;
42 struct XdgAlias
*aliases
;
47 _xdg_mime_alias_list_new (void)
51 list
= malloc (sizeof (XdgAliasList
));
60 _xdg_mime_alias_list_free (XdgAliasList
*list
)
66 for (i
= 0; i
< list
->n_aliases
; i
++)
68 free (list
->aliases
[i
].alias
);
69 free (list
->aliases
[i
].mime_type
);
77 alias_entry_cmp (const void *v1
, const void *v2
)
79 return strcmp (((XdgAlias
*)v1
)->alias
, ((XdgAlias
*)v2
)->alias
);
83 _xdg_mime_alias_list_lookup (XdgAliasList
*list
,
89 if (list
->n_aliases
> 0)
91 key
.alias
= (char *)alias
;
94 entry
= bsearch (&key
, list
->aliases
, list
->n_aliases
,
95 sizeof (XdgAlias
), alias_entry_cmp
);
97 return entry
->mime_type
;
104 _xdg_mime_alias_read_from_file (XdgAliasList
*list
,
105 const char *file_name
)
111 file
= fopen (file_name
, "r");
116 /* FIXME: Not UTF-8 safe. Doesn't work if lines are greater than 255 chars.
118 alloc
= list
->n_aliases
+ 16;
119 list
->aliases
= realloc (list
->aliases
, alloc
* sizeof (XdgAlias
));
120 while (fgets (line
, 255, file
) != NULL
)
126 sep
= strchr (line
, ' ');
130 sep
[strlen (sep
) -1] = '\000';
131 if (list
->n_aliases
== alloc
)
134 list
->aliases
= realloc (list
->aliases
,
135 alloc
* sizeof (XdgAlias
));
137 list
->aliases
[list
->n_aliases
].alias
= strdup (line
);
138 list
->aliases
[list
->n_aliases
].mime_type
= strdup (sep
);
141 list
->aliases
= realloc (list
->aliases
,
142 list
->n_aliases
* sizeof (XdgAlias
));
146 if (list
->n_aliases
> 1)
147 qsort (list
->aliases
, list
->n_aliases
,
148 sizeof (XdgAlias
), alias_entry_cmp
);
153 _xdg_mime_alias_list_dump (XdgAliasList
*list
)
159 for (i
= 0; i
< list
->n_aliases
; i
++)
162 list
->aliases
[i
].alias
,
163 list
->aliases
[i
].mime_type
);