diff --git a/dlls/wineps.drv/ppd.c b/dlls/wineps.drv/ppd.c index a18c42c69a1..adb6a214b95 100644 --- a/dlls/wineps.drv/ppd.c +++ b/dlls/wineps.drv/ppd.c @@ -266,7 +266,15 @@ static BOOL get_line( char *buf, int size, struct map_context *ctx ) { if (ctx->pos > ctx->end) break; buf[i] = *ctx->pos++; - if (buf[i] == '\n') + + /* \r\n -> \n */ + if (buf[i] == '\r' && ctx->pos <= ctx->end && *ctx->pos == '\n') + { + ctx->pos++; + buf[i] = '\n'; + } + + if (buf[i] == '\n' || buf[i] == '\r') { i++; break; @@ -394,9 +402,11 @@ static BOOL PSDRV_PPDGetNextTuple(struct map_context *ctx, PPDTuple *tuple) break; } while(1); - if(line[strlen(line)-1] != '\n') { + cp = line + strlen(line) - 1; + if (*cp != '\n' && *cp != '\r') + { ERR("Line too long.\n"); - goto start; + goto start; } for(cp = line; !isspace(*cp) && *cp != ':'; cp++)