stcopy.c
资源名称:socks5.zip [点击查看]
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:2k
源码类别:
代理服务器
开发平台:
Unix_Linux
- /*
- * Copyright (c) 1989, 1990, 1991 by the University of Washington
- *
- * For copying and distribution information, please see the file
- * <copyright.h>.
- */
- #include <stdio.h>
- #include <pmachine.h>
- char *stcopyr();
- int string_count = 0;
- int string_max = 0;
- /*
- * stcopy - allocate space for and copy a string
- *
- * STCOPY takes a string as an argument, allocates space for
- * a copy of the string, copies the string to the allocated space,
- * and returns a pointer to the copy.
- */
- char *
- stcopy(st)
- char *st;
- {
- if (!st) return(NULL);
- if (string_max < ++string_count) string_max = string_count;
- return strcpy((char *)malloc(strlen(st) + 1), st);
- }
- /*
- * stcopyr - copy a string allocating space if necessary
- *
- * STCOPYR takes a string, S, as an argument, and a pointer to a second
- * string, R, which is to be replaced by S. If R is long enough to
- * hold S, S is copied. Otherwise, new space is allocated, and R is
- * freed. S is then copied to the newly allocated space. If S is
- * NULL, then R is freed and NULL is returned.
- *
- * In any event, STCOPYR returns a pointer to the new copy of S,
- * or a NULL pointer.
- */
- char *
- stcopyr(s,r)
- char *s;
- char *r;
- {
- int sl;
- if(!s && r) {
- free(r);
- string_count--;
- return(NULL);
- }
- else if (!s) return(NULL);
- sl = strlen(s) + 1;
- if(r) {
- if ((strlen(r) + 1) < sl) {
- free(r);
- r = (char *) malloc(sl);
- }
- }
- else {
- r = (char *) malloc(sl);
- string_count++;
- if(string_max < string_count) string_max = string_count;
- }
- return strcpy(r,s);
- }
- /*
- * stfree - free space allocated by stcopy or stalloc
- *
- * STFREE takes a string that was returned by stcopy or stalloc
- * and frees the space that was allocated for the string.
- */
- void
- stfree(st)
- char *st;
- {
- if(st) {
- free(st);
- string_count--;
- }
- }