Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: third_party/harfbuzz-ng/src/hb-common.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-buffer.cc ('k') | third_party/harfbuzz-ng/src/hb-coretext.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright © 2009,2010 Red Hat, Inc. 2 * Copyright © 2009,2010 Red Hat, Inc.
3 * Copyright © 2011,2012 Google, Inc. 3 * Copyright © 2011,2012 Google, Inc.
4 * 4 *
5 * This is part of HarfBuzz, a text shaping library. 5 * This is part of HarfBuzz, a text shaping library.
6 * 6 *
7 * Permission is hereby granted, without written agreement and without 7 * Permission is hereby granted, without written agreement and without
8 * license or royalty fees, to use, copy, modify, and distribute this 8 * license or royalty fees, to use, copy, modify, and distribute this
9 * software and its documentation for any purpose, provided that the 9 * software and its documentation for any purpose, provided that the
10 * above copyright notice and the following two paragraphs appear in 10 * above copyright notice and the following two paragraphs appear in
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 228
229 void finish (void) { free ((void *) lang); } 229 void finish (void) { free ((void *) lang); }
230 }; 230 };
231 231
232 232
233 /* Thread-safe lock-free language list */ 233 /* Thread-safe lock-free language list */
234 234
235 static hb_language_item_t *langs; 235 static hb_language_item_t *langs;
236 236
237 #ifdef HB_USE_ATEXIT 237 #ifdef HB_USE_ATEXIT
238 static inline 238 static
239 void free_langs (void) 239 void free_langs (void)
240 { 240 {
241 while (langs) { 241 while (langs) {
242 hb_language_item_t *next = langs->next; 242 hb_language_item_t *next = langs->next;
243 langs->finish (); 243 langs->finish ();
244 free (langs); 244 free (langs);
245 langs = next; 245 langs = next;
246 } 246 }
247 } 247 }
248 #endif 248 #endif
249 249
250 static hb_language_item_t * 250 static hb_language_item_t *
251 lang_find_or_insert (const char *key) 251 lang_find_or_insert (const char *key)
252 { 252 {
253 retry: 253 retry:
254 hb_language_item_t *first_lang = (hb_language_item_t *) hb_atomic_ptr_get (&la ngs); 254 hb_language_item_t *first_lang = (hb_language_item_t *) hb_atomic_ptr_get (&la ngs);
255 255
256 for (hb_language_item_t *lang = first_lang; lang; lang = lang->next) 256 for (hb_language_item_t *lang = first_lang; lang; lang = lang->next)
257 if (*lang == key) 257 if (*lang == key)
258 return lang; 258 return lang;
259 259
260 /* Not found; allocate one. */ 260 /* Not found; allocate one. */
261 hb_language_item_t *lang = (hb_language_item_t *) calloc (1, sizeof (hb_langua ge_item_t)); 261 hb_language_item_t *lang = (hb_language_item_t *) calloc (1, sizeof (hb_langua ge_item_t));
262 if (unlikely (!lang)) 262 if (unlikely (!lang))
263 return NULL; 263 return NULL;
264 lang->next = first_lang; 264 lang->next = first_lang;
265 *lang = key; 265 *lang = key;
266 266
267 if (!hb_atomic_ptr_cmpexch (&langs, first_lang, lang)) { 267 if (!hb_atomic_ptr_cmpexch (&langs, first_lang, lang)) {
268 lang->finish ();
268 free (lang); 269 free (lang);
269 goto retry; 270 goto retry;
270 } 271 }
271 272
272 #ifdef HB_USE_ATEXIT 273 #ifdef HB_USE_ATEXIT
273 if (!first_lang) 274 if (!first_lang)
274 atexit (free_langs); /* First person registers atexit() callback. */ 275 atexit (free_langs); /* First person registers atexit() callback. */
275 #endif 276 #endif
276 277
277 return lang; 278 return lang;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 * Since: 1.0 339 * Since: 1.0
339 **/ 340 **/
340 hb_language_t 341 hb_language_t
341 hb_language_get_default (void) 342 hb_language_get_default (void)
342 { 343 {
343 static hb_language_t default_language = HB_LANGUAGE_INVALID; 344 static hb_language_t default_language = HB_LANGUAGE_INVALID;
344 345
345 hb_language_t language = (hb_language_t) hb_atomic_ptr_get (&default_language) ; 346 hb_language_t language = (hb_language_t) hb_atomic_ptr_get (&default_language) ;
346 if (unlikely (language == HB_LANGUAGE_INVALID)) { 347 if (unlikely (language == HB_LANGUAGE_INVALID)) {
347 language = hb_language_from_string (setlocale (LC_CTYPE, NULL), -1); 348 language = hb_language_from_string (setlocale (LC_CTYPE, NULL), -1);
348 hb_atomic_ptr_cmpexch (&default_language, HB_LANGUAGE_INVALID, language); 349 (void) hb_atomic_ptr_cmpexch (&default_language, HB_LANGUAGE_INVALID, langua ge);
349 } 350 }
350 351
351 return default_language; 352 return default_language;
352 } 353 }
353 354
354 355
355 /* hb_script_t */ 356 /* hb_script_t */
356 357
357 /** 358 /**
358 * hb_script_from_iso15924_tag: 359 * hb_script_from_iso15924_tag:
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 * 581 *
581 * Since: 1.0 582 * Since: 1.0
582 **/ 583 **/
583 hb_bool_t 584 hb_bool_t
584 hb_version_atleast (unsigned int major, 585 hb_version_atleast (unsigned int major,
585 unsigned int minor, 586 unsigned int minor,
586 unsigned int micro) 587 unsigned int micro)
587 { 588 {
588 return HB_VERSION_ATLEAST (major, minor, micro); 589 return HB_VERSION_ATLEAST (major, minor, micro);
589 } 590 }
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-buffer.cc ('k') | third_party/harfbuzz-ng/src/hb-coretext.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698