Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=6439461&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 04:46:06 2016
Кодировка: Windows-1251
[closed]помогите внести небольшую правку в код на С++ предположительно - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
MORGOT

Рег.: 20.03.2006
Сообщений: 220
Из: DAS
Рейтинг: 28
  [closed]помогите внести небольшую правку в код на С++ предположительно
      29.07.2007 03:52
 

Программировать сам не умею совершенно. Но (предполагаю) нашел нужный кусок кода в исходниках. Сейчас он превращает ИПы в маски ИПов с 24-мя битами - задача изменить его так, чтобы ИПы оставались исходными ИПами.
code:
if (strspn(GetHost(u), "0123456789.") == strlen(GetHost(u)) && (s = strchr(GetHost(u), '.')) && (s = strchr(s + 1, '.')) && (s = strchr(s + 1, '.')) && (!strchr(s + 1, '.'))) { /* IP addr */ s = sstrdup(GetHost(u)); *strrchr(s, '.') = 0; sprintf(end, "%s.*", s); free(s);

если я неправильно выбрал кусок, или нужна дополнительная информация - вот кусок побольше:
code:
/* Given a user, return a mask that will most likely match any address the * user will have from that location. For IP addresses, wildcards the * appropriate subnet mask (e.g. 35.1.1.1 -> 35.*; 128.2.1.1 -> 128.2.*); * for named addresses, wildcards the leftmost part of the name unless the * name only contains two parts. If the username begins with a ~, delete * it. The returned character string is malloc'd and should be free'd * when done with. */ char *create_mask(User * u) { char *mask, *s, *end; int ulen = strlen(GetIdent(u)); /* Get us a buffer the size of the username plus hostname. The result * will never be longer than this (and will often be shorter), thus we * can use strcpy() and sprintf() safely. */ end = mask = smalloc(ulen + strlen(GetHost(u)) + 3); end += sprintf(end, "%s%s@", (ulen < (*(GetIdent(u)) == '~' ? USERMAX + 1 : USERMAX) ? "*" : ""), (*(GetIdent(u)) == '~' ? GetIdent(u) + 1 : GetIdent(u))); if (strspn(GetHost(u), "0123456789.") == strlen(GetHost(u)) && (s = strchr(GetHost(u), '.')) && (s = strchr(s + 1, '.')) && (s = strchr(s + 1, '.')) && (!strchr(s + 1, '.'))) { /* IP addr */ s = sstrdup(GetHost(u)); *strrchr(s, '.') = 0; sprintf(end, "%s.*", s); free(s); } else { if ((s = strchr(GetHost(u), '.')) && strchr(s + 1, '.')) { s = sstrdup(strchr(GetHost(u), '.') - 1); *s = '*'; strcpy(end, s); free(s); } else { strcpy(end, GetHost(u)); } } return mask; }




Редактировал MORGOT (29.07.2007 13:08)
Nine17
Furia Roja

Рег.: 26.06.2003
Сообщений: 25553
Рейтинг: 13161
  Re: помогите внести небольшую правку в код на С++ (предположительно) [re: MORGOT]
      29.07.2007 10:24
 

Это не С++. В каком смысле IP адрес нужен? Как 123.12.12.12? Если так, то просто
 
code:
s = sstrdup(GetHost(u)); *strrchr(s, '.') = 0; sprintf(end, "%s.*", s);

Замени на
 
code:
sprintf(end, "%s",GetHost(u));




Entre flores fandanguillos y alegria nació España mi tierra de amor!
MORGOT

Рег.: 20.03.2006
Сообщений: 220
Из: DAS
Рейтинг: 28
  Re: помогите внести небольшую правку в код на С++ (предположительно) [re: Nine17]
      29.07.2007 10:55
 

да, именно в таком смысле
сейчас попробую.
Просто совершенно не знал, что выдает GetHost(u)
спасибо

MORGOT

Рег.: 20.03.2006
Сообщений: 220
Из: DAS
Рейтинг: 28
  Re: помогите внести небольшую правку в код на С++ (предположительно) [re: Nine17]
      29.07.2007 11:41
 

нет, segmentation fault при обращении к этому месту кода (функции?)

UPD: и даже если добавить пробел недостающий
Кстати, если это поможет определить язык, компилится это c помощью gcc.



Редактировал MORGOT (29.07.2007 12:16)
Nine17
Furia Roja

Рег.: 26.06.2003
Сообщений: 25553
Рейтинг: 13161
  Re: помогите внести небольшую правку в код на С++ (предположительно) [re: MORGOT]
      29.07.2007 12:51
 

free(s) убери.



Entre flores fandanguillos y alegria nació España mi tierra de amor!
MORGOT

Рег.: 20.03.2006
Сообщений: 220
Из: DAS
Рейтинг: 28
  Re: помогите внести небольшую правку в код на С++ (предположительно) [re: Nine17]
      29.07.2007 13:06
 

вроде заработало. Но правильный ответ не такой:
 
code:
if (strspn(GetHost(u), "0123456789.") == strlen(GetHost(u)) && (s = strchr(GetHost(u), '.')) && (s = strchr(s + 1, '.')) && (s = strchr(s + 1, '.')) && (!strchr(s + 1, '.'))) { /* IP addr */ s = sstrdup(GetHost(u)); sprintf(end, "%s", GetHost(u)); free(s);

спасибо, без вас я бы дольше разбирался

Nine17
Furia Roja

Рег.: 26.06.2003
Сообщений: 25553
Рейтинг: 13161
  Re: помогите внести небольшую правку в код на С++ (предположительно) [re: MORGOT]
      29.07.2007 13:11
 

Это неправильный ответ.
code:
s = sstrdup(GetHost(u)); free(s);

лишнее. Вреда нет, конечно, но и пользы никакой.



Entre flores fandanguillos y alegria nació España mi tierra de amor!
Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в