/*
* Copyright (C) 2023 Patrick McDermott
*
* This file is part of opkg-opk.
*
* opkg-opk 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 3 of the License, or
* (at your option) any later version.
*
* opkg-opk 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 opkg-opk. If not, see .
*/
#include
#include
#include
#include "defs.h"
#include "mode.h"
static unsigned int _test_num = 0U;
static void
_test(mode_t cur_mode, const char *mode_str, int exp_ret, mode_t exp_mode)
{
mode_t got_mode;
if (opkg_opk_helper_mode_parse(cur_mode, mode_str, &got_mode)
!= exp_ret
|| got_mode != exp_mode) {
fputs("not ", stdout);
}
printf("ok %u - cur_mode=0%06o mode_str=\"%s\"\n",
++_test_num, cur_mode, mode_str);
printf("\texp=0%06o got=0%06o\n", exp_mode, got_mode);
}
int
main()
{
umask(0022);
puts("1..12");
_test(0000644, "a+x" , OPKG_OPK_OK, 0000755);
_test(0000755, "go-x" , OPKG_OPK_OK, 0000744);
_test(0000744, "a=rw", OPKG_OPK_OK, 0000666);
_test(0000644, "u+s" , OPKG_OPK_OK, 0004644);
_test(0000644, "g+s" , OPKG_OPK_OK, 0002644);
_test(0000644, "a+" , OPKG_OPK_OK, 0000644);
_test(0000644, "g=u" , OPKG_OPK_OK, 0000664);
_test(0000644, "u=o" , OPKG_OPK_OK, 0000444);
_test(0000664, "o+g" , OPKG_OPK_OK, 0000666);
_test(0000644, "+wx", OPKG_OPK_OK, 0000755); /* Affected by umask. */
_test(0040755, "a+t" , OPKG_OPK_OK, 0041755);
_test(0040755, "+t" , OPKG_OPK_OK, 0041755);
return EXIT_SUCCESS;
}