X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffcstr.c;h=c683c800a8800a00b87b14dc0544a6c6810b5536;hb=3ed70071cdc8a03229c009f5565c23948264a5e0;hp=712e23b8c2dfb21e95c98fa0948f2b4c1e4e3aa0;hpb=1bcf4ae5f2348d7956c435d34f2856ebfaccd6c8;p=fontconfig.git diff --git a/src/fcstr.c b/src/fcstr.c index 712e23b..c683c80 100644 --- a/src/fcstr.c +++ b/src/fcstr.c @@ -1,5 +1,5 @@ /* - * $RCSId: xc/lib/fontconfig/src/fcstr.c,v 1.10 2002/08/31 22:17:32 keithp Exp $ + * fontconfig/src/fcstr.c * * Copyright © 2000 Keith Packard * @@ -710,11 +710,18 @@ FcUtf16Len (const FcChar8 *string, void FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size) { - buf->buf = init; + if (init) + { + buf->buf = init; + buf->size = size; + } else + { + buf->buf = buf->static_buf; + buf->size = sizeof (buf->static_buf); + } buf->allocated = FcFalse; buf->failed = FcFalse; buf->len = 0; - buf->size = size; } void @@ -733,7 +740,10 @@ FcStrBufDone (FcStrBuf *buf) { FcChar8 *ret; - ret = malloc (buf->len + 1); + if (buf->failed) + ret = NULL; + else + ret = malloc (buf->len + 1); if (ret) { FcMemAlloc (FC_MEM_STRING, buf->len + 1); @@ -744,6 +754,19 @@ FcStrBufDone (FcStrBuf *buf) return ret; } +FcChar8 * +FcStrBufDoneStatic (FcStrBuf *buf) +{ + FcChar8 *ret; + + FcStrBufChar (buf, '\0'); + + if (buf->failed) + return NULL; + + return buf->buf; +} + FcBool FcStrBufChar (FcStrBuf *buf, FcChar8 c) { @@ -752,6 +775,9 @@ FcStrBufChar (FcStrBuf *buf, FcChar8 c) FcChar8 *new; int size; + if (buf->failed) + return FcFalse; + if (buf->allocated) { size = buf->size * 2; @@ -943,7 +969,13 @@ FcConvertDosPath (char *str) char *dest = str; char *end = str + len; char last = 0; - + + if (*p == '\\') + { + *p = '/'; + p++; + dest++; + } while (p < end) { if (*p == '\\') @@ -968,10 +1000,8 @@ FcStrCanonFilename (const FcChar8 *s) { #ifdef _WIN32 FcChar8 full[FC_MAX_FILE_LEN + 2]; - FcChar8 basename[FC_MAX_FILE_LEN + 2]; int size = GetFullPathName (s, sizeof (full) -1, - full, - basename); + full, NULL); if (size == 0) perror ("GetFullPathName");