/* datehook.c - Module to install datetime hooks. */ /* * VAS_EBOOT -- GRand Unified Bootloader * Copyright (C) 2008 Free Software Foundation, Inc. * * VAS_EBOOT 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. * * VAS_EBOOT 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 VAS_EBOOT. If not, see . */ #include #include #include #include #include #include VAS_EBOOT_MOD_LICENSE ("GPLv3+"); static const char *VasEBoot_datetime_names[] = { "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", "WEEKDAY", }; static const char * VasEBoot_read_hook_datetime (struct VasEBoot_env_var *var, const char *val __attribute__ ((unused))) { struct VasEBoot_datetime datetime; static char buf[6]; buf[0] = 0; if (! VasEBoot_get_datetime (&datetime)) { int i; for (i = 0; i < 7; i++) if (VasEBoot_strcmp (var->name, VasEBoot_datetime_names[i]) == 0) { int n; switch (i) { case 0: n = datetime.year; break; case 1: n = datetime.month; break; case 2: n = datetime.day; break; case 3: n = datetime.hour; break; case 4: n = datetime.minute; break; case 5: n = datetime.second; break; default: return VasEBoot_get_weekday_name (&datetime); } VasEBoot_snprintf (buf, sizeof (buf), "%d", n); break; } } return buf; } VAS_EBOOT_MOD_INIT(datehook) { unsigned i; for (i = 0; i < ARRAY_SIZE (VasEBoot_datetime_names); i++) { VasEBoot_register_variable_hook (VasEBoot_datetime_names[i], VasEBoot_read_hook_datetime, 0); VasEBoot_env_export (VasEBoot_datetime_names[i]); } } VAS_EBOOT_MOD_FINI(datehook) { unsigned i; for (i = 0; i < ARRAY_SIZE (VasEBoot_datetime_names); i++) { VasEBoot_register_variable_hook (VasEBoot_datetime_names[i], 0, 0); VasEBoot_env_unset (VasEBoot_datetime_names[i]); } }