rem: f = fopen(file, "r");
add: f = fopen(file, "rb");
context: WMReadPropListFromFile(char *file){    WMPropList *plist = NULL;    PLData *pldata;    FILE *f;    struct stat stbuf;    size_t length;    f = fopen(file, "r");    if (!f) {        /* let the user print the error message if he really needs to */        /*wsyserror(_("could not open domain file '%s' for reading"), file);*/        return NULL;    }    if (stat(file, &stbuf)==0) {        length = (size_t) stbuf.st_size;    } else {        wsyserror(_("could not get size for file '%s'"), file);        fclose(f);        return NULL;    }    pldata = (PLData*) wmalloc(sizeof(PLData));    memset(pldata, 0, sizeof(PLData));    pldata->ptr = (char*) wmalloc(length+1);    pldata->filename = file;    pldata->lineNumber = 1;    if (fread(pldata->ptr, length, 1, f) != 1) {        wsyserror(_("error reading from file '%s'"), file);        plist = NULL;        goto cleanup;    }    pldata->ptr[length] = 0;    plist = getPropList(pldata);    if (getNonSpaceChar(pldata)!=0 && plist) {        COMPLAIN(pldata, _("extra data after end of property list"));        /*         * We can't just ignore garbage after the end of the description         * (especially if the description was read from a file), because         * the "garbage" can be the real data and the real garbage is in         * fact in the beginning of the file (which is now inside plist)         */        WMReleasePropList(plist);        plist = NULL;    }cleanup:    wfree(pldata->ptr);    wfree(pldata);    fclose(f);    return plist;}