https://git.reactos.org/?p=reactos.git;a=commitdiff;h=189f6485841eb6b600069a7f938979cc44318743

commit 189f6485841eb6b600069a7f938979cc44318743
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Fri Nov 29 20:03:19 2019 +0900
Commit:     GitHub <[email protected]>
CommitDate: Fri Nov 29 20:03:19 2019 +0900

    [CMDUTILS][ATTRIB] Support folder attributes (#2103)
    
    CORE-16538
---
 base/applications/cmdutils/attrib/attrib.c      | 165 ++++++++++++++----------
 base/applications/cmdutils/attrib/lang/cs-CZ.rc |   1 +
 base/applications/cmdutils/attrib/lang/de-DE.rc |   1 +
 base/applications/cmdutils/attrib/lang/el-GR.rc |   1 +
 base/applications/cmdutils/attrib/lang/en-US.rc |   1 +
 base/applications/cmdutils/attrib/lang/es-ES.rc |   1 +
 base/applications/cmdutils/attrib/lang/fr-FR.rc |   1 +
 base/applications/cmdutils/attrib/lang/hu-HU.rc |   1 +
 base/applications/cmdutils/attrib/lang/id-ID.rc |   1 +
 base/applications/cmdutils/attrib/lang/it-IT.rc |   1 +
 base/applications/cmdutils/attrib/lang/ja-JP.rc |   1 +
 base/applications/cmdutils/attrib/lang/no-NO.rc |   1 +
 base/applications/cmdutils/attrib/lang/pl-PL.rc |   1 +
 base/applications/cmdutils/attrib/lang/ro-RO.rc |   1 +
 base/applications/cmdutils/attrib/lang/ru-RU.rc |   1 +
 base/applications/cmdutils/attrib/lang/sk-SK.rc |   1 +
 base/applications/cmdutils/attrib/lang/sq-AL.rc |   1 +
 base/applications/cmdutils/attrib/lang/sv-SE.rc |   1 +
 base/applications/cmdutils/attrib/lang/tr-TR.rc |   1 +
 base/applications/cmdutils/attrib/lang/uk-UA.rc |   1 +
 base/applications/cmdutils/attrib/lang/zh-CN.rc |   1 +
 base/applications/cmdutils/attrib/lang/zh-TW.rc |   1 +
 base/applications/cmdutils/attrib/resource.h    |   1 +
 23 files changed, 118 insertions(+), 69 deletions(-)

diff --git a/base/applications/cmdutils/attrib/attrib.c 
b/base/applications/cmdutils/attrib/attrib.c
index 141ad497285..3d35fa403c0 100644
--- a/base/applications/cmdutils/attrib/attrib.c
+++ b/base/applications/cmdutils/attrib/attrib.c
@@ -72,7 +72,7 @@ ErrorMessage(
                        NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, 
SUBLANG_DEFAULT),
                        (LPWSTR)&szError, 0, NULL))
     {
-        ConPrintf(StdErr, L"%s %s\n", szError, szMessage);
+        ConPrintf(StdOut, L"%s %s\n", szError, szMessage);
         if (szError)
             LocalFree(szError);
         return;
@@ -81,9 +81,9 @@ ErrorMessage(
     /* Fall back just in case the error is not defined */
     LoadStringW(GetModuleHandle(NULL), STRING_CONSOLE_ERROR, szMsg, 
ARRAYSIZE(szMsg));
     if (szFormat)
-        ConPrintf(StdErr, L"%s -- %s\n", szMsg, szMessage);
+        ConPrintf(StdOut, L"%s -- %s\n", szMsg, szMessage);
     else
-        ConPrintf(StdErr, L"%s\n", szMsg);
+        ConPrintf(StdOut, L"%s\n", szMsg);
 }
 
 static
@@ -145,9 +145,6 @@ PrintAttribute(
 
     do
     {
-        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-            continue;
-
         wcscpy(pszFileName, findData.cFileName);
 
         ConPrintf(StdOut,
@@ -166,7 +163,7 @@ PrintAttribute(
 
 
 static
-INT
+BOOL
 ChangeAttribute(
     LPWSTR pszPath,
     LPWSTR pszFile,
@@ -180,75 +177,102 @@ ChangeAttribute(
     DWORD  dwAttribute;
     WCHAR  szFullName[MAX_PATH];
     LPWSTR pszFileName;
+    BOOL bWildcard = (wcschr(pszFile, L'*') || wcschr(pszFile, L'?'));
 
     /* prepare full file name buffer */
     wcscpy(szFullName, pszPath);
     pszFileName = szFullName + wcslen(szFullName);
 
-    /* change all subdirectories */
-    if (bRecurse)
-    {
-        /* append file name */
-        wcscpy(pszFileName, L"*.*");
+    /* append file name */
+    wcscpy(pszFileName, pszFile);
 
-        hFind = FindFirstFileW(szFullName, &findData);
-        if (hFind == INVALID_HANDLE_VALUE)
+    hFind = FindFirstFileW(szFullName, &findData);
+    if (hFind == INVALID_HANDLE_VALUE)
+        return FALSE;
+
+    dwAttribute = findData.dwFileAttributes;
+
+    if (!bWildcard)
+    {
+        FindClose(hFind);
+        if (dwAttribute & FILE_ATTRIBUTE_DIRECTORY)
         {
-            ErrorMessage(GetLastError(), pszFile);
-            return 1;
+            dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+            SetFileAttributes(szFullName, dwAttribute);
+            if (bRecurse)
+            {
+                if (bDirectories)
+                {
+                    ChangeAttribute(szFullName, L"*", dwMask, dwAttrib,
+                                    bRecurse, bDirectories);
+                }
+                else
+                {
+                    if (!ChangeAttribute(szFullName, L"*", dwMask, dwAttrib,
+                                         bRecurse, FALSE))
+                    {
+                        return FALSE;
+                    }
+                }
+            }
+            else
+            {
+                if (!bDirectories)
+                {
+                    ChangeAttribute(szFullName, L"*", dwMask, dwAttrib,
+                                    bRecurse, FALSE);
+                }
+            }
+            return TRUE;
+        }
+        else
+        {
+            dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+            SetFileAttributes(szFullName, dwAttribute);
+            return TRUE;
         }
+    }
+    else
+    {
+        if ((dwAttribute & FILE_ATTRIBUTE_DIRECTORY) && (!bRecurse || 
!bDirectories))
+            return FALSE;
 
         do
         {
-            if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            dwAttribute = findData.dwFileAttributes;
+            if (dwAttribute & FILE_ATTRIBUTE_DIRECTORY)
             {
+                if (!bDirectories)
+                    continue;
+
                 if (!wcscmp(findData.cFileName, L".") ||
                     !wcscmp(findData.cFileName, L".."))
                     continue;
 
                 wcscpy(pszFileName, findData.cFileName);
-                wcscat(pszFileName, L"\\");
-
-                ChangeAttribute(szFullName, pszFile, dwMask,
-                                dwAttrib, bRecurse, bDirectories);
+                dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+                SetFileAttributes(szFullName, dwAttribute);
+
+                if (bRecurse)
+                {
+                    ChangeAttribute(szFullName, findData.cFileName, dwMask,
+                                    dwAttrib, bRecurse, FALSE);
+                }
             }
-        }
-        while (FindNextFileW(hFind, &findData));
-        FindClose(hFind);
-    }
-
-    /* append file name */
-    wcscpy(pszFileName, pszFile);
-
-    hFind = FindFirstFileW(szFullName, &findData);
-    if (hFind == INVALID_HANDLE_VALUE)
-    {
-        ErrorMessage(GetLastError(), pszFile);
-        return 1;
-    }
-
-    do
-    {
-        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-            continue;
-
-        wcscpy(pszFileName, findData.cFileName);
-
-        dwAttribute = GetFileAttributes (szFullName);
+            else
+            {
+                wcscpy(pszFileName, findData.cFileName);
+                dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+                SetFileAttributes(szFullName, dwAttribute);
+            }
+        } while (FindNextFileW(hFind, &findData));
 
-        if (dwAttribute != 0xFFFFFFFF)
-        {
-            dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
-            SetFileAttributes(szFullName, dwAttribute);
-        }
+        FindClose(hFind);
     }
-    while (FindNextFileW(hFind, &findData));
-    FindClose(hFind);
 
-    return 0;
+    return TRUE;
 }
 
-
 int wmain(int argc, WCHAR *argv[])
 {
     INT    i;
@@ -258,6 +282,8 @@ int wmain(int argc, WCHAR *argv[])
     BOOL   bDirectories = FALSE;
     DWORD  dwAttrib = 0;
     DWORD  dwMask = 0;
+    LPWSTR p;
+    WCHAR  szText[MAX_PATH];
 
     /* Initialize the Console Standard Streams */
     ConInitStdStreams();
@@ -285,7 +311,7 @@ int wmain(int argc, WCHAR *argv[])
         {
             if (wcslen(argv[i]) != 2)
             {
-                ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
                 return -1;
             }
 
@@ -312,7 +338,7 @@ int wmain(int argc, WCHAR *argv[])
                     break;
 
                 default:
-                    ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                    ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
                     return -1;
             }
         }
@@ -320,7 +346,7 @@ int wmain(int argc, WCHAR *argv[])
         {
             if (wcslen(argv[i]) != 2)
             {
-                ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
                 return -1;
             }
 
@@ -347,7 +373,7 @@ int wmain(int argc, WCHAR *argv[])
                     break;
 
                 default:
-                    ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                    ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
                     return -1;
             }
         }
@@ -371,20 +397,21 @@ int wmain(int argc, WCHAR *argv[])
     /* get full file name */
     for (i = 1; i < argc; i++)
     {
-        if ((*argv[i] != L'+') && (*argv[i] != L'-') && (*argv[i] != L'/'))
-        {
-            LPWSTR p;
+        if (*argv[i] == L'+' || *argv[i] == L'-' || *argv[i] == L'/')
+            continue;
 
-            GetFullPathName(argv[i], MAX_PATH, szPath, NULL);
-            p = wcsrchr(szPath, L'\\') + 1;
-            wcscpy(szFileName, p);
-            *p = L'\0';
+        GetFullPathNameW(argv[i], MAX_PATH, szPath, &p);
+        wcscpy(szFileName, p);
+        *p = 0;
 
-            if (dwMask == 0)
-                PrintAttribute(szPath, szFileName, bRecurse);
-            else
-                ChangeAttribute(szPath, szFileName, dwMask,
-                         dwAttrib, bRecurse, bDirectories);
+        if (dwMask == 0)
+        {
+            PrintAttribute(szPath, szFileName, bRecurse);
+        }
+        else if (!ChangeAttribute(szPath, szFileName, dwMask,
+                                  dwAttrib, bRecurse, bDirectories))
+        {
+            ConResPrintf(StdOut, STRING_FILE_NOT_FOUND, argv[i]);
         }
     }
 
diff --git a/base/applications/cmdutils/attrib/lang/cs-CZ.rc 
b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
index d67fffd3dfb..5798313832c 100644
--- a/base/applications/cmdutils/attrib/lang/cs-CZ.rc
+++ b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
@@ -7,6 +7,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/de-DE.rc 
b/base/applications/cmdutils/attrib/lang/de-DE.rc
index 44791186be6..934496e3b75 100644
--- a/base/applications/cmdutils/attrib/lang/de-DE.rc
+++ b/base/applications/cmdutils/attrib/lang/de-DE.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Zeigt Dateiattribute an oder ändert sie.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] Dateiname ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/el-GR.rc 
b/base/applications/cmdutils/attrib/lang/el-GR.rc
index dcfc19fb746..61b9646ccf8 100644
--- a/base/applications/cmdutils/attrib/lang/el-GR.rc
+++ b/base/applications/cmdutils/attrib/lang/el-GR.rc
@@ -7,6 +7,7 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Προβολή ή αλλαγή των χαρακτηριστικών των αρχείων.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/en-US.rc 
b/base/applications/cmdutils/attrib/lang/en-US.rc
index 692b04c013c..340a3db2b19 100644
--- a/base/applications/cmdutils/attrib/lang/en-US.rc
+++ b/base/applications/cmdutils/attrib/lang/en-US.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/es-ES.rc 
b/base/applications/cmdutils/attrib/lang/es-ES.rc
index 8271d4784cb..a84e1753e23 100644
--- a/base/applications/cmdutils/attrib/lang/es-ES.rc
+++ b/base/applications/cmdutils/attrib/lang/es-ES.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Muestra o cambia los atributos de los archivos.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/fr-FR.rc 
b/base/applications/cmdutils/attrib/lang/fr-FR.rc
index d330ba51f3b..99c22f35ae9 100644
--- a/base/applications/cmdutils/attrib/lang/fr-FR.rc
+++ b/base/applications/cmdutils/attrib/lang/fr-FR.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Affiche ou change des attributs de fichiers.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/hu-HU.rc 
b/base/applications/cmdutils/attrib/lang/hu-HU.rc
index 37d8d22ad96..8e5e3d0ff7b 100644
--- a/base/applications/cmdutils/attrib/lang/hu-HU.rc
+++ b/base/applications/cmdutils/attrib/lang/hu-HU.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Állományok attribútumok megjelenítése vagy 
beállításai.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] állomány ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/id-ID.rc 
b/base/applications/cmdutils/attrib/lang/id-ID.rc
index 74ac009a952..31ed914c8aa 100644
--- a/base/applications/cmdutils/attrib/lang/id-ID.rc
+++ b/base/applications/cmdutils/attrib/lang/id-ID.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Menampilkan atau mengubah atribut file.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/it-IT.rc 
b/base/applications/cmdutils/attrib/lang/it-IT.rc
index 70d47fc74c4..a4f6a2a1c21 100644
--- a/base/applications/cmdutils/attrib/lang/it-IT.rc
+++ b/base/applications/cmdutils/attrib/lang/it-IT.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Visualizza o modifica gli attributi dei file.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/ja-JP.rc 
b/base/applications/cmdutils/attrib/lang/ja-JP.rc
index 79e2c7652fd..9125d067cb7 100644
--- a/base/applications/cmdutils/attrib/lang/ja-JP.rc
+++ b/base/applications/cmdutils/attrib/lang/ja-JP.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "ファイル属性を表示または変更します。\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [ファイル] ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/no-NO.rc 
b/base/applications/cmdutils/attrib/lang/no-NO.rc
index 095e18be0b2..fdc13654108 100644
--- a/base/applications/cmdutils/attrib/lang/no-NO.rc
+++ b/base/applications/cmdutils/attrib/lang/no-NO.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Viser eller endrer filattributtene.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/pl-PL.rc 
b/base/applications/cmdutils/attrib/lang/pl-PL.rc
index 42543e60b3a..3776b95160e 100644
--- a/base/applications/cmdutils/attrib/lang/pl-PL.rc
+++ b/base/applications/cmdutils/attrib/lang/pl-PL.rc
@@ -11,6 +11,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Wyświetla lub zmienia atrybuty plików.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] nazwa_pliku ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/ro-RO.rc 
b/base/applications/cmdutils/attrib/lang/ro-RO.rc
index 73eed7eaf11..05f858aae75 100644
--- a/base/applications/cmdutils/attrib/lang/ro-RO.rc
+++ b/base/applications/cmdutils/attrib/lang/ro-RO.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Afișează sau modifică atributele de fișiere.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fișier ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/ru-RU.rc 
b/base/applications/cmdutils/attrib/lang/ru-RU.rc
index 8cea9affee4..c2390e95f35 100644
--- a/base/applications/cmdutils/attrib/lang/ru-RU.rc
+++ b/base/applications/cmdutils/attrib/lang/ru-RU.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Вывод и изменение атрибутов файлов.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/sk-SK.rc 
b/base/applications/cmdutils/attrib/lang/sk-SK.rc
index 281a003325b..e883b13c2e3 100644
--- a/base/applications/cmdutils/attrib/lang/sk-SK.rc
+++ b/base/applications/cmdutils/attrib/lang/sk-SK.rc
@@ -8,6 +8,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/sq-AL.rc 
b/base/applications/cmdutils/attrib/lang/sq-AL.rc
index ca39be06934..cddde01e7c5 100644
--- a/base/applications/cmdutils/attrib/lang/sq-AL.rc
+++ b/base/applications/cmdutils/attrib/lang/sq-AL.rc
@@ -6,6 +6,7 @@ LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Shfaq ose ndryshu atributet e dokumentave.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/sv-SE.rc 
b/base/applications/cmdutils/attrib/lang/sv-SE.rc
index 236baf7c6a2..2406f5316b1 100644
--- a/base/applications/cmdutils/attrib/lang/sv-SE.rc
+++ b/base/applications/cmdutils/attrib/lang/sv-SE.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Visar eller ändrar filattributen.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/tr-TR.rc 
b/base/applications/cmdutils/attrib/lang/tr-TR.rc
index d96c764e2e6..7bfd8c3e1ae 100644
--- a/base/applications/cmdutils/attrib/lang/tr-TR.rc
+++ b/base/applications/cmdutils/attrib/lang/tr-TR.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Kütük öz niteliklerini görüntüler ya da 
değiştirir.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] kütük ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/uk-UA.rc 
b/base/applications/cmdutils/attrib/lang/uk-UA.rc
index 6591e433459..957e589f2d1 100644
--- a/base/applications/cmdutils/attrib/lang/uk-UA.rc
+++ b/base/applications/cmdutils/attrib/lang/uk-UA.rc
@@ -10,6 +10,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "Відображення або зміна атрибутів файлу.\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/zh-CN.rc 
b/base/applications/cmdutils/attrib/lang/zh-CN.rc
index a4d10f23bff..c3184d47eb8 100644
--- a/base/applications/cmdutils/attrib/lang/zh-CN.rc
+++ b/base/applications/cmdutils/attrib/lang/zh-CN.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "显示或更改文件属性。\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 文件 ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/zh-TW.rc 
b/base/applications/cmdutils/attrib/lang/zh-TW.rc
index c1fb32005c0..8b61dd6c714 100644
--- a/base/applications/cmdutils/attrib/lang/zh-TW.rc
+++ b/base/applications/cmdutils/attrib/lang/zh-TW.rc
@@ -5,6 +5,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
 
 STRINGTABLE
 BEGIN
+    STRING_FILE_NOT_FOUND "File not found - '%s'\n"
     STRING_ATTRIB_HELP "顯示或更改檔案屬性。\n\n\
 ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 檔案 ...\n\
        [/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/resource.h 
b/base/applications/cmdutils/attrib/resource.h
index 3b44432714c..e55a2ed845a 100644
--- a/base/applications/cmdutils/attrib/resource.h
+++ b/base/applications/cmdutils/attrib/resource.h
@@ -5,3 +5,4 @@
 #define STRING_ERROR_INVALID_PARAM_FORMAT 107
 #define STRING_CONSOLE_ERROR 316
 #define STRING_ATTRIB_HELP 600
+#define STRING_FILE_NOT_FOUND 100

Reply via email to