ali@0: #include ali@0: #include ali@5: #include ali@0: ali@0: /* ali@0: * Read a file into memory (which should be freed with mem_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@0: size_t *length) ali@0: { ali@0: int i; ali@13: unsigned char *raw; ali@0: size_t raw_length; ali@6: GString *string; ali@6: GError *error=NULL; ali@13: if (!g_file_get_contents(filename,(char *)&raw,&raw_length,&error)) ali@6: { ali@6: fprintf(stderr,"%s: %s\n",filename,error->message); ali@6: g_error_free(error); ali@0: return FALSE; ali@6: } 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: }