- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
int param_check(char *func, ...) {
int fail;
va_list al;
if (!func) {
return(1);
}
va_start(al, func);
fail=0;
if (!strcmp(func, "vnetGenerateDHCP") || !strcmp(func, "vnetKickDHCP")) {
vnetConfig *a = va_arg(al, vnetConfig *);
if (!a) {
fail=1;
}
} else if (!strcmp(func, "vnetAddPublicIP") || !strcmp(func, "vnetAddDev")) {
vnetConfig *a = va_arg(al, vnetConfig *);
char *b = va_arg(al, char *);
if (!a || !b) {
fail=1;
}
} else if (!strcmp(func, "vnetAddHost")) {
vnetConfig *a = va_arg(al, vnetConfig *);
char *b = va_arg(al, char *);
char *c = va_arg(al, char *);
int d = va_arg(al, int);
if (!a || !b || (d < 0) || (d > NUMBER_OF_VLANS-1)) {
fail=1;
}
} else if (!strcmp(func, "vnetGetNextHost")) {
vnetConfig *a = va_arg(al, vnetConfig *);
char *b = va_arg(al, char *);
char *c = va_arg(al, char *);
int d = va_arg(al, int);
if (!a || !b || !c || d < 0 || d > NUMBER_OF_VLANS-1) {
fail=1;
}
} else if (!strcmp(func, "vnetDelHost") || !strcmp(func, "vnetEnableHost") || !strcmp(func, "vnetDisableHost")) {
vnetConfig *a = va_arg(al, vnetConfig *);
char *b = va_arg(al, char *);
char *c = va_arg(al, char *);
int d = va_arg(al, int);
if (!a || (!b && !c) || d < 0 || d > NUMBER_OF_VLANS-1) {
fail=1;
}
} else if (!strcmp(func, "vnetDeleteChain") || !strcmp(func, "vnetCreateChain")) {
vnetConfig *a = va_arg(al, vnetConfig *);
char *b = va_arg(al, char *);
char *c = va_arg(al, char *);
if (!a || !b || !c) {
fail=1;
}
} else if (!strcmp(func, "vnetTableRule")) {
vnetConfig *a = va_arg(al, vnetConfig *);
char *b = va_arg(al, char *);
char *c = va_arg(al, char *);
char *d = va_arg(al, char *);
char *e = va_arg(al, char *);
char *f = va_arg(al, char *);
char *g = va_arg(al, char *);
if (!a || !b || !c || !d || (!e && !f && !g)) {
fail=1;
}
} else if (!strcmp(func, "vnetSetVlan")) {
vnetConfig *a = va_arg(al, vnetConfig *);
int b = va_arg(al, int);
char *c = va_arg(al, char *);
char *d = va_arg(al, char *);
if (!a || b < 0 || b >= NUMBER_OF_VLANS || !c || !d) {
fail=1;
}
} else if (!strcmp(func, "vnetDelVlan")) {
vnetConfig *a = va_arg(al, vnetConfig *);
int b = va_arg(al, int);
if (!a || b < 0 || b >= NUMBER_OF_VLANS) {
fail=1;
}
} else if (!strcmp(func, "vnetInit")) {
vnetConfig *a = va_arg(al, vnetConfig *);
char *b = va_arg(al, char *);
char *c = va_arg(al, char *);
char *d = va_arg(al, char *);
int e = va_arg(al, int);
if (!a || !b || !c || d<0) {
fail=1;
}
}
va_end(al);
if (fail) {
logprintfl (EUCAERROR, "INTERNAL ERROR: incorrect input parameters to function %s\n", func);
return(1);
}
return(0);
}
одни школоло на говнокоде
А вообще "..."(элипсис) всегда говнокод.
в большинстве случаев так и есть
я б не стал доверять прогеру, который не знает точное количество аргументов его собственной функции
Не более чем костыли, и то невсегда помогают.
давайте не будем сравнивать языки программирования с едой, так как они все таки больше похожи на религию...
упоминание всяких религий - лишь оправдание
невозможности выбрать.
язык это инструмент.
казалось бы инструмент устарел - выброси нах|й и без сожаления, но нет, лучше будем ныть и тянуть тонны легаси
И вообще printf и sprintf - это любят всякие кулхацкеры, для обнаружения эксплоитов.
Отличная дыра в жопебезопасности.
Будто бы во время вывода на телетайп это мега важно.
И давно вам, таки, кажется?
Хотя... иногда мне кажется, что их m.
PS. С максимой про троеточие не согласен. Если-таки их действительно разное число бывает, скажем, в одном вызове установить несколько разношерстных параметров объекта. Логика внутри похожая по большей части, что же, делать несколько функций, выносить одинаковую логику в какую-то подфункцию (писать на нее документацию, модульное тестирование и кучу всякой фигни)? Усложнение на пустом месте, я щитаю.
А где головка? Сделай, что-бы это было типобезопасно. Напиши правильные макросы и функции, проверяющие типы долным образом.
В конце концов, если язык не подходит для решения данной задачи, то смени на более подходящий. Какие проблемы? Или других языков не знаешь, code monkey?
http://ru.wikipedia.org/wiki/Vala
И со всеми современными возможностями ФЯП.
>И со всеми современными возможностями ФЯП.
Далеко не со всеми. Vala - детская игрушка. Там где Си - осознанный выбор, действительно считают каждый байт.
Элипсис - вот это атас, так что ненадо.
На тему смены языка можно говорить, когда проект создается с нуля. Если надо доводить до ума уже существующий - приходится ограничиваться исходным языком.
Эта фича тебе нужна в твоём проекте. А ты сам отказался это реализовывать, тк ты обязьяна.
Тебе никто не обязан здесь ничего делать, а то я напишу, а ты получишь баблосы.
Лучше ты сиди и мучайся и ешь свой элипсисный кактус. Вылавливай трудновыловимые ошибки по всему проекту.
Элипсисный — это какой?
больше похоже на тестовую функцию. нечто типа программного ассерт() для вызовов, которые например приходят по сети.
Я программист С++.
Я люблю есть кактус.
ОЛОЛО.
Я умею есть кактус.
А вам слабо?
ОЛОЛО
a<<8>>8<<8>>8<<8>>8<<8>>8?