You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2022/01/14 14:01:51 UTC
svn commit: r1897034 [23/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client-side/svn_load_dirs/ contrib/hook-scripts/ contrib/s...
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c (original)
+++ subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c Fri Jan 14 14:01:45 2022
@@ -922,7 +922,7 @@ readline_apr_lf(apr_file_t *file,
}
/* Otherwise, prepare to read the next chunk. */
- svn_stringbuf_ensure(buf, buf->blocksize + SVN__LINE_CHUNK_SIZE);
+ svn_stringbuf_ensure(buf, buf->len + SVN__LINE_CHUNK_SIZE);
}
}
@@ -982,7 +982,7 @@ readline_apr_generic(apr_file_t *file,
}
/* Prepare to read the next chunk. */
- svn_stringbuf_ensure(buf, buf->blocksize + SVN__LINE_CHUNK_SIZE);
+ svn_stringbuf_ensure(buf, buf->len + SVN__LINE_CHUNK_SIZE);
}
}
@@ -2172,6 +2172,9 @@ struct install_baton_t
{
struct baton_apr baton_apr;
const char *tmp_path;
+ svn_boolean_t set_read_only;
+ svn_boolean_t set_executable;
+ apr_time_t set_mtime;
};
#ifdef WIN32
@@ -2313,6 +2316,9 @@ svn_stream__create_for_install(svn_strea
(*install_stream)->baton = ib;
ib->tmp_path = tmp_path;
+ ib->set_read_only = FALSE;
+ ib->set_executable = FALSE;
+ ib->set_mtime = -1;
/* Don't close the file on stream close; flush instead */
svn_stream_set_close(*install_stream, install_close);
@@ -2320,6 +2326,178 @@ svn_stream__create_for_install(svn_strea
return SVN_NO_ERROR;
}
+void
+svn_stream__install_set_read_only(svn_stream_t *install_stream,
+ svn_boolean_t read_only)
+{
+ struct install_baton_t *ib = install_stream->baton;
+
+ ib->set_read_only = read_only;
+}
+
+void
+svn_stream__install_set_executable(svn_stream_t *install_stream,
+ svn_boolean_t executable)
+{
+ struct install_baton_t *ib = install_stream->baton;
+
+ ib->set_executable = executable;
+}
+
+void
+svn_stream__install_set_affected_time(svn_stream_t *install_stream,
+ apr_time_t mtime)
+{
+ struct install_baton_t *ib = install_stream->baton;
+
+ ib->set_mtime = mtime;
+}
+
+/* Helper function that closes the underlying file of the install stream
+ and update the state in the baton. */
+static svn_error_t *
+install_stream_close_file(struct install_baton_t *ib,
+ apr_pool_t *scratch_pool)
+{
+ if (ib->baton_apr.file)
+ {
+ SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
+ ib->baton_apr.file = NULL;
+ }
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_stream__install_finalize(apr_time_t *mtime_p,
+ apr_off_t *size_p,
+ svn_stream_t *install_stream,
+ apr_pool_t *scratch_pool)
+{
+ struct install_baton_t *ib = install_stream->baton;
+ svn_boolean_t finalized = FALSE;
+ apr_finfo_t finfo;
+ apr_int32_t wanted;
+
+#ifdef WIN32
+ /* If the caller asked us for the timestamp with a non-null MTIME_P,
+ ensure that subsequent I/O operations won't change it; see below.
+ */
+ if (ib->set_mtime >= 0 || ib->set_read_only || mtime_p)
+ {
+ apr_time_t set_mtime;
+ svn_error_t *err;
+
+ /* On Windows, the file systems may defer processing of timestamps until
+ the file handle is closed, as specified in [1]. Since we peek and
+ return the current timestamp, we MUST ensure that the timestamp does
+ not change after the call to finalize().
+
+ Luckily, there are two options that guarantee that the file will keep
+ its current timestamp after close. We can either explicitly set a new
+ timestamp, or use a special option that instructs the file system to
+ suspend updates for timestamp values for all subsequent I/O operations.
+ Both of these options guarantee [2, 3] that no other operation will
+ change the final timestamp. So we use both of them, depending on
+ whether the caller wants us to set a specific timestamp, or not.
+
+ [1: MS-FSA, 2.1.4.17, Note <42>]
+ File systems may choose to defer processing for a file that has been
+ modified to a later time, favoring performance over accuracy. The NTFS
+ file system on versions prior to Windows 10 v1809 operating system,
+ Windows Server v1809 operating system, and Windows Server 2019, and
+ non-NTFS file systems on all versions of Windows, defer this processing
+ until the Open gets closed.
+ https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fsa/4e3695bd-7574-4f24-a223-b4679c065b63#Appendix_A_42
+
+ [2: MS-FSA 2.1.5.14.2]
+ If InputBuffer.LastWriteTime != 0:
+ If InputBuffer.LastWriteTime != -2:
+ The object store MUST set Open.UserSetModificationTime to TRUE.
+ https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fsa/a36513b4-73c8-4888-ad29-8f3a196567e8
+
+ [3: MS-FSA 2.1.4.17]
+ If Open.UserSetModificationTime is FALSE, set Open.File.LastModificationTime
+ to the current system time.
+ https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fsa/75cdaba1-4401-4c53-b09c-69ba6cd50ce6
+ */
+ if (ib->set_mtime >= 0)
+ set_mtime = ib->set_mtime;
+ else
+ set_mtime = SVN_IO__WIN_TIME_SUSPEND_UPDATE;
+
+ err = svn_io__win_set_file_basic_info(ib->baton_apr.file, ib->tmp_path,
+ set_mtime, ib->set_read_only,
+ scratch_pool);
+
+ if (err && err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
+ {
+ /* Setting information by handle is not supported on this platform:
+ fallback to setting it by path. */
+ svn_error_clear(err);
+ }
+ else if (err)
+ {
+ return svn_error_trace(err);
+ }
+ else
+ {
+ finalized = TRUE;
+ }
+ }
+ else
+ {
+ finalized = TRUE;
+ }
+#endif
+
+ if (!finalized)
+ {
+ SVN_ERR(install_stream_close_file(ib, scratch_pool));
+
+ if (ib->set_read_only)
+ SVN_ERR(svn_io_set_file_read_only(ib->tmp_path, FALSE,
+ scratch_pool));
+ if (ib->set_executable)
+ SVN_ERR(svn_io_set_file_executable(ib->tmp_path, TRUE, FALSE,
+ scratch_pool));
+ if (ib->set_mtime >= 0)
+ SVN_ERR(svn_io_set_file_affected_time(ib->set_mtime, ib->tmp_path,
+ scratch_pool));
+
+ finalized = TRUE;
+ }
+
+ wanted = 0;
+ if (mtime_p)
+ wanted |= APR_FINFO_MTIME;
+ if (size_p)
+ wanted |= APR_FINFO_SIZE;
+
+ /* Note that we always fetch the values such as MTIME_P from the filesystem,
+ because it might have a lower timestamp granularity than apr_time_t.
+ */
+ if (wanted)
+ {
+ apr_status_t status;
+
+ if (ib->baton_apr.file)
+ status = apr_file_info_get(&finfo, wanted, ib->baton_apr.file);
+ else
+ status = apr_stat(&finfo, ib->tmp_path, wanted, scratch_pool);
+
+ if (status)
+ return svn_error_wrap_apr(status, NULL);
+ }
+
+ if (mtime_p)
+ *mtime_p = finfo.mtime;
+ if (size_p)
+ *size_p = finfo.size;
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_stream__install_stream(svn_stream_t *install_stream,
const char *final_abspath,
@@ -2330,47 +2508,49 @@ svn_stream__install_stream(svn_stream_t
svn_error_t *err;
SVN_ERR_ASSERT(svn_dirent_is_absolute(final_abspath));
-#ifdef WIN32
- err = svn_io__win_rename_open_file(ib->baton_apr.file, ib->tmp_path,
- final_abspath, scratch_pool);
- if (make_parents && err && APR_STATUS_IS_ENOENT(err->apr_err))
- {
- svn_error_t *err2;
-
- err2 = svn_io_make_dir_recursively(svn_dirent_dirname(final_abspath,
- scratch_pool),
- scratch_pool);
-
- if (err2)
- return svn_error_trace(svn_error_compose_create(err, err2));
- else
- svn_error_clear(err);
+ if (ib->baton_apr.file)
+ {
+#ifdef WIN32
err = svn_io__win_rename_open_file(ib->baton_apr.file, ib->tmp_path,
final_abspath, scratch_pool);
- }
+ if (make_parents && err && APR_STATUS_IS_ENOENT(err->apr_err))
+ {
+ svn_error_t *err2;
- /* ### rhuijben: I wouldn't be surprised if we later find out that we
- have to fall back to close+rename on some specific
- error values here, to support some non standard NAS
- and filesystem scenarios. */
- if (err && err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
- {
- /* Rename open files is not supported on this platform: fallback to
- svn_io_file_rename2(). */
- svn_error_clear(err);
- err = SVN_NO_ERROR;
- }
- else
- {
- return svn_error_compose_create(err,
- svn_io_file_close(ib->baton_apr.file,
- scratch_pool));
- }
+ err2 = svn_io_make_dir_recursively(svn_dirent_dirname(final_abspath,
+ scratch_pool),
+ scratch_pool);
+
+ if (err2)
+ return svn_error_trace(svn_error_compose_create(err, err2));
+ else
+ svn_error_clear(err);
+
+ err = svn_io__win_rename_open_file(ib->baton_apr.file, ib->tmp_path,
+ final_abspath, scratch_pool);
+ }
+
+ /* ### rhuijben: I wouldn't be surprised if we later find out that we
+ have to fall back to close+rename on some specific
+ error values here, to support some non standard NAS
+ and filesystem scenarios. */
+ if (err && err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)
+ {
+ /* Rename open files is not supported on this platform: fallback to
+ svn_io_file_rename2(). */
+ svn_error_clear(err);
+ err = SVN_NO_ERROR;
+ }
+ else
+ {
+ return svn_error_compose_create(
+ err, install_stream_close_file(ib, scratch_pool));
+ }
#endif
- /* Close temporary file. */
- SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
+ SVN_ERR(install_stream_close_file(ib, scratch_pool));
+ }
err = svn_io_file_rename2(ib->tmp_path, final_abspath, FALSE, scratch_pool);
@@ -2399,47 +2579,33 @@ svn_stream__install_stream(svn_stream_t
}
svn_error_t *
-svn_stream__install_get_info(apr_finfo_t *finfo,
- svn_stream_t *install_stream,
- apr_int32_t wanted,
- apr_pool_t *scratch_pool)
-{
- struct install_baton_t *ib = install_stream->baton;
- apr_status_t status;
-
- status = apr_file_info_get(finfo, wanted, ib->baton_apr.file);
-
- if (status)
- return svn_error_wrap_apr(status, NULL);
-
- return SVN_NO_ERROR;
-}
-
-svn_error_t *
svn_stream__install_delete(svn_stream_t *install_stream,
apr_pool_t *scratch_pool)
{
struct install_baton_t *ib = install_stream->baton;
+ if (ib->baton_apr.file)
+ {
#ifdef WIN32
- svn_error_t *err;
+ svn_error_t *err;
- /* Mark the file as delete on close to avoid having to reopen
- the file as part of the delete handling. */
- err = svn_io__win_delete_file_on_close(ib->baton_apr.file, ib->tmp_path,
- scratch_pool);
- if (err == SVN_NO_ERROR)
- {
- SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
- return SVN_NO_ERROR; /* File is already gone */
- }
+ /* Mark the file as delete on close to avoid having to reopen
+ the file as part of the delete handling. */
+ err = svn_io__win_delete_file_on_close(ib->baton_apr.file, ib->tmp_path,
+ scratch_pool);
+ if (err == SVN_NO_ERROR)
+ {
+ SVN_ERR(install_stream_close_file(ib, scratch_pool));
+ return SVN_NO_ERROR; /* File is already gone */
+ }
- /* Deleting file on close may be unsupported, so ignore errors and
- fallback to svn_io_remove_file2(). */
- svn_error_clear(err);
+ /* Deleting file on close may be unsupported, so ignore errors and
+ fallback to svn_io_remove_file2(). */
+ svn_error_clear(err);
#endif
- SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
+ SVN_ERR(install_stream_close_file(ib, scratch_pool));
+ }
return svn_error_trace(svn_io_remove_file2(ib->tmp_path, FALSE,
scratch_pool));
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/string.c
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/string.c?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/subversion/libsvn_subr/string.c (original)
+++ subversion/branches/multi-wc-format/subversion/libsvn_subr/string.c Fri Jan 14 14:01:45 2022
@@ -65,7 +65,7 @@ membuf_create(void **data, apr_size_t *s
* this function does nothing.
*
* If *SIZE is 0, the allocated buffer size will be MINIMUM_SIZE
- * rounded up to the nearest APR alignment boundary. Otherwse, *SIZE
+ * rounded up to the nearest APR alignment boundary. Otherwise, *SIZE
* will be multiplied by a power of two such that the result is
* greater or equal to MINIMUM_SIZE. The pointer to the new buffer
* will be returned in *DATA, and its size in *SIZE.
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/subst.c
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/subst.c?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/subversion/libsvn_subr/subst.c (original)
+++ subversion/branches/multi-wc-format/subversion/libsvn_subr/subst.c Fri Jan 14 14:01:45 2022
@@ -111,7 +111,8 @@ svn_subst_translation_required(svn_subst
svn_boolean_t special,
svn_boolean_t force_eol_check)
{
- return (special || keywords
+ return (special
+ || (keywords && apr_hash_count(keywords) > 0)
|| (style != svn_subst_eol_style_none && force_eol_check)
|| (style == svn_subst_eol_style_native &&
strcmp(APR_EOL_STR, SVN_SUBST_NATIVE_EOL_STR) != 0)
@@ -1483,10 +1484,6 @@ stream_translated(svn_stream_t *stream,
svn_boolean_t expand,
apr_pool_t *result_pool)
{
- struct translated_stream_baton *baton
- = apr_palloc(result_pool, sizeof(*baton));
- svn_stream_t *s = svn_stream_create(baton, result_pool);
-
/* Make sure EOL_STR and KEYWORDS are allocated in RESULT_POOL
so they have the same lifetime as the stream. */
if (eol_str)
@@ -1519,32 +1516,44 @@ stream_translated(svn_stream_t *stream,
}
}
- /* Setup the baton fields */
- baton->stream = stream;
- baton->in_baton
- = create_translation_baton(eol_str, translated_eol, repair, keywords,
- expand, result_pool);
- baton->out_baton
- = create_translation_baton(eol_str, translated_eol, repair, keywords,
- expand, result_pool);
- baton->written = FALSE;
- baton->readbuf = svn_stringbuf_create_empty(result_pool);
- baton->readbuf_off = 0;
- baton->iterpool = svn_pool_create(result_pool);
- baton->buf = apr_palloc(result_pool, SVN__TRANSLATION_BUF_SIZE);
-
- /* Setup the stream methods */
- svn_stream_set_read2(s, NULL /* only full read support */,
- translated_stream_read);
- svn_stream_set_write(s, translated_stream_write);
- svn_stream_set_close(s, translated_stream_close);
- if (svn_stream_supports_mark(stream))
+ if (eol_str || keywords)
{
- svn_stream_set_mark(s, translated_stream_mark);
- svn_stream_set_seek(s, translated_stream_seek);
- }
+ struct translated_stream_baton *baton
+ = apr_palloc(result_pool, sizeof(*baton));
+ svn_stream_t *s = svn_stream_create(baton, result_pool);
+
+ /* Setup the baton fields */
+ baton->stream = stream;
+ baton->in_baton
+ = create_translation_baton(eol_str, translated_eol, repair, keywords,
+ expand, result_pool);
+ baton->out_baton
+ = create_translation_baton(eol_str, translated_eol, repair, keywords,
+ expand, result_pool);
+ baton->written = FALSE;
+ baton->readbuf = svn_stringbuf_create_empty(result_pool);
+ baton->readbuf_off = 0;
+ baton->iterpool = svn_pool_create(result_pool);
+ baton->buf = apr_palloc(result_pool, SVN__TRANSLATION_BUF_SIZE);
+
+ /* Setup the stream methods */
+ svn_stream_set_read2(s, NULL /* only full read support */,
+ translated_stream_read);
+ svn_stream_set_write(s, translated_stream_write);
+ svn_stream_set_close(s, translated_stream_close);
+ if (svn_stream_supports_mark(stream))
+ {
+ svn_stream_set_mark(s, translated_stream_mark);
+ svn_stream_set_seek(s, translated_stream_seek);
+ }
- return s;
+ return s;
+ }
+ else
+ {
+ /* No translation is necessary, return the original stream. */
+ return stream;
+ }
}
svn_stream_t *
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/sysinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/sysinfo.c?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/subversion/libsvn_subr/sysinfo.c (original)
+++ subversion/branches/multi-wc-format/subversion/libsvn_subr/sysinfo.c Fri Jan 14 14:01:45 2022
@@ -1,3 +1,4 @@
+
/*
* sysinfo.c : information about the running system
*
@@ -689,8 +690,8 @@ parse_pointer_value(const char *start, c
|| *end >= limit) /* representation too long */
return NULL;
- ptr = (const unsigned char*)val;
- if (val != (apr_uint64_t)ptr) /* truncated value */
+ ptr = (const unsigned char*)(apr_uintptr_t)val;
+ if (val != (apr_uintptr_t)ptr)/* truncated value */
return NULL;
return ptr;
@@ -1076,7 +1077,7 @@ win32_release_name(apr_pool_t *pool)
/* Get a list of handles of shared libs loaded by the current
- process. Returns a NULL-terminated array alocated from POOL. */
+ process. Returns a NULL-terminated array allocated from POOL. */
static HMODULE *
enum_loaded_modules(apr_pool_t *pool)
{
@@ -1324,68 +1325,89 @@ value_from_dict(CFDictionaryRef plist, C
return value;
}
-/* Return the minor version the operating system, given the number in
- a format that matches the regular expression /^10\.\d+(\..*)?$/ */
-static int
-macos_minor_version(const char *osver)
+/* Return the major and minor versions the operating system, given
+ the number in a format that matches the regular expression
+ /^\d+\.\d+(\..*)?$/ */
+static void
+macos_version_number(int *major, int *minor, const char *osver)
{
char *end = NULL;
unsigned long num = strtoul(osver, &end, 10);
- if (!end || *end != '.' || num != 10)
- return -1;
+ if (!end || *end != '.' || num < 10)
+ return;
+
+ if (major)
+ *major = (int)num;
osver = end + 1;
end = NULL;
num = strtoul(osver, &end, 10);
if (!end || (*end && *end != '.'))
- return -1;
+ return;
- return (int)num;
+ if (minor)
+ *minor = (int)num;
}
/* Return the product name of the operating system. */
static const char *
-product_name_from_minor_version(int minor, const char* product_name)
+product_name_from_version(int major, int minor, const char* product_name)
{
/* We can only do this if we know the official product name. */
if (0 != strcmp(product_name, "Mac OS X"))
return product_name;
- if (minor <= 7)
- return product_name;
+ if (major == 10)
+ {
+ if (minor <= 7)
+ return product_name;
- if (minor <= 11)
- return "OS X";
+ if (minor <= 11)
+ return "OS X";
+ }
return "macOS";
}
/* Return the commercial name of the operating system. */
static const char *
-release_name_from_minor_version(int minor, const char* product_name)
+release_name_from_version(int major, int minor, const char* product_name)
{
/* We can only do this if we know the official product name. */
if (0 == strcmp(product_name, "Mac OS X"))
{
/* See https://en.wikipedia.org/wiki/MacOS_version_history#Releases */
- switch(minor)
+ switch(major)
{
- case 0: return "Cheetah";
- case 1: return "Puma";
- case 2: return "Jaguar";
- case 3: return "Panther";
- case 4: return "Tiger";
- case 5: return "Leopard";
- case 6: return "Snow Leopard";
- case 7: return "Lion";
- case 8: return "Mountain Lion";
- case 9: return "Mavericks";
- case 10: return "Yosemite";
- case 11: return "El Capitan";
- case 12: return "Sierra";
- case 13: return "High Sierra";
- case 14: return "Mojave";
+ case 10:
+ switch(minor)
+ {
+ case 0: return "Cheetah";
+ case 1: return "Puma";
+ case 2: return "Jaguar";
+ case 3: return "Panther";
+ case 4: return "Tiger";
+ case 5: return "Leopard";
+ case 6: return "Snow Leopard";
+ case 7: return "Lion";
+ case 8: return "Mountain Lion";
+ case 9: return "Mavericks";
+ case 10: return "Yosemite";
+ case 11: return "El Capitan";
+ case 12: return "Sierra";
+ case 13: return "High Sierra";
+ case 14: return "Mojave";
+ case 15: return "Catalina";
+ }
+ break;
+
+ case 11:
+ switch(minor)
+ {
+ case 0: return "Big Sur";
+ }
+ break;
}
}
return NULL;
@@ -1410,13 +1432,14 @@ macos_release_name(apr_pool_t *pool)
CFSTR("ProductBuildVersion"),
pool);
const char *release;
- int minor_version;
+ int major_version = -1;
+ int minor_version = -1;
if (!osver)
osver = value_from_dict(plist, CFSTR("ProductVersion"), pool);
- minor_version = macos_minor_version(osver);
- release = release_name_from_minor_version(minor_version, osname);
- osname = product_name_from_minor_version(minor_version, osname);
+ macos_version_number(&major_version, &minor_version, osver);
+ release = release_name_from_version(major_version, minor_version, osname);
+ osname = product_name_from_version(major_version, minor_version, osname);
CFRelease(plist);
return apr_psprintf(pool, "%s%s%s%s%s%s%s%s",
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/temp_serializer.c
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/temp_serializer.c?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/subversion/libsvn_subr/temp_serializer.c (original)
+++ subversion/branches/multi-wc-format/subversion/libsvn_subr/temp_serializer.c Fri Jan 14 14:01:45 2022
@@ -143,7 +143,7 @@ svn_temp_serializer__init(const void *so
* been serialized to BUFFER but contains references to new objects yet to
* serialize. The current size of the serialized data is given in
* CURRENTLY_USED. If the allocated data buffer is actually larger, you may
- * specifiy that in CURRENTLY_ALLOCATED to prevent unnecessary allocations.
+ * specify that in CURRENTLY_ALLOCATED to prevent unnecessary allocations.
* Otherwise, set it to 0. All allocations will be made from POOl.
*/
svn_temp_serializer__context_t *
@@ -261,7 +261,7 @@ svn_temp_serializer__push(svn_temp_seria
svn_stringbuf_appendbytes(context->buffer, source, struct_size);
}
-/* Remove the lastest structure from the stack.
+/* Remove the latest structure from the stack.
*/
void
svn_temp_serializer__pop(svn_temp_serializer__context_t *context)
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/utf.c
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/utf.c?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/subversion/libsvn_subr/utf.c (original)
+++ subversion/branches/multi-wc-format/subversion/libsvn_subr/utf.c Fri Jan 14 14:01:45 2022
@@ -72,7 +72,7 @@ typedef apr_xlate_t xlate_handle_t;
* If there is no handle for a particular key when needed, a new is
* handle is created and put in the cache after use.
* This means that there will be at most N handles open for a key, where N
- * is the number of simultanous handles in use for that key. */
+ * is the number of simultaneous handles in use for that key. */
typedef struct xlate_handle_node_t {
xlate_handle_t *handle;
Propchange: subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc/
------------------------------------------------------------------------------
Merged /subversion/branches/swig-py3/subversion/libsvn_subr/utf8proc:r1813660-1869353
Merged /subversion/trunk/subversion/libsvn_subr/utf8proc:r1819869-1897029
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc.c
URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc.c?rev=1897034&r1=1897033&r2=1897034&view=diff
==============================================================================
--- subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc.c (original)
+++ subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc.c Fri Jan 14 14:01:45 2022
@@ -335,7 +335,7 @@ svn_utf__glob(svn_boolean_t *match,
_("Cannot use a custom escape token"
" in glob matching mode"));
- /* Convert the patern to NFD UTF-8. We can't use the UCS-4 result
+ /* Convert the pattern to NFD UTF-8. We can't use the UCS-4 result
because apr_fnmatch can't handle it.*/
SVN_ERR(decompose_normalized(&tempbuf_len, pattern, pattern_len, temp_buf));
if (!sql_like)