[Bf-blender-cvs] [7186e888e4c] temp-asset-browser-catalogs-ui: Sync to master

Julian Eisel noreply at git.blender.org
Mon Sep 27 18:00:45 CEST 2021


Commit: 7186e888e4c2eff19bf7e280d9bb937daea4fc84
Author: Julian Eisel
Date:   Mon Sep 27 18:00:02 2021 +0200
Branches: temp-asset-browser-catalogs-ui
https://developer.blender.org/rB7186e888e4c2eff19bf7e280d9bb937daea4fc84

Sync to master

The added files were not intended to be committed/pushed. And apparently
there's a leftover from a merge conflict.

===================================================================

D	source/blender/blenlib/intern/path_util.cc
D	source/blender/blenlib/intern/storage.cc
M	source/blender/makesdna/DNA_uuid_types.h

===================================================================

diff --git a/source/blender/blenlib/intern/path_util.cc b/source/blender/blenlib/intern/path_util.cc
deleted file mode 100644
index 760e7910a77..00000000000
--- a/source/blender/blenlib/intern/path_util.cc
+++ /dev/null
@@ -1,2083 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- * various string, file, list operations.
- */
-
-/** \file
- * \ingroup bli
- */
-
-#include <algorithm>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "DNA_listBase.h"
-
-#include "BLI_fileops.h"
-#include "BLI_fnmatch.h"
-#include "BLI_path_util.h"
-#include "BLI_string.h"
-#include "BLI_string_utf8.h"
-#include "BLI_utildefines.h"
-#ifdef USE_CPP_FILESYSTEM
-#  include "BLI_filesystem.hh"
-#endif
-
-#ifdef WIN32
-#  include "utf_winfunc.h"
-#  include "utfconv.h"
-#  include <io.h>
-#  ifdef _WIN32_IE
-#    undef _WIN32_IE
-#  endif
-#  define _WIN32_IE 0x0501
-#  include "BLI_alloca.h"
-#  include "BLI_winstuff.h"
-#  include <shlobj.h>
-#  include <windows.h>
-#else
-#  include "unistd.h"
-#endif /* WIN32 */
-
-#include "MEM_guardedalloc.h"
-
-#ifdef USE_CPP_FILESYSTEM
-using namespace blender::bli;
-#endif
-
-/* Declarations */
-
-#ifdef WIN32
-
-/**
- * Return true if the path is absolute ie starts with a drive specifier
- * (eg A:\) or is a UNC path.
- */
-static bool BLI_path_is_abs(const char *name);
-
-#endif /* WIN32 */
-
-// #define DEBUG_STRSIZE
-
-/* implementation */
-
-/**
- * Looks for a sequence of decimal digits in string, preceding any filename extension,
- * returning the integer value if found, or 0 if not.
- *
- * \param string: String to scan.
- * \param head: Optional area to return copy of part of string prior to digits,
- * or before dot if no digits.
- * \param tail: Optional area to return copy of part of string following digits,
- * or from dot if no digits.
- * \param r_num_len: Optional to return number of digits found.
- */
-int BLI_path_sequence_decode(const char *string, char *head, char *tail, ushort *r_num_len)
-{
-  uint nums = 0, nume = 0;
-  int i;
-  bool found_digit = false;
-  const char *const lslash = BLI_path_slash_rfind(string);
-  const uint string_len = strlen(string);
-  const uint lslash_len = lslash != NULL ? (int)(lslash - string) : 0;
-  uint name_end = string_len;
-
-  while (name_end > lslash_len && string[--name_end] != '.') {
-    /* name ends at dot if present */
-  }
-  if (name_end == lslash_len && string[name_end] != '.') {
-    name_end = string_len;
-  }
-
-  for (i = name_end - 1; i >= (int)lslash_len; i--) {
-    if (isdigit(string[i])) {
-      if (found_digit) {
-        nums = i;
-      }
-      else {
-        nume = i;
-        nums = i;
-        found_digit = true;
-      }
-    }
-    else {
-      if (found_digit) {
-        break;
-      }
-    }
-  }
-
-  if (found_digit) {
-    const long long int ret = strtoll(&(string[nums]), NULL, 10);
-    if (ret >= INT_MIN && ret <= INT_MAX) {
-      if (tail) {
-        strcpy(tail, &string[nume + 1]);
-      }
-      if (head) {
-        strcpy(head, string);
-        head[nums] = 0;
-      }
-      if (r_num_len) {
-        *r_num_len = nume - nums + 1;
-      }
-      return (int)ret;
-    }
-  }
-
-  if (tail) {
-    strcpy(tail, string + name_end);
-  }
-  if (head) {
-    /* name_end points to last character of head,
-     * make it +1 so null-terminator is nicely placed
-     */
-    BLI_strncpy(head, string, name_end + 1);
-  }
-  if (r_num_len) {
-    *r_num_len = 0;
-  }
-  return 0;
-}
-
-/**
- * Returns in area pointed to by string a string of the form "<head><pic><tail>", where pic
- * is formatted as numlen digits with leading zeroes.
- */
-void BLI_path_sequence_encode(
-    char *string, const char *head, const char *tail, unsigned short numlen, int pic)
-{
-  sprintf(string, "%s%.*d%s", head, numlen, MAX2(0, pic), tail);
-}
-
-static int BLI_path_unc_prefix_len(const char *path); /* defined below in same file */
-
-/* ******************** string encoding ***************** */
-
-/**
- * Remove redundant characters from \a path and optionally make absolute.
- *
- * \param relabase: The path this is relative to, or ignored when NULL.
- * \param path: Can be any input, and this function converts it to a regular full path.
- * Also removes garbage from directory paths, like `/../` or double slashes etc.
- *
- * \note \a path isn't protected for max string names...
- */
-void BLI_path_normalize(const char *relabase, char *path)
-{
-  ptrdiff_t a;
-  char *start, *eind;
-  if (relabase) {
-    BLI_path_abs(path, relabase);
-  }
-  else {
-    if (path[0] == '/' && path[1] == '/') {
-      if (path[2] == '\0') {
-        return; /* path is "//" - can't clean it */
-      }
-      path = path + 2; /* leave the initial "//" untouched */
-    }
-  }
-
-  /* Note
-   *   memmove(start, eind, strlen(eind) + 1);
-   * is the same as
-   *   strcpy(start, eind);
-   * except strcpy should not be used because there is overlap,
-   * so use memmove's slightly more obscure syntax - Campbell
-   */
-
-#ifdef WIN32
-  while ((start = strstr(path, "\\..\\"))) {
-    eind = start + strlen("\\..\\") - 1;
-    a = start - path - 1;
-    while (a > 0) {
-      if (path[a] == '\\') {
-        break;
-      }
-      a--;
-    }
-    if (a < 0) {
-      break;
-    }
-    else {
-      memmove(path + a, eind, strlen(eind) + 1);
-    }
-  }
-
-  while ((start = strstr(path, "\\.\\"))) {
-    eind = start + strlen("\\.\\") - 1;
-    memmove(start, eind, strlen(eind) + 1);
-  }
-
-  /* remove two consecutive backslashes, but skip the UNC prefix,
-   * which needs to be preserved */
-  while ((start = strstr(path + BLI_path_unc_prefix_len(path), "\\\\"))) {
-    eind = start + strlen("\\\\") - 1;
-    memmove(start, eind, strlen(eind) + 1);
-  }
-#else
-  while ((start = strstr(path, "/../"))) {
-    a = start - path - 1;
-    if (a > 0) {
-      /* <prefix>/<parent>/../<postfix> => <prefix>/<postfix> */
-      eind = start + (4 - 1) /* strlen("/../") - 1 */; /* strip "/.." and keep last "/" */
-      while (a > 0 && path[a] != '/') {                /* find start of <parent> */
-        a--;
-      }
-      memmove(path + a, eind, strlen(eind) + 1);
-    }
-    else {
-      /* Support for odd paths: eg `/../home/me` --> `/home/me`
-       * this is a valid path in blender but we can't handle this the usual way below
-       * simply strip this prefix then evaluate the path as usual.
-       * Python's `os.path.normpath()` does this. */
-
-      /* NOTE: previous version of following call used an offset of 3 instead of 4,
-       * which meant that the `/../home/me` example actually became `home/me`.
-       * Using offset of 3 gives behavior consistent with the aforementioned
-       * Python routine. */
-      memmove(path, path + 3, strlen(path + 3) + 1);
-    }
-  }
-
-  while ((start = strstr(path, "/./"))) {
-    eind = start + (3 - 1) /* strlen("/./") - 1 */;
-    memmove(start, eind, strlen(eind) + 1);
-  }
-
-  while ((start = strstr(path, "//"))) {
-    eind = start + (2 - 1) /* strlen("//") - 1 */;
-    memmove(start, eind, strlen(eind) + 1);
-  }
-#endif
-}
-
-/**
- * Cleanup filepath ensuring a trailing slash.
- */
-void BLI_path_normalize_dir(const char *relabase, char *dir)
-{
-  /* Would just create an unexpected "/" path, just early exit entirely. */
-  if (dir[0] == '\0') {
-    return;
-  }
-
-  BLI_path_normalize(relabase, dir);
-  BLI_path_slash_ensure(dir);
-}
-
-/**
- * Make given name safe to be used in paths.
- *
- * \return true if \a fname was changed, false otherwise.
- *
- * For now, simply replaces reserved chars (as listed in
- * https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words )
- * by underscores ('_').
- *
- * \note Space case ' ' is a bit of an edge case here - in theory it is allowed,
- * but again can be an issue in some cases, so we simply replace it by an underscore too
- * (good practice anyway).
- * REMOVED based on popular demand (see T45900).
- * Percent '%' char is a bit same case - not recommended to use it,
- * but supported by all decent file-systems/operating-systems around.
- *
- * \note On Windows, it also ensures there is no '.' (dot char) at the end of the file,
- * this can lead to issues.
- *
- * \note On Windows, it also checks for forbidden names
- * (see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx ).
- */
-bool BLI_filename_make_safe(char *fname)
-{
-  const char *invalid =
-      "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
-      "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
-      "/\\?*:|\"<>";
-  char *fn;
-  bool changed = false;
-
-  if (*fname == '\0') {
-    return changed;
-  }
-
-  for (fn = fname; *fn && (fn = strpbrk(fn, invalid)); fn++) {
-    *fn = '_';
-    changed = true;
-  }
-
-  /* Forbid only dots. */
-  for (fn = fname; *fn == '.'; fn++) {
-    /* pass */
-  }
-  if (*fn == '\0') {
-    *fname = '_';
-    changed = true;
-  }
-
-#ifdef WIN32
-  {
-    const size_t len = strlen(fname);
-    const char *invalid_names[] = {
-        "con",  "prn",  "aux",  "null", "com1", "com2", "com3", "com4",
-        "com5", "com6", "com7", "com8", "com9", "lpt1", "lpt2", "lpt3",
-        "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9", NULL,
-    };
-    char *lower_fname = BLI_strdup(fname);
-    const char **iname;
-
-    /* Forbid trailing dot (trailing space has already been replaced above). */
-    i

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list