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/testfilecopy.c (+20 lines)
Lines 123-128 Link Here
123
    APR_ASSERT_SUCCESS(tc, "Couldn't remove copy file", rv);
123
    APR_ASSERT_SUCCESS(tc, "Couldn't remove copy file", rv);
124
}
124
}
125
125
126
static void link_existing(abts_case *tc, void *data)
127
{
128
    apr_status_t rv;
129
    
130
    rv = apr_file_link("data/file_datafile.txt", "data/file_datafile2.txt");
131
    apr_file_remove("data/file_datafile2.txt", p);
132
    ABTS_ASSERT(tc, "Couldn't create hardlink to file", rv == APR_SUCCESS);
133
}
134
135
static void link_nonexisting(abts_case *tc, void *data)
136
{
137
    apr_status_t rv;
138
    
139
    rv = apr_file_link("data/does_not_exist.txt", "data/fake.txt");
140
    ABTS_ASSERT(tc, "", rv != APR_SUCCESS);
141
}
142
126
abts_suite *testfilecopy(abts_suite *suite)
143
abts_suite *testfilecopy(abts_suite *suite)
127
{
144
{
128
    suite = ADD_SUITE(suite)
145
    suite = ADD_SUITE(suite)
Lines 133-138 Link Here
133
    abts_run_test(suite, append_nonexist, NULL);
150
    abts_run_test(suite, append_nonexist, NULL);
134
    abts_run_test(suite, append_exist, NULL);
151
    abts_run_test(suite, append_exist, NULL);
135
152
153
    abts_run_test(suite, link_existing, NULL);
154
    abts_run_test(suite, link_nonexisting, NULL);
155
136
    return suite;
156
    return suite;
137
}
157
}
138
158

Return to bug 44841