<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>158473</bug_id>
          
          <creation_ts>2016-06-07 03:41:00 -0700</creation_ts>
          <short_desc>[GLIB] Implement hardLinkOrCopyFile() in FileSystemGlib</short_desc>
          <delta_ts>2016-06-07 23:50:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1199992</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-07 03:41:00 -0700</bug_when>
    <thetext>It was added in r199230 to be used by IndexedDB blob support, but never implemented for GLib.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199993</commentid>
    <comment_count>1</comment_count>
      <attachid>280689</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-07 03:43:06 -0700</bug_when>
    <thetext>Created attachment 280689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200001</commentid>
    <comment_count>2</comment_count>
      <attachid>280689</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2016-06-07 04:15:00 -0700</bug_when>
    <thetext>Comment on attachment 280689
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=280689&amp;action=review

Informally reviewed. LGTM with a nit.

&gt; Source/WebCore/platform/glib/FileSystemGlib.cpp:385
&gt; +    if (!link(sourceFilename.get(), destinationFilename.get()))

In Windows the CreateHardLink() function could be used here instead of always copying the file (though it only works in NTFS, see: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363860(v=vs.85).aspx), so please add a TODO comment here to let developers working in Windows that they may want to add the relevant code in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200004</commentid>
    <comment_count>3</comment_count>
      <attachid>280694</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-07 04:40:55 -0700</bug_when>
    <thetext>Created attachment 280694
Patch

Add windows implementation too (copied from FileSystemWin.cpp and untested).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200030</commentid>
    <comment_count>4</comment_count>
      <attachid>280694</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-06-07 07:13:26 -0700</bug_when>
    <thetext>Comment on attachment 280694
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=280694&amp;action=review

&gt; Source/WebCore/platform/glib/FileSystemGlib.cpp:394
&gt; +    return g_file_copy(sourceFile.get(), destinationFile.get(), G_FILE_COPY_NONE, nullptr, nullptr, nullptr, nullptr);

Probably should use G_FILE_COPY_OVERWRITE instead of G_FILE_COPY_NONE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200120</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-07 10:47:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 280694 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280694&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/glib/FileSystemGlib.cpp:394
&gt; &gt; +    return g_file_copy(sourceFile.get(), destinationFile.get(), G_FILE_COPY_NONE, nullptr, nullptr, nullptr, nullptr);
&gt; 
&gt; Probably should use G_FILE_COPY_OVERWRITE instead of G_FILE_COPY_NONE?

I don&apos;t think so, this is a fallback for link, and link fails if destination exists. I think the posix implementation also fails if destination exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200361</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-07 23:50:33 -0700</bug_when>
    <thetext>Committed r201796: &lt;http://trac.webkit.org/changeset/201796&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280689</attachid>
            <date>2016-06-07 03:43:06 -0700</date>
            <delta_ts>2016-06-07 04:40:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-link-or-copy-glib.diff</filename>
            <type>text/plain</type>
            <size>1886</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OWQ5MWI5Li43MmIwZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTYtMDYtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHTElCXSBJbXBsZW1lbnQgaGFyZExpbmtPckNvcHlGaWxlKCkgaW4gRmls
