From: didier g. <di...@us...> - 2010-01-27 12:36:52
|
Update of /cvsroot/netatalk/netatalk/etc/afpd In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv17929 Modified Files: catsearch.c Log Message: use open and fchdir rather than getcwd in catsearch Index: catsearch.c =================================================================== RCS file: /cvsroot/netatalk/netatalk/etc/afpd/catsearch.c,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** catsearch.c 5 Jan 2010 12:06:33 -0000 1.29 --- catsearch.c 27 Jan 2010 12:36:42 -0000 1.30 *************** *** 496,501 **** int ccr; struct path path; - char *orig_dir = NULL; - int orig_dir_len = 128; char *vpath = vol->v_path; char *rrbuf = rbuf; --- 496,499 ---- *************** *** 503,506 **** --- 501,505 ---- int num_rounds = NUM_ROUNDS; int cached; + int cwd = -1; if (*pos != 0 && *pos != cur_pos) { *************** *** 530,542 **** /* Save current path */ ! orig_dir = (char*)malloc(orig_dir_len); ! while (getcwd(orig_dir, orig_dir_len-1)==NULL) { ! if (errno != ERANGE) { ! result = AFPERR_MISC; ! goto catsearch_end; ! } ! orig_dir_len += 128; ! orig_dir = realloc(orig_dir, orig_dir_len); ! } /* while() */ while ((cidx = reducestack()) != -1) { --- 529,536 ---- /* Save current path */ ! if ((cwd = open(".", O_RDONLY)) < 0) { ! result = AFPERR_MISC; ! goto catsearch_end; ! } while ((cidx = reducestack()) != -1) { *************** *** 659,666 **** catsearch_end: /* Exiting catsearch: error condition */ *rsize = rrbuf - rbuf; ! if (orig_dir != NULL) { ! chdir(orig_dir); ! free(orig_dir); ! } return result; } /* catsearch() */ --- 653,662 ---- catsearch_end: /* Exiting catsearch: error condition */ *rsize = rrbuf - rbuf; ! if (cwd != -1) { ! if ((fchdir(cwd)) != 0) { ! LOG(log_debug, logtype_afpd, "error chdiring back: %s", strerror(errno)); ! } ! close(cwd); ! } return result; } /* catsearch() */ |