View | Details | Raw Unified | Return to bug 44841
Collapse All | Expand All

(-)../apr.20080417222010/file_io/unix/copy.c (+10 lines)
Lines 110-112 Link Here
110
                                      perms,
110
                                      perms,
111
                                      pool);
111
                                      pool);
112
}
112
}
113
114
APR_DECLARE(apr_status_t) apr_file_link(const char *from_path, 
115
                                          const char *to_path)
116
{
117
    if (link(from_path, to_path) == -1) {
118
        return errno;
119
    }
120
121
    return APR_SUCCESS;
122
}
(-)../apr.20080417222010/file_io/win32/open.c (+30 lines)
Lines 578-583 Link Here
578
    return apr_get_os_error();
578
    return apr_get_os_error();
579
}
579
}
580
580
581
APR_DECLARE(apr_status_t) apr_file_link(const char *from_path, 
582
                                           const char *to_path)
583
{
584
    apr_status_t rv;
585
586
#if APR_HAS_UNICODE_FS
587
    IF_WIN_OS_IS_UNICODE
588
    {
589
        apr_wchar_t wfrom_path[APR_PATH_MAX];
590
        apr_wchar_t wto_path[APR_PATH_MAX];
591
592
        if (rv = utf8_to_unicode_path(wfrom_path, sizeof(wfrom_path) 
593
                                               / sizeof(apr_wchar_t), from_path))
594
            return rv;
595
        if (rv = utf8_to_unicode_path(wto_path, sizeof(wto_path) 
596
                                               / sizeof(apr_wchar_t), to_path))
597
            return rv;
598
599
        if (!CreateHardLinkW(wto_path, wfrom_path))
600
                return apr_get_os_error()
601
    }
602
#endif
603
#if APR_HAS_ANSI_FS
604
    ELSE_WIN_OS_IS_ANSI {
605
        if (!CreateHardLinkA(wto_path, wfrom_path))
606
                return apr_get_os_error()
607
    }
608
#endif
609
}
610
581
APR_DECLARE(apr_status_t) apr_os_file_get(apr_os_file_t *thefile,
611
APR_DECLARE(apr_status_t) apr_os_file_get(apr_os_file_t *thefile,
582
                                          apr_file_t *file)
612
                                          apr_file_t *file)
583
{
613
{
(-)../apr.20080417222010/include/apr_file_io.h (+9 lines)
Lines 265-270 Link Here
265
                                          apr_pool_t *pool);
265
                                          apr_pool_t *pool);
266
266
267
/**
267
/**
268
 * Create a hard link to the specified file.
269
 * @param from_path The full path to the original file (using / on all systems)
270
 * @param to_path The full path to the new file (using / on all systems)
271
 * @remark Both files must reside on the same device.
272
 */
273
APR_DECLARE(apr_status_t) apr_file_link(const char *from_path, 
274
                                          const char *to_path);
275
276
/**
268
 * Copy the specified file to another file.
277
 * Copy the specified file to another file.
269
 * @param from_path The full path to the original file (using / on all systems)
278
 * @param from_path The full path to the original file (using / on all systems)
270
 * @param to_path The full path to the new file (using / on all systems)
279
 * @param to_path The full path to the new file (using / on all systems)
(-)../apr.20080417222010/test/abts_tests.h (+1 lines)
Lines 30-35 Link Here
30
    {testenv},
30
    {testenv},
31
    {testfile},
31
    {testfile},
32
    {testfilecopy},
32
    {testfilecopy},
33
    {testfilelink},
33
    {testfileinfo},
34
    {testfileinfo},
34
    {testflock},
35
    {testflock},
35
    {testfmt},
36
    {testfmt},
(-)../apr.20080417222010/test/testfilelink.c (+49 lines)
Line 0 Link Here
1
/* Licensed to the Apache Software Foundation (ASF) under one or more
2
 * contributor license agreements.  See the NOTICE file distributed with
3
 * this work for additional information regarding copyright ownership.
4
 * The ASF licenses this file to You under the Apache License, Version 2.0
5
 * (the "License"); you may not use this file except in compliance with
6
 * the License.  You may obtain a copy of the License at
7
 *
8
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
#include "testutil.h"
18
#include "apr_file_io.h"
19
#include "apr_file_info.h"
20
#include "apr_errno.h"
21
#include "apr_pools.h"
22
23
static void link_existing(abts_case *tc, void *data)
24
{
25
    apr_status_t rv;
26
    
27
    rv = apr_file_link("data/file_datafile.txt", "data/file_datafile2.txt");
28
    apr_file_remove("data/file_datafile2.txt", p);
29
    ABTS_ASSERT(tc, "Couldn't create hardlink to file", rv == APR_SUCCESS);
30
}
31
32
static void link_nonexisting(abts_case *tc, void *data)
33
{
34
    apr_status_t rv;
35
    
36
    rv = apr_file_link("data/does_not_exist.txt", "data/fake.txt");
37
    ABTS_ASSERT(tc, "", rv != APR_SUCCESS);
38
}
39
40
abts_suite *testfilelink(abts_suite *suite)
41
{
42
    suite = ADD_SUITE(suite)
43
44
    abts_run_test(suite, link_existing, NULL);
45
    abts_run_test(suite, link_nonexisting, NULL);
46
47
    return suite;
48
}
49
(-)../apr.20080417222010/test/testutil.h (+1 lines)
Lines 68-73 Link Here
68
abts_suite *testfile(abts_suite *suite);
68
abts_suite *testfile(abts_suite *suite);
69
abts_suite *testfilecopy(abts_suite *suite);
69
abts_suite *testfilecopy(abts_suite *suite);
70
abts_suite *testfileinfo(abts_suite *suite);
70
abts_suite *testfileinfo(abts_suite *suite);
71
abts_suite *testfilelink(abts_suite *suite);
71
abts_suite *testflock(abts_suite *suite);
72
abts_suite *testflock(abts_suite *suite);
72
abts_suite *testfmt(abts_suite *suite);
73
abts_suite *testfmt(abts_suite *suite);
73
abts_suite *testfnmatch(abts_suite *suite);
74
abts_suite *testfnmatch(abts_suite *suite);

Return to bug 44841