On 2007/10/16 20:32, Stuart Henderson wrote: > bump to the newest version, add lcms support, add a patch for > Canon 40D. works alright on amd64, sparc64. > > comments/ok?
comments so far: we have ufraw instead now -> for someone who just wants a simple bulk converter, it can be useful to have something which doesn't pull in X, cairo, gdk, gtk, gimp, pango, etc. strlcpy patches -> I'm not sure whether to continue with these, but since one use for dcraw is with the php gallery thing, it's more likely than some things to take unclean data, so I think there's more reason here to keep them than for some other ports. if anyone would like to help test, but doesn't have a camera which can produce raw files, you can find some samples: http://raw.fotosite.pl/ http://www.rawsamples.ch/index_en.php i'd like to get this in, any more opinions? would someone like to give me an ok or a firm "kill the patches" or something? also compiles on vax. (it doesn't link though ;-) > Index: Makefile > =================================================================== > RCS file: /cvs/ports/graphics/dcraw/Makefile,v > retrieving revision 1.9 > diff -u -p -r1.9 Makefile > --- Makefile 15 Sep 2007 20:09:40 -0000 1.9 > +++ Makefile 16 Oct 2007 13:34:54 -0000 > @@ -2,18 +2,15 @@ > > COMMENT= digital camera RAW format conversion tool > > -DISTNAME= dcraw-8.19 > -PKGNAME= ${DISTNAME}p0 > +DISTNAME= dcraw-8.77 > CATEGORIES= graphics > > HOMEPAGE= http://www.cybercom.net/~dcoffin/dcraw/ > > -MASTER_SITES= http://www.oxide.org/dcraw/${DISTNAME}/ > +MASTER_SITES= http://cybercom.net/~dcoffin/dcraw/archive/ > > -DISTFILES= dcraw.c dcraw.1 > -DIST_SUBDIR= ${DISTNAME} > - > -LIB_DEPENDS= jpeg.>=6::graphics/jpeg > +LIB_DEPENDS= jpeg.>=6::graphics/jpeg \ > + lcms::graphics/lcms > > # Some code is completely free, some is under the GPL > PERMIT_PACKAGE_CDROM= Yes > @@ -26,18 +23,16 @@ WANTLIB= c m > NO_REGRESS= Yes > SEPARATE_BUILD= simple > > -do-extract: > - mkdir ${WRKSRC} > - cp ${DISTDIR}/${DIST_SUBDIR}/dcraw.c ${WRKSRC} > +WRKDIST= ${WRKDIR}/dcraw > > do-build: > ${CC} ${CFLAGS} -c -o ${WRKBUILD}/dcraw.o -I${PREFIX}/include \ > - -DNO_LCMS ${WRKSRC}/dcraw.c > - ${CC} ${CFLAGS} -o ${WRKBUILD}/dcraw -ljpeg -lm -L${PREFIX}/lib \ > + ${WRKSRC}/dcraw.c > + ${CC} ${CFLAGS} -o ${WRKBUILD}/dcraw -ljpeg -lm -llcms -L${PREFIX}/lib \ > ${WRKBUILD}/dcraw.o > > do-install: > ${INSTALL_PROGRAM} ${WRKBUILD}/dcraw ${PREFIX}/bin > - ${INSTALL_MAN} ${DISTDIR}/${DIST_SUBDIR}/dcraw.1 ${PREFIX}/man/man1 > + ${INSTALL_MAN} ${WRKSRC}/dcraw.1 ${PREFIX}/man/man1 > > .include <bsd.port.mk> > Index: distinfo > =================================================================== > RCS file: /cvs/ports/graphics/dcraw/distinfo,v > retrieving revision 1.6 > diff -u -p -r1.6 distinfo > --- distinfo 5 Apr 2007 16:19:55 -0000 1.6 > +++ distinfo 15 Oct 2007 21:50:26 -0000 > @@ -1,10 +1,5 @@ > -MD5 (dcraw-8.19/dcraw.1) = vNJLfCgJKmpMW5aHmHExuA== > -MD5 (dcraw-8.19/dcraw.c) = JAhe31ArDu8C2h+fcvP9rw== > -RMD160 (dcraw-8.19/dcraw.1) = AFQx9NoxPpLSRofpwnuSbmX/0XQ= > -RMD160 (dcraw-8.19/dcraw.c) = /2Z77HaYmxPXJ8+zF6DzTya3n9c= > -SHA1 (dcraw-8.19/dcraw.1) = HNar9Dg0M9pDJKzDvAtwmbv4k58= > -SHA1 (dcraw-8.19/dcraw.c) = LyFfZOzLKhHWyZlZTygSDu3F+Yo= > -SHA256 (dcraw-8.19/dcraw.1) = A2lue9u2/etqVWv+aGRXQWbuGOIMeCpkRbw0afvDuE0= > -SHA256 (dcraw-8.19/dcraw.c) = A5TagJRdF2SQSgTuvsI2hIthErjz0Mbc07pQgg7qYC8= > -SIZE (dcraw-8.19/dcraw.1) = 4587 > -SIZE (dcraw-8.19/dcraw.c) = 198498 > +MD5 (dcraw-8.77.tar.gz) = vPa0d/RrmQWfODqT+fdeBQ== > +RMD160 (dcraw-8.77.tar.gz) = VaXU9cr0mJkW/KPGBOFNXBi0Y9I= > +SHA1 (dcraw-8.77.tar.gz) = bTczdvVLGryKdA2S7S7QHJbLfMg= > +SHA256 (dcraw-8.77.tar.gz) = wLcicqrnq0lE17BdGvxCUPe4WpzeKN5ykJqaiqowU88= > +SIZE (dcraw-8.77.tar.gz) = 125758 > Index: patches/patch-dcraw_c > =================================================================== > RCS file: /cvs/ports/graphics/dcraw/patches/patch-dcraw_c,v > retrieving revision 1.5 > diff -u -p -r1.5 patch-dcraw_c > --- patches/patch-dcraw_c 11 Jun 2006 04:12:48 -0000 1.5 > +++ patches/patch-dcraw_c 16 Oct 2007 14:08:59 -0000 > @@ -1,15 +1,26 @@ > ---- dcraw.c.orig Thu May 25 21:08:17 2006 > -+++ dcraw.c Thu May 25 21:09:19 2006 > -@@ -2482,7 +2482,7 @@ > - for (j=0; j < 3; j++) > - FORC3 last[i][j] += correct[i][c] * cam_xyz[c][j]; > +--- dcraw.c.orig Fri Aug 10 22:09:34 2007 > ++++ dcraw.c Tue Oct 16 15:08:49 2007 > +@@ -1167,8 +1167,8 @@ void CLASS nikon_3700() > + bits = (dp[8] & 3) << 4 | (dp[20] & 3); > + for (i=0; i < sizeof table / sizeof *table; i++) > + if (bits == table[i].bits) { > +- strcpy (make, table[i].make ); > +- strcpy (model, table[i].model); > ++ strlcpy (make, table[i].make, sizeof make); > ++ strlcpy (model, table[i].model, sizeof model); > + } > + } > > +@@ -2849,7 +2849,7 @@ void CLASS foveon_interpolate() > + FORC3 diag[c][i] = LAST(1,1)*LAST(2,2) - LAST(1,2)*LAST(2,1); > + #undef LAST > + FORC3 div[c] = diag[c][0]*0.3127 + diag[c][1]*0.329 + diag[c][2]*0.3583; > - sprintf (str, "%sRGBNeutral", model2); > + snprintf (str, sizeof str, "%sRGBNeutral", model2); > if (foveon_camf_param ("IncludeBlocks", str)) > foveon_fixed (div, 3, str); > - else { > -@@ -2853,9 +2853,9 @@ > + num = 0; > +@@ -3213,9 +3213,9 @@ void CLASS bad_pixels() > if (*cp == '\\') *cp = '/'; > #endif > cp = fname + strlen(fname); > @@ -21,43 +32,25 @@ > if ((fp = fopen (fname, "r"))) break; > if (cp == fname) break; > while (*--cp != '/'); > -@@ -3902,7 +3902,7 @@ > - while (1) { > - fread (data, 1, 8, ifp); > - if (strcmp(data,"PKTS")) break; > -- if (!make[0]) strcpy(make,"Leaf"); > -+ if (!make[0]) strlcpy (make, "Leaf", sizeof make); > - fread (data, 1, 40, ifp); > - skip = get4(); > - from = ftell(ifp); > -@@ -3918,7 +3918,7 @@ > - fread (data, 1, 40, ifp); > - for (i=0; i < sizeof mod / sizeof *mod; i++) > - if (data[0] == mod[i][0] && data[1] == toupper(mod[i][1])) > -- sprintf (model, "%s %d", mod[i], atoi(data+2)); > -+ snprintf (model, sizeof model, "%s %d", mod[i], atoi(data+2)); > +@@ -4553,7 +4553,7 @@ void CLASS parse_mos (int offset) > + if (!strcmp(data,"ShootObj_back_type")) { > + fscanf (ifp, "%d", &i); > + if ((unsigned) i < sizeof mod / sizeof (*mod)) > +- strcpy (model, mod[i]); > ++ strlcpy (model, mod[i], sizeof model); > } > - if (!strcmp(data,"CaptProf_color_matrix") && use_camera_wb) { > + if (!strcmp(data,"icc_camera_to_tone_matrix")) { > for (i=0; i < 9; i++) > -@@ -4053,7 +4053,7 @@ > +@@ -4864,7 +4864,7 @@ int CLASS parse_tiff_ifd (int base) > + if (flip % 180 == 90) SWAP(width,height); > + filters = flip = 0; > } > - break; > - case 400: > -- strcpy (make, "Sarnoff"); > -+ strlcpy (make, "Sarnoff", sizeof make); > - maximum = 0xfff; > - break; > - case 29184: sony_offset = get4(); break; > -@@ -4110,7 +4110,7 @@ > - } > - break; > - case 46275: /* Imacon tags */ > -- strcpy (make, "Imacon"); > -+ strlcpy (make, "Imacon", sizeof make); > - data_offset = ftell(ifp); > - ima_len = len; > - break; > -@@ -4389,6 +4389,7 @@ > +- sprintf (model, "Ixpress %d-Mp", height*width/1000000); > ++ snprintf (model, sizeof model, "Ixpress %d-Mp", height*width/1000000); > + load_raw = &CLASS imacon_full_load_raw; > + if (filters) { > + if (left_margin & 1) filters = 0x61616161; > +@@ -5160,6 +5160,7 @@ void CLASS parse_external_jpeg() > { > char *file, *ext, *jname, *jfile, *jext; > FILE *save=ifp; > @@ -65,7 +58,7 @@ > > ext = strrchr (ifname, '.'); > file = strrchr (ifname, '/'); > -@@ -4396,13 +4397,15 @@ > +@@ -5167,13 +5168,15 @@ void CLASS parse_external_jpeg() > if (!file) file = ifname-1; > file++; > if (!ext || strlen(ext) != 4 || ext-file != 8) return; > @@ -84,48 +77,34 @@ > memcpy (jfile, file+4, 4); > memcpy (jfile+4, file, 4); > } else > -@@ -4585,8 +4588,8 @@ > - t.tm_mon -= 1; > - if (mktime(&t) > 0) > - timestamp = mktime(&t); > -- strcpy (make, "Rollei"); > -- strcpy (model,"d530flex"); > -+ strlcpy (make, "Rollei", sizeof make); > -+ strlcpy (model,"d530flex", sizeof model); > - write_thumb = rollei_thumb; > - } > - > -@@ -4647,13 +4650,13 @@ > - load_raw = ph1.format < 3 ? > - phase_one_load_raw : phase_one_load_raw_c; > - maximum = 0xffff; > -- strcpy (make, "Phase One"); > -+ strlcpy (make, "Phase One", sizeof make); > - if (model[0]) return; > - switch (raw_height) { > -- case 2060: strcpy (model,"LightPhase"); break; > -- case 2682: strcpy (model,"H 10"); break; > -- case 4128: strcpy (model,"H 20"); break; > -- case 5488: strcpy (model,"H 25"); break; > -+ case 2060: strlcpy (model,"LightPhase", sizeof model); break; > -+ case 2682: strlcpy (model,"H 10", sizeof model); break; > -+ case 4128: strlcpy (model,"H 20", sizeof model); break; > -+ case 5488: strlcpy (model,"H 25", sizeof model); break; > +@@ -5390,7 +5393,7 @@ void CLASS parse_sinar_ia() > + fread (make, 64, 1, ifp); > + make[63] = 0; > + if ((cp = strchr(make,' '))) { > +- strcpy (model, cp+1); > ++ strlcpy (model, cp+1, sizeof model); > + *cp = 0; > } > - } > - > -@@ -4756,8 +4759,8 @@ > - if (ver > 6) data_offset = get4(); > + raw_width = get2(); > +@@ -5568,7 +5571,7 @@ void CLASS parse_smal (int offset, int fsize) > raw_height = height = get2(); > raw_width = width = get2(); > -- strcpy (make, "SMaL"); > + strcpy (make, "SMaL"); > - sprintf (model, "v%d %dx%d", ver, width, height); > -+ strlcpy (make, "SMaL", sizeof make); > + snprintf (model, sizeof model, "v%d %dx%d", ver, width, height); > - if (ver == 6) load_raw = smal_v6_load_raw; > - if (ver == 9) load_raw = smal_v9_load_raw; > + if (ver == 6) load_raw = &CLASS smal_v6_load_raw; > + if (ver == 9) load_raw = &CLASS smal_v9_load_raw; > } > -@@ -4833,11 +4836,11 @@ > +@@ -5596,7 +5599,7 @@ void CLASS parse_cine() > + } > + fseek (ifp, off_setup+792, SEEK_SET); > + strcpy (make, "CINE"); > +- sprintf (model, "%d", get4()); > ++ snprintf (model, sizeof model, "%d", get4()); > + fseek (ifp, 12, SEEK_CUR); > + switch ((i=get4()) & 0xffffff) { > + case 3: filters = 0x94949494; break; > +@@ -5696,11 +5699,11 @@ void CLASS parse_foveon() > if (!strcmp (name, "ISO")) > iso_speed = atoi(value); > if (!strcmp (name, "CAMMANUF")) > @@ -140,7 +119,7 @@ > if (!strcmp (name, "TIME")) > timestamp = atoi(value); > if (!strcmp (name, "EXPTIME")) > -@@ -5118,7 +5121,7 @@ > +@@ -6067,7 +6070,7 @@ void CLASS adobe_coeff (char *make, char *model) > char name[130]; > int i, j; > > @@ -149,45 +128,7 @@ > for (i=0; i < sizeof table / sizeof *table; i++) > if (!strncmp (name, table[i].prefix, strlen(table[i].prefix))) { > if (table[i].black) > -@@ -5278,14 +5281,14 @@ > - order = 0x4949; > - fseek (ifp, 38, SEEK_SET); > - if (get4() == 2834 && get4() == 2834 && get4() == 0 && get4() == 4096) { > -- strcpy (model, "BMQ"); > -+ strlcpy (model, "BMQ", sizeof model); > - flip = 3; > - goto nucore; > - } > - } else if (!memcmp (head,"BR",2)) { > -- strcpy (model, "RAW"); > -+ strlcpy (model, "RAW", sizeof model); > - nucore: > -- strcpy (make, "Nucore"); > -+ strlcpy (make, "Nucore", sizeof make); > - order = 0x4949; > - fseek (ifp, 10, SEEK_SET); > - data_offset += get4(); > -@@ -5296,15 +5299,15 @@ > - data_offset -= 0x1000; > - } > - } else if (!memcmp (head+25,"ARECOYK",7)) { > -- strcpy (make, "Contax"); > -- strcpy (model,"N Digital"); > -+ strlcpy (make, "Contax", sizeof make); > -+ strlcpy (model,"N Digital", sizeof model); > - fseek (ifp, 33, SEEK_SET); > - get_timestamp(1); > - fseek (ifp, 60, SEEK_SET); > - FORC4 cam_mul[c ^ (c >> 1)] = get4(); > - } else if (!strcmp (head, "PXN")) { > -- strcpy (make, "Logitech"); > -- strcpy (model,"Fotoman Pixtura"); > -+ strlcpy (make, "Logitech", sizeof make); > -+ strlcpy (model,"Fotoman Pixtura", sizeof model); > - } else if (!memcmp (head,"FUJIFILM",8)) { > - fseek (ifp, 84, SEEK_SET); > - thumb_offset = get4(); > -@@ -5332,8 +5335,8 @@ > +@@ -6287,8 +6290,8 @@ void CLASS identify() > else > for (i=0; i < sizeof table / sizeof *table; i++) > if (fsize == table[i].fsize) { > @@ -198,7 +139,7 @@ > if (table[i].withjpeg) > parse_external_jpeg(); > } > -@@ -5344,7 +5347,7 @@ > +@@ -6297,7 +6300,7 @@ void CLASS identify() > > for (i=0; i < sizeof corp / sizeof *corp; i++) > if (strstr (make, corp[i])) /* Simplify company names */ > @@ -207,144 +148,39 @@ > if (!strncmp (make,"KODAK",5)) > make[16] = model[16] = 0; > cp = make + strlen(make); /* Remove trailing spaces */ > -@@ -5368,7 +5371,7 @@ > - xmag = ymag = 1; > - } > - if (dng_version) { > -- strcat (model," DNG"); > -+ strlcat (model," DNG", sizeof model); > - if (filters == UINT_MAX) filters = 0; > - if (!filters) > - colors = tiff_samples; > -@@ -5542,7 +5545,7 @@ > - filters = 0xe1e1e1e1; > - load_raw = nikon_load_raw; > - if (!timestamp && nikon_e995()) > -- strcpy (model, "E995"); > -+ strlcpy (model, "E995", sizeof model); > - if (strcmp(model,"E995")) { > - filters = 0xb4b4b4b4; > - simple_coeff(3); > -@@ -5559,7 +5562,7 @@ > - pre_mul[2] = 1.040; > - } else if (!strcmp(model,"E2500")) { > - cp_e2500: > -- strcpy (model, "E2500"); > -+ strlcpy (model, "E2500", sizeof model); > - height = 1204; > - width = 1616; > - colors = 4; > -@@ -5571,11 +5574,11 @@ > - pre_mul[0] = 1.818; > - pre_mul[2] = 1.618; > - if ((i = nikon_3700()) == 2) { > -- strcpy (make, "OLYMPUS"); > -- strcpy (model, "C740UZ"); > -+ strlcpy (make, "OLYMPUS", sizeof make); > -+ strlcpy (model, "C740UZ", sizeof model); > - } else if (i == 0) { > -- strcpy (make, "PENTAX"); > -- strcpy (model,"Optio 33WR"); > -+ strlcpy (make, "PENTAX", sizeof make); > -+ strlcpy (model,"Optio 33WR", sizeof model); > - flip = 1; > - filters = 0x16161616; > - pre_mul[0] = 1.331; > -@@ -5586,8 +5589,8 @@ > - width = 2288; > - filters = 0x16161616; > - if (!timestamp && minolta_z2()) { > -- strcpy (make, "Minolta"); > -- strcpy (model,"DiMAGE Z2"); > -+ strlcpy (make, "Minolta", sizeof make); > -+ strlcpy (model,"DiMAGE Z2", sizeof model); > - } > - if (make[0] == 'M') > - load_raw = nikon_e2100_load_raw; > -@@ -5610,7 +5613,7 @@ > +@@ -6484,6 +6487,12 @@ void CLASS identify() > + top_margin = 12; > + left_margin = 74; > + goto canon_cr2; > ++ } else if (is_canon && raw_width == 3944) { /* 40D */ > ++ height = 2602; > ++ width = 3908; > ++ top_margin = 18; > ++ left_margin = 30; > ++ maximum = 0x3fff; > + } else if (is_canon && raw_width == 3948) { > + top_margin = 18; > + left_margin = 42; > +@@ -6629,7 +6638,7 @@ cp_e2500: > maximum = 0x3e00; > } else if (!strncmp(model,"FinePix",7)) { > if (!strcmp(model+7,"S2Pro")) { > - strcpy (model+7," S2Pro"); > -+ strlcpy (model + 7, " S2Pro", sizeof model - 7); > ++ strcpy (model + 7, " S2Pro"); > height = 2144; > width = 2880; > flip = 6; > -@@ -5658,7 +5661,7 @@ > +@@ -6672,7 +6681,7 @@ cp_e2500: > } else if (!strncmp(model,"ALPHA",5) || > !strncmp(model,"DYNAX",5) || > !strncmp(model,"MAXXUM",6)) { > -- sprintf (model, "DYNAX %s", model+6 + (model[0]=='M')); > -+ snprintf (model, sizeof model, "DYNAX %s", model+6 + (model[0]=='M')); > - load_raw = packed_12_load_raw; > +- sprintf (model+20, "DYNAX %-10s", model+6+(model[0]=='M')); > ++ snprintf (model+20, sizeof model - 20, "DYNAX %-10s", > model+6+(model[0]=='M')); > + adobe_coeff (make, model+20); > + load_raw = &CLASS packed_12_load_raw; > maximum = 0xffb; > - } else if (!strncmp(model,"DiMAGE G",8)) { > -@@ -5782,11 +5785,11 @@ > - height -= 16; > - width -= 28; > - maximum = 0xf5c0; > -- strcpy (make, "ISG"); > -+ strlcpy (make, "ISG", sizeof make); > - model[0] = 0; > - } > - } else if (!strcmp(make,"Imacon")) { > -- sprintf (model, "Ixpress %d-Mp", height*width/1000000); > -+ snprintf (model, sizeof model, "Ixpress %d-Mp", height*width/1000000); > - load_raw = imacon_full_load_raw; > - if (filters) { > - data_offset += (top_margin*raw_width + left_margin) * 2; > -@@ -5809,7 +5812,7 @@ > - load_raw = lossless_jpeg_load_raw; > - maximum = 0x3fff; > - if (filters == 0) { > -- strcpy (model, "Volare"); > -+ strlcpy (model, "Volare", sizeof model); > - load_raw = leaf_full_load_raw; > - maximum = 0xffff; > - raw_color = 0; > -@@ -5871,7 +5874,7 @@ > - load_raw = sony_load_raw; > - filters = 0x9c9c9c9c; > - colors = 4; > -- strcpy (cdesc, "RGBE"); > -+ strlcpy (cdesc, "RGBE", sizeof cdesc); > - } else if (!strcmp(model,"DSC-V3")) { > - width = 3109; > - left_margin = 59; > -@@ -5916,7 +5919,7 @@ > - if (load_raw == eight_bit_load_raw) > - load_raw = kodak_easy_load_raw; > - if (strstr(model,"DC25")) { > -- strcpy (model, "DC25"); > -+ strlcpy (model, "DC25", sizeof model); > - data_offset = 15424; > - } > - if (!strncmp(model,"DC2",3)) { > -@@ -5935,19 +5938,19 @@ > - pre_mul[3] = 1.036; > - load_raw = kodak_easy_load_raw; > - } else if (!strcmp(model,"Digital Camera 40")) { > -- strcpy (model, "DC40"); > -+ strlcpy (model, "DC40", sizeof model); > - height = 512; > - width = 768; > - data_offset = 1152; > - load_raw = kodak_radc_load_raw; > - } else if (strstr(model,"DC50")) { > -- strcpy (model, "DC50"); > -+ strlcpy (model, "DC50", sizeof model); > - height = 512; > - width = 768; > - data_offset = 19712; > - load_raw = kodak_radc_load_raw; > - } else if (strstr(model,"DC120")) { > -- strcpy (model, "DC120"); > -+ strlcpy (model, "DC120", sizeof model); > - height = 976; > - width = 848; > - load_raw = (tiff_compress == 7) > -@@ -6063,7 +6066,7 @@ > - } > +@@ -7195,7 +7204,7 @@ qt_common: > + pre_mul[2] = 1.504; > } > if (!model[0]) > - sprintf (model, "%dx%d", width, height); > @@ -352,42 +188,56 @@ > if (filters == UINT_MAX) filters = 0x94949494; > if (raw_color) adobe_coeff (make, model); > if (thumb_offset && !thumb_height) { > -@@ -6084,7 +6087,7 @@ > - if (flip == -1) flip = tiff_flip; > - if (flip == -1) flip = 0; > - if (!cdesc[0]) > -- strcpy (cdesc, colors == 3 ? "RGB":"GMCY"); > -+ strlcpy (cdesc, colors == 3 ? "RGB":"GMCY", sizeof cdesc); > - if (!raw_height) raw_height = height; > - if (!raw_width ) raw_width = width; > - if (filters && colors == 3) > -@@ -6374,6 +6377,7 @@ > +@@ -7359,8 +7368,8 @@ void CLASS convert_to_rgb() > + } > + for (i=0; i < phead[0]/4; i++) > + oprof[i] = htonl(oprof[i]); > +- strcpy ((char *)oprof+pbody[2]+8, "auto-generated by dcraw"); > +- strcpy ((char *)oprof+pbody[5]+12, name[output_color-1]); > ++ strlcpy ((char *)oprof+pbody[2]+8, "auto-generated by dcraw", sizeof > oprof-pbody[2]-8); > ++ strlcpy ((char *)oprof+pbody[5]+12, name[output_color-1], sizeof > oprof-pbody[5]-12); > + for (i=0; i < 3; i++) > + for (j=0; j < colors; j++) > + for (out_cam[i][j] = k=0; k < 3; k++) > +@@ -7590,7 +7599,7 @@ void CLASS tiff_head (struct tiff_hdr *th, int full) > + strncpy (th->model, model, 64); > + strcpy (th->soft, "dcraw v"VERSION); > + t = gmtime (×tamp); > +- sprintf (th->date, "%04d:%02d:%02d %02d:%02d:%02d", > ++ snprintf (th->date, sizeof th->date, "%04d:%02d:%02d %02d:%02d:%02d", > + > t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); > + strncpy (th->artist, artist, 64); > + } > +@@ -7668,6 +7677,7 @@ int CLASS main (int argc, char **argv) > const char *write_ext; > struct utimbuf ut; > FILE *ofp = stdout; > + size_t ofsize; > - void (*write_image)(FILE *) = write_ppm; > #ifndef NO_LCMS > - char *cam_profile = NULL, *out_profile = NULL; > -@@ -6649,16 +6653,17 @@ > - write_ext = ".psd"; > + char *cam_profile=0, *out_profile=0; > + #endif > +@@ -7979,19 +7989,20 @@ thumbnail: > + write_ext = ".tiff"; > else > write_ext = ".pgm\0.ppm\0.ppm\0.pam" + colors*5-5; > -- ofname = (char *) malloc (strlen(ifname) + 16); > -+ ofsize = strlen(ifname) + 16; > +- ofname = (char *) malloc (strlen(ifname) + 64); > ++ ofsize = strlen(ifname) + 64; > + ofname = (char *) malloc (ofsize); > merror (ofname, "main()"); > if (write_to_stdout) > -- strcpy (ofname, "standard output"); > -+ strlcpy (ofname, "standard output", ofsize); > + strcpy (ofname,_("standard output")); > else { > - strcpy (ofname, ifname); > + strlcpy (ofname, ifname, ofsize); > if ((cp = strrchr (ofname, '.'))) *cp = 0; > + if (multi_out) > +- sprintf (ofname+strlen(ofname), "_%0*d", > ++ snprintf (ofname+strlen(ofname), ofsize-strlen(ofname), "_%0*d", > + snprintf(0,0,"%d",is_raw-1), shot_select); > if (thumbnail_only) > - strcat (ofname, ".thumb"); > - strcat (ofname, write_ext); > -+ strlcat (ofname, ".thumb", ofsize); > ++ strlcat (ofname, ".thumb", ofsize); > + strlcat (ofname, write_ext, ofsize); > ofp = fopen (ofname, "wb"); > if (!ofp) { >