ZVN5c3RlbUdsaWIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1ODQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEl0IHdhcyBhZGRlZCBpbiByMTk5MjMwIHRvIGJlIHVzZWQgYnkgSW5kZXhlZERCIGJsb2Ig
c3VwcG9ydCwgYnV0IG5ldmVyIGltcGxlbWVudGVkIGZvciBHTGliLgorCisgICAgICAgICogcGxh
dGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXJkTGlu
a09yQ29weUZpbGUpOgorCiAyMDE2LTA2LTA2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjAxNzM1Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRl
eCBhMDg5MmVjLi44MjA4ZjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMzcyLDEwICszNzIsMjMgQEAgYm9vbCB1bmxvYWRNb2R1
bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQogI2VuZGlmCiB9CiAKLWJvb2wgaGFyZExpbmtPckNv
cHlGaWxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitib29sIGhhcmRMaW5rT3JDb3B5
RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKIHsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEdVbmlxdWVQ
dHI8Z2NoYXI+IHNvdXJjZUZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUoc291cmNlKTsKKyAg
ICBpZiAoIXNvdXJjZUZpbGVuYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHVW5p
cXVlUHRyPGdjaGFyPiBkZXN0aW5hdGlvbkZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUoZGVz
dGluYXRpb24pOworICAgIGlmICghZGVzdGluYXRpb25GaWxlbmFtZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFsaW5rKHNvdXJjZUZpbGVuYW1lLmdldCgpLCBkZXN0aW5hdGlv
bkZpbGVuYW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBIYXJkIGxp
bmsgZmFpbGVkLiBQZXJmb3JtIGEgY29weSBpbnN0ZWFkLgorICAgIEdSZWZQdHI8R0ZpbGU+IHNv
dXJjZUZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VGaWxlbmFtZS5n
ZXQoKSkpOworICAgIEdSZWZQdHI8R0ZpbGU+IGRlc3RpbmF0aW9uRmlsZSA9IGFkb3B0R1JlZihn
X2ZpbGVfbmV3X2Zvcl9wYXRoKGRlc3RpbmF0aW9uRmlsZW5hbWUuZ2V0KCkpKTsKKyAgICByZXR1
cm4gZ19maWxlX2NvcHkoc291cmNlRmlsZS5nZXQoKSwgZGVzdGluYXRpb25GaWxlLmdldCgpLCBH
X0ZJTEVfQ09QWV9OT05FLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKIH0K
IAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280694</attachid>
            <date>2016-06-07 04:40:55 -0700</date>
            <delta_ts>2016-06-07 07:13:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-link-or-copy-glib.diff</filename>
            <type>text/plain</type>
            <size>2049</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OWQ5MWI5Li43MmIwZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTYtMDYtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHTElCXSBJbXBsZW1lbnQgaGFyZExpbmtPckNvcHlGaWxlKCkgaW4gRmls
ZVN5c3RlbUdsaWIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1ODQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEl0IHdhcyBhZGRlZCBpbiByMTk5MjMwIHRvIGJlIHVzZWQgYnkgSW5kZXhlZERCIGJsb2Ig
c3VwcG9ydCwgYnV0IG5ldmVyIGltcGxlbWVudGVkIGZvciBHTGliLgorCisgICAgICAgICogcGxh
dGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXJkTGlu
a09yQ29weUZpbGUpOgorCiAyMDE2LTA2LTA2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjAxNzM1Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRl
eCBhMDg5MmVjLi4xZDExYjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMzcyLDEwICszNzIsMjcgQEAgYm9vbCB1bmxvYWRNb2R1
bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQogI2VuZGlmCiB9CiAKLWJvb2wgaGFyZExpbmtPckNv
cHlGaWxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitib29sIGhhcmRMaW5rT3JDb3B5
RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKIHsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOworI2lmIE9TKFdJTkRP
V1MpCisgICAgcmV0dXJuICEhOjpDb3B5RmlsZShzb3VyY2UuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIGRlc3RpbmF0aW9uLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkuZGF0YSgpLCBUUlVFKTsKKyNlbHNlCisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc291cmNl
RmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShzb3VyY2UpOworICAgIGlmICghc291cmNlRmls
ZW5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGRl
c3RpbmF0aW9uRmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShkZXN0aW5hdGlvbik7CisgICAg
aWYgKCFkZXN0aW5hdGlvbkZpbGVuYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWxpbmsoc291cmNlRmlsZW5hbWUuZ2V0KCksIGRlc3RpbmF0aW9uRmlsZW5hbWUuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBlcmZv
cm0gYSBjb3B5IGluc3RlYWQuCisgICAgR1JlZlB0cjxHRmlsZT4gc291cmNlRmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZUZpbGVuYW1lLmdldCgpKSk7CisgICAgR1Jl
ZlB0cjxHRmlsZT4gZGVzdGluYXRpb25GaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZGVzdGluYXRpb25GaWxlbmFtZS5nZXQoKSkpOworICAgIHJldHVybiBnX2ZpbGVfY29weShz
b3VyY2VGaWxlLmdldCgpLCBkZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DT1BZX05PTkUs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworI2VuZGlmCiB9CiAKIH0K
</data>
<flag name="review"
          id="304597"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>