VirtualBox

Changeset 1674 in kBuild


Ignore:
Timestamp:
Jul 11, 2008 12:49:29 AM (16 years ago)
Author:
bird
Message:

Fixed the error message on _spawnvp failure (windows) and added an error message for execvp failure (the rest).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/redirect.c

    r1577 r1674  
    4848#  define LIBPATHSTRICT 3
    4949# endif
    50 #endif
     50#endif
     51
     52
     53static const char *name(const char *pszName)
     54{
     55    const char *psz = strrchr(pszName, '/');
     56#if defined(_MSC_VER) || defined(__OS2__)
     57    const char *psz2 = strrchr(pszName, '\\');
     58    if (!psz2)
     59        psz2 = strrchr(pszName, ':');
     60    if (psz2 && (!psz || psz2 > psz))
     61        psz = psz2;
     62#endif
     63    return psz ? psz + 1 : pszName;
     64}
    5165
    5266
     
    93107     */
    94108    if (argc <= 1)
    95         return usage(pStdErr, argv[0]);
     109        return usage(pStdErr, name(argv[0]));
    96110    for (i = 1; i < argc; i++)
    97111    {
     
    127141            if (*psz == 'h')
    128142            {
    129                 usage(pStdOut, argv[0]);
     143                usage(pStdOut, name(argv[0]));
    130144                return 0;
    131145            }
     
    151165                    if (i + 1 >= argc)
    152166                    {
    153                         fprintf(pStdErr, "%s: syntax error: no argument for %s\n", argv[0], argv[i]);
     167                        fprintf(pStdErr, "%s: syntax error: no argument for %s\n", name(argv[0]), argv[i]);
    154168                        return 1;
    155169                    }
     
    168182                    if (rc)
    169183                    {
    170                         fprintf(pStdErr, "%s: error: DosSetExtLibPath(\"%s\", %.*s (%lu)): %lu\n", 
    171                                 argv[0], pszVal, pszVal - psz - 1, psz, ulVar, rc);
     184                        fprintf(pStdErr, "%s: error: DosSetExtLibPath(\"%s\", %.*s (%lu)): %lu\n",
     185                                name(argv[0]), pszVal, pszVal - psz - 1, psz, ulVar, rc);
    172186                        return 1;
    173187                    }
     
    177191                if (putenv(psz))
    178192                {
    179                     fprintf(pStdErr, "%s: error: putenv(\"%s\"): %s\n", argv[0], psz, strerror(errno));
     193                    fprintf(pStdErr, "%s: error: putenv(\"%s\"): %s\n", name(argv[0]), psz, strerror(errno));
    180194                    return 1;
    181195                }
     
    195209                    if (i + 1 >= argc)
    196210                    {
    197                         fprintf(pStdErr, "%s: syntax error: no argument for %s\n", argv[0], argv[i]);
     211                        fprintf(pStdErr, "%s: syntax error: no argument for %s\n", name(argv[0]), argv[i]);
    198212                        return 1;
    199213                    }
     
    223237                }
    224238#endif
    225                 fprintf(pStdErr, "%s: error: chdir(\"%s\"): %s\n", argv[0], psz, strerror(errno));
     239                fprintf(pStdErr, "%s: error: chdir(\"%s\"): %s\n", name(argv[0]), psz, strerror(errno));
    226240                return 1;
    227241            }
     
    272286
    273287                case '+':
    274                     fprintf(pStdErr, "%s: syntax error: Unexpected '+' in '%s'\n", argv[0], argv[i]);
     288                    fprintf(pStdErr, "%s: syntax error: Unexpected '+' in '%s'\n", name(argv[0]), argv[i]);
    275289                    return 1;
    276290
     
    342356                    if (!fd)
    343357                    {
    344                         fprintf(pStdErr, "%s: error: failed to convert '%s' to a number\n", argv[0], argv[i]);
     358                        fprintf(pStdErr, "%s: error: failed to convert '%s' to a number\n", name(argv[0]), argv[i]);
    345359                        return 1;
    346360
     
    348362                    if (fd < 0)
    349363                    {
    350                         fprintf(pStdErr, "%s: error: negative fd %d (%s)\n", argv[0], fd, argv[i]);
     364                        fprintf(pStdErr, "%s: error: negative fd %d (%s)\n", name(argv[0]), fd, argv[i]);
    351365                        return 1;
    352366                    }
     
    357371                 */
    358372                default:
    359                     fprintf(pStdErr, "%s: error: failed to convert '%s' ('%s') to a file descriptor\n", argv[0], psz, argv[i]);
     373                    fprintf(pStdErr, "%s: error: failed to convert '%s' ('%s') to a file descriptor\n", name(argv[0]), psz, argv[i]);
    360374                    return 1;
    361375            }
     
    368382                if (*psz != ':' && *psz != '=')
    369383                {
    370                     fprintf(pStdErr, "%s: syntax error: characters following the file descriptor: '%s' ('%s')\n", argv[0], psz, argv[i]);
     384                    fprintf(pStdErr, "%s: syntax error: characters following the file descriptor: '%s' ('%s')\n", name(argv[0]), psz, argv[i]);
    371385                    return 1;
    372386                }
     
    378392                if (i >= argc)
    379393                {
    380                     fprintf(pStdErr, "%s: syntax error: missing filename argument.\n", argv[0]);
     394                    fprintf(pStdErr, "%s: syntax error: missing filename argument.\n", name(argv[0]));
    381395                    return 1;
    382396                }
     
    397411                if (fdOpened == -1)
    398412                {
    399                     fprintf(pStdErr, "%s: error: failed to dup stderr (%d): %s\n", argv[0], fileno(pStdErr), strerror(errno));
     413                    fprintf(pStdErr, "%s: error: failed to dup stderr (%d): %s\n", name(argv[0]), fileno(pStdErr), strerror(errno));
    400414                    return 1;
    401415                }
     
    407421                if (fcntl(fdOpened, F_SETFD, FD_CLOEXEC) == -1)
    408422                {
    409                     fprintf(pStdErr, "%s: error: failed to make stderr (%d) close-on-exec: %s\n", argv[0], fdOpened, strerror(errno));
     423                    fprintf(pStdErr, "%s: error: failed to make stderr (%d) close-on-exec: %s\n", name(argv[0]), fdOpened, strerror(errno));
    410424                    return 1;
    411425                }
     
    415429                if (!pNew)
    416430                {
    417                     fprintf(pStdErr, "%s: error: failed to fdopen the new stderr (%d): %s\n", argv[0], fdOpened, strerror(errno));
     431                    fprintf(pStdErr, "%s: error: failed to fdopen the new stderr (%d): %s\n", name(argv[0]), fdOpened, strerror(errno));
    418432                    return 1;
    419433                }
     
    436450            if (fdOpened == -1)
    437451            {
    438                 fprintf(pStdErr, "%s: error: failed to open '%s' as %d: %s\n", argv[0], psz, fd, strerror(errno));
     452                fprintf(pStdErr, "%s: error: failed to open '%s' as %d: %s\n", name(argv[0]), psz, fd, strerror(errno));
    439453                return 1;
    440454            }
     
    444458                if (dup2(fdOpened, fd) == -1)
    445459                {
    446                     fprintf(pStdErr, "%s: error: failed to dup '%s' as %d: %s\n", argv[0], psz, fd, strerror(errno));
     460                    fprintf(pStdErr, "%s: error: failed to dup '%s' as %d: %s\n", name(argv[0]), psz, fd, strerror(errno));
    447461                    return 1;
    448462                }
     
    452466        else
    453467        {
    454             fprintf(pStdErr, "%s: syntax error: Invalid argument '%s'.\n", argv[0], argv[i]);
    455             return usage(pStdErr, argv[0]);
     468            fprintf(pStdErr, "%s: syntax error: Invalid argument '%s'.\n", name(argv[0]), argv[i]);
     469            return usage(pStdErr, name(argv[0]));
    456470        }
    457471    }
     
    462476    if (i >= argc)
    463477    {
    464         fprintf(pStdErr, "%s: syntax error: nothing to execute!\n", argv[0]);
    465         return usage(pStdErr, argv[0]);
     478        fprintf(pStdErr, "%s: syntax error: nothing to execute!\n", name(argv[0]));
     479        return usage(pStdErr, name(argv[0]));
    466480    }
    467481
    468482#if defined(_MSC_VER)
     483    if (fileno(pStdErr) != 2) /* no close-on-exec flag on windows */
     484    {
     485        fclose(pStdErr);
     486        pStdErr = NULL;
     487    }
     488
    469489    /** @todo
    470490     * We'll have to find the '--' in the commandline and pass that
     
    472492     * is gonna be messed up.
    473493     */
    474     if (fileno(pStdErr) != 2)
    475         fclose(pStdErr);
    476494    rc = _spawnvp(_P_WAIT, argv[i], &argv[i]);
    477     if (rc == -1 && fileno(pStdErr) != 2)
     495    if (rc == -1 && pStdErr)
    478496    {
    479         fprintf(pStdErr, "%s: error: _spawnvp(_P_WAIT,%s,..) failed: %s\n", argv[0], argv[i], strerror(errno));
     497        fprintf(pStdErr, "%s: error: _spawnvp(_P_WAIT, \"%s\", ...) failed: %s\n", name(argv[0]), argv[i], strerror(errno));
    480498        rc = 1;
    481499    }
     
    483501#else
    484502    execvp(argv[i], &argv[i]);
     503    fprintf(pStdErr, "%s: error: _execvp(_P_WAIT, \"%s\", ...) failed: %s\n", name(argv[0]), argv[i], strerror(errno));
    485504    return 1;
    486505#endif
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette