ali@0: #include ali@0: #include ali@5: #include ali@0: ali@0: /* ali@69: * Read a file into memory (which should be freed with g_free when no ali@0: * longer required). Returns NULL on error and outputs a suitable error ali@0: * message to stderr. ali@13: * DOS-style line endings and UTF-8 BOM are handled transparently even ali@13: * on platforms which don't normally use these formats. ali@0: */ ali@6: gboolean file_get_contents_text(const char *filename,char **contents, ali@69: size_t *length,GError **err) ali@0: { ali@0: int i; ali@13: unsigned char *raw; ali@69: gsize raw_length; ali@6: GString *string; ali@69: if (!g_file_get_contents(filename,(char **)&raw,&raw_length,err)) ali@0: return FALSE; ali@6: string=g_string_new(NULL); ali@13: i=0; ali@13: if (raw_length>=3 && raw[0]==0xEF && raw[1]==0xBB && raw[2]==0xBF) ali@13: i+=3; /* Skip BOM (U+FEFF) */ ali@13: for(;ilen; ali@0: if (contents) ali@6: *contents=g_string_free(string,FALSE); ali@0: else ali@6: g_string_free(string,TRUE); ali@0: return TRUE; ali@0: